HTML5技术

我拖拖拖--H5拖放API基础篇 - 大~熊

字号+ 作者:H5之家 来源:H5之家 2017-05-04 15:03 我要评论( )

不要搞错,本文不是讲如何拖地的。看过《javascript精粹》朋友应该知道,他实现拖放的过程比较复杂,现在时代不同了,我们用H5的新的拖放API就能非常方便的实现拖放效果了。最近在园子见一园友写了一篇《HTML5 进阶系列:拖放 API 实现拖放排序》,真乃大师

  不要搞错,本文不是讲如何拖地的。看过《javascript精粹》朋友应该知道,他实现拖放的过程比较复杂,现在时代不同了,我们用H5的新的拖放API就能非常方便的实现拖放效果了。最近在园子见一园友写了一篇《HTML5 进阶系列:拖放 API 实现拖放排序》,真乃大师之作,大~熊同学作为一代菜鸟(不是宗师),无法与之想比,遂推出基础篇,希望各位园友有所收获。

一、一个简单的例子--地上有石子捡几个吧

  

地上有石子,捡几个吧 .lanzi{ width height border .floor{ width height border .shizi{ display width height background border-radius margin-top text-align line-height从前有个人走在丛林里,传来一个声音,说地上有石子,捡几个吧,会有用的。那个人不以为然,捡了一个,但是走出从林后发现手中的石子变成了金子...(
这个故事充满了哲学智慧),下面我们要给出一些石子,希望你能把它见到篮子里,没准编程金子哦!!
我是篮子我是地石子石子石子石子石子石子石子石子石子石子 window.addEventListener(); function handler(){ ); ); var shizi; floor.addEventListener((e){ ){ shizi = e.target; e.dataTransfer; dt.effectedAllowed ; } },false); lanzi.addEventListener(); lanzi.addEventListener((e){ ); lanzi.appendChild(shizi); e.preventDefault(); e.stopPropagation(); },false); document.ondragover = function(e){e.preventDefault();} document.ondrop = function(e){e.preventDefault();} }

  (gif演示是用的edge,我的ubuntu做gif太麻烦了,借了个windows)

  

  这里用一个简单的例子演示了如何实现拖放,那么问题来了,从上面的演示中你可以猜出一些属性和方法的用法了,那些方法的作用究竟是怎样的?那些个属性又是啥意思呢?下面一一到来。

二、实现拖放的一般步骤

  1、找到一个可拖的元素

  正如不是所有人都叫大熊一样,并不是所有的元素都是可以被拖的。img和a元素默认可拖,其他元素默认不可拖,当时可以加一个draggable=true让它可拖。

  

  2、处理拖放有关事件

  所有相关事件如下:(这个摘自:)

  源对象:

  过程对象:

  目标对象:

  • drop:源对象被拖放到目标对象内。
  •   我们可以用一个测试来看看这些事件的触发时机和事件对象为何物。

      

    testEvents .source{ width height border .process{ width height border margin-top .dest{ width height border margin-top window.onload=function(){ ); ); ); var sourceEle; source.addEventListener((e){ console.log(); console.log(e); sourceEle = e.target; e.dataTransfer; dt.effectedAllowed ; },false); process.addEventListener((e){ console.log(); console.log(e); },false); process.addEventListener((e){ console.log(); console.log(e); },false); process.addEventListener((e){ console.log(); console.log(e); },false); source.addEventListener((e){ console.log(); console.log(e); },false); dest.addEventListener((e){ console.log(); console.log(e); e.preventDefault(); },false); dest.addEventListener((e){ console.log(); console.log(e); dest.appendChild(sourceEle); e.preventDefault(); e.stopPropagation(); },false); document.ondragover = function(e){e.preventDefault();} document.ondrop = function(e){e.preventDefault();} }

      这个例子将拖放过过程涉及的事件做了一个罗列,这里不再细讲,你可以查看控制台看看事件的触发顺序和事件对象。

    三、一个重要的对象DataTransfer对象

      这里首字母大写了,严格说叫做一个类,每一次拖放会实例化这个类,保存在事件对象的dataTransfer属性中。其属性和方法见下表(来自:)

      感谢这位兄台的总结,拿了你这么多东西,谢谢啊。

         

      

      

          

     

      下面做一些简单的测试

      关于effectAllowed和dropEffect,这里将前者置为effectAllowed后者用下拉列表选择,以便于看到不同的鼠标样式。

      

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    网友点评
    l