美文网首页
js的拖动相关

js的拖动相关

作者: Ertsul | 来源:发表于2018-06-29 15:37 被阅读45次

拖动相关的事件

  • dragstart: 被拖动元素 开始拖动 时触发的事件。
  • drag: 被拖动元素 拖动过程 触发的事件。
  • dragend: 被拖动元素 停止拖动 时的触发事件。
  • dragenter: 被拖动元素 进入目标元素/有效元素 时触发的事件。
  • dragover: 被拖动元素 在目标元素/有效元素上移动 时触发的事件。
  • dragleave: 被拖动元素 离开目标元素/有效元素 时触发的事件。
  • drop: 被拖动元素 放置到目标元素/有效元素 时触发的事件。

相关事件的默认行为

  • dragover: 默认不允许拖动行为。
  • drop: 默认不允许放置行为。

dataTransfer

要实现拖动的需求,除了要用到拖动相关的事件,还需要用到 dataTransfer 对象来作为 被拖动元素拖动元素 之间 传输数据 的桥梁。其主要的方法如下:

  • event.dataTransfer.setData(dataType, data)
    • dataType: 主要支持两种数据类型 TextURL
    • data: 要传输的数据,是字符串。
  • event.dataTransfer.getData(dataType)

简单的图片拖动交换

文档的DOM结构

一个大 div 里面包裹 4个小 div每个小 div 里面都有一个 img 图片。由于 img 标签的默认 draggabletrue,所以不需要设置。

<div class="drag-wrap">
    <div class="item" id="wrap1">
        <img src="../wallpaper/01.jpg" id="img1" alt="picture">
    </div>
    <div class="item" id="wrap2">
        <img src="../wallpaper/02.jpeg" id="img2" alt="picture">
    </div>
    <div class="item" id="wrap3">
        <img src="../wallpaper/03.jpeg" id="img3" alt="picture">
    </div>
    <div class="item" id="wrap4">
        <img src="../wallpaper/04.jpeg" id="img4" alt="picture">
    </div>
</div>

js实现逻辑

分析:我们的拖动是在 drag-wrap 上进行的,所以我们只需要监听 drag-wrap 相关的拖动事件,然后通过 event.target 获取目标元素就可以了。

  • 阻止 drag-wrapdragover 默认行为。
let dragBox = document.getElementsByClassName('drag-wrap')[0];
dragBox.addEventListener('dragover', function (e) {
    e.preventDefault(); // 默认不允许拖动行为,要阻止默认行为
}, false)
  • 被拖动和拖动元素数据传输
dragBox.addEventListener('dragstart', function (e) {
    console.log("start... \n target: " + e.target.id);
    e.dataTransfer.setData('Text', e.target.id);
}, false)
  • 设置放置监听事件
    通过获取 dataTransfer 传输的被拖动元素的 id,通过交换被拖动图片元素和拖动图片元素的 src 即可。
dragBox.addEventListener('drop', function (e) {
    e.preventDefault(); // 默认不允许放置元素行为,要阻止默认行为

    console.log("end... \n target: " + e.target.id);

    let data = e.dataTransfer.getData('Text');
    let temp = e.target.src
    e.target.src = document.getElementById(data).src;
    document.getElementById(data).src = temp;
}, false)

效果

04.gif

连连看

最后写了一个简单的连连看游戏,简单地运用了上面的知识点。效果如下:

04.gif

连连看github地址:
https://github.com/Ertsul/Projects/tree/master/%E8%BF%9E%E8%BF%9E%E7%9C%8B

相关文章

  • js的拖动相关

    拖动相关的事件 dragstart: 被拖动元素 开始拖动 时触发的事件。 drag: 被拖动元素 拖动过程 触发...

  • JS清除选择内容的方法

    今天在做一个DIV拖动的效果,发现在拖动的时候会选中页面中的文本,于是找了一下JS清除选择的内容的相关信息。在得到...

  • UIScrollViewDelegate定义的一些方法

    本文主要讲拖动相关的效果,所以 zoom 相关的方法跳过不提,拖动相关的 delegate 方法按调用顺序分别是:...

  • js实现拖拽事件

    拖放事件 拖放是由拖动与释放两部分组成,拖放事件也分为被拖动元素的相关事件,和容器的相关事件。 被拖动元素的相关事...

  • 实现简单的拖动

    拖动div实现 标签(空格分隔): js js 实现 2.jQuery 实现

  • JS拖动排序

    1. 最终效果 2. 插件的下载以及代码 下载 引入js文件即可使用 注意看一下jquery链接有没有失效 jqu...

  • 关于表格多行头部水平拖动

    引入jquery.js和jq.resizableColumns.js th设置data-noresize禁止拖动初始化

  • 网页禁止选择,复制的方法

    js ps: document.ondragstart 拖动时触发document.onkeydown 按下...

  • H5移动端自定义video播放控件controls(带播放暂停,

    效果图如下 html结构部分 JS部分 说明:video不支持本地视频的进度拖动,会出现拖动就重头播放的情况,视频...

  • js drag拖动排序

    这次来做一个拖动排序,带有动画效果,先上效果图,不熟悉拖动api的可以查看链接 思路(先不考虑动画) 每个li既是...

网友评论

      本文标题:js的拖动相关

      本文链接:https://www.haomeiwen.com/subject/yjvoyftx.html