html5 drag拖拽

一、概念

1. 被拖拽元素(拖拽目标)

1.1 属性

必须给拖拽目标设置draggable=true,目标才能拖动

1.2 方法

1.2.1
ondragstart - 用户开始拖动元素时触发 - 只触发一次

      handleDragStart(event, code) {
        console.log('拖动开始');
        // 传递数据
        event.dataTransfer.setData('code', code);
      },

1.2.2
ondrag - 元素正在拖动时触发 - 触发多次

      handleDrag(event, code) { 
        console.log(event);
      },

1.2.3
ondragend - 完成目标元素拖动时触发 - 触发一次

      handleDragEnd(event) { 
        console.log('拖动结束');
        let code = event.dataTransfer.getData('code'),
      },

2. 可以放置被拖拽元素的可释放元素(释放目标)

2.1 方法

2.1.1
ondragenter - 当被鼠标拖动的元素进入该元素范围内时触发此事件 - 触发一次

      handleDragEnter(event) { 
        console.log(event);
      },

2.1.2
ondragover - 当某被拖动的对象在另一对象容器范围内拖动时触发此事件 - 触发多次

      handleDragOver(event) { 
        console.log(event);
      },

2.1.3
ondragleave - 当被鼠标拖动的对象离开其容器范围内时触发此事件 - 触发一次

      handleDragLeave(event) { 
        console.log(event);
      },

2.1.4
ondrop - 在一个该元素中的拖动过程中,释放鼠标键时触发此事件 - 触发一次

      handleDrop(event) { 
        console.log('拖动结束');
        let code = event.dataTransfer.getData('code'),
      },

2.2 注意事项

1.可释放目标必须重写ondragenterondragover两个方法并且该元素要使用这两个方法,才能将元素变成可放置东西的元素。不然拖动目标到任何元素都会显示一个圆圈不可释放。
2.ondrop是只有在实现这个方法的元素(容器)里释放鼠标键触发。

3. 拖拽目标和释放目标间传递数据

3.1 dataTransfer对象

dataTransfer对象是事件对象的属性,所以只能在拖放事件的事件处理程序中访问dataTransfer对象。在事件处理程序中,可以使用这个对象的属性和方法来 完善拖放功能。

3.2 方法

  1. setData('code','hello')
  2. getData('code')

3.setDragImage(Element img,long x,long y):自定义拖放元素的鼠标图标

img表示拖放时的 <> 元素的图标,x 表示图标距离鼠标指针的x轴方向的偏移值,y表示图标距离鼠标指针y轴方向的偏移值。

  1. ......

二、event事件中各种位置信息

鼠标事件距离分析.png

1.如上图所示,需注意pageYclientY在页面没有滚动条时是一样的值,但有了滚动条以后,pageY一定是大于或等于 clientY。即pageY受到滚动条的影响。

三、实战

有了以上基础,实现拖拽功能很简单,无非就是设置元素的绝对定位或者在释放的地方添加一个元素,这些教程请自行百度。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   HTML5 规范了很多新 HTML 标记。为了配合这些标记的变化,HTML5 规范也用显著篇幅定义了很多 Ja...
    霜天晓阅读 721评论 0 1
  • 前言 拖放(drap && drop)在我们平时的工作中,经常遇到。它表示:抓取对象以后拖放到另一个位置。目前,它...
    weiqinl阅读 1,401评论 0 3
  • 兼容性:HTML5在老版本的浏览器上也可以正常运行 实用性:HTML5内部并没有特别复杂的功能,它只封装了那些常用...
    舌尖上的苏东坡阅读 2,596评论 0 0
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,543评论 1 11
  • 一、什么是拖拽和释放? 拖拽:Drag释放:Drop拖拽指的是鼠标点击源对象后一直移动对象不松手,一但松手即释放了...
    栀子花wish阅读 3,056评论 1 3