JS实现简易的图片拖拽排序实例代码


Posted in Javascript onJune 09, 2017

由HTML5的拖放API,实现的简易图片拖放效果。

一、HTML5拖放API的知识点

首先我们得知道元素怎么才可以被拖放,需要设置它们的draggable属性,其中img和a标签的dragable属性默认是true,不需要我们手动设置。

拖放API的监听事件如下:

  1. dragstart: 源对象拖拽开始;
  2. drag: 源对象拖拽的过程中;
  3. dragend: 源对象拖拽结束;
  4. dragenter: 进入过程对象区域;
  5. dragover: 在过程对象区域内移动;
  6. dragleave: 离开过程对象区域;
  7. drop: 源对象拖放到目标区域。

对于这几个事件,我们要结合需求利用preventDefault()取消它的默认行为。

在拖放事件中,提供dataTransfer用于在源对象与目标对象之间传递数据,dataTransfer一般通过e.dataTransfer调用,dataTransfer的方法如下:

  1. setData(format, data)
  2. getData(format);
  3. clearData()。

以上是一些基础知识,与其听我BB,不如去打开MDN,再敲几行代码岂不是美滋滋。

二、简易的图片拖拽排序。

先放效果图吧:

JS实现简易的图片拖拽排序实例代码

首先看看我们的dom结构

<!-- 部分标签 -->
  div#drag-wrap
    div(class="item" id="wrap1")
      img(id="img1")
    ...
    ...

我们需要监听的事件:

const dragCon = document.getElementById('drag-wrap');

  dragCon.addEventListener('dragstart', startDrag, false);

  /**
  * 这里一定要阻止dragover的默认行为,不然触发不了drop
  */
  dragCon.addEventListener('dragover', function (e) {
    e.preventDefault();
  }, false);
  dragCon.addEventListener('drop', exchangeElement, false);

在dragstart事件中,我们需要记住需要交换的子元素和父元素:

function startDrag(e) {
    e.dataTransfer.setData('Text', e.target.id + ';' + e.target.parentElement.id);
  }

最重要的就是在drop事件中处理我们交换元素的逻辑和一些边缘条件的判断。

function exchangeElement(e) {
    e.preventDefault();
    const el = e.target;
    let PE, //要插入位置的父元素
      CE; //需要交换的元素
    if (el.tagName.toLowerCase() !== 'div') {           PE = el.parentElement;
      CE = el;
    } else {
      PE = el;
      CE = el.querySelector('img');
    }

    /**
     * 判断不在控制范围内
     */
    if (!PE.classList.contains('item')) {
      return;
    }
    const data = e.dataTransfer.getData('Text').split(';');
    //交换元素
    document.getElementById(data[1]).appendChild(CE);
    PE.appendChild(document.getElementById(data[0]));
  }

其实如果你充分利用几个阶段的事件,做出的效果会更精致。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JSQL SQLProxy 的 php 版本代码
May 05 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
Apr 17 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
Nov 22 Javascript
indexOf 和 lastIndexOf 使用示例介绍
Sep 02 Javascript
JS实现很酷的EMAIL地址添加功能实例
Feb 28 Javascript
跟我学习javascript的定时器
Nov 19 Javascript
JavaScript递归操作实例浅析
Oct 31 Javascript
jQuery与JavaScript节点创建方法的对比
Nov 18 Javascript
AngularJS Controller作用域
Jan 09 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
Sep 25 Javascript
angularjs1.5 组件内用函数向外传值的实例
Sep 30 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
Feb 03 Javascript
jQuery为某个div加入行样式
Jun 09 #jQuery
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 #Javascript
node.js中cluster的使用教程
Jun 09 #Javascript
vue bootstrap小例子一枚
Jun 09 #Javascript
详解webpack解惑:require的五种用法
Jun 09 #Javascript
Bootstrap输入框组件使用详解
Jun 09 #Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
Jun 09 #jQuery
You might like
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
2007/07/21 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
2020/04/30 jQuery
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
Django URL传递参数的方法总结
2016/08/28 Python
Python 正则表达式的高级用法
2016/12/04 Python
基于使用paramiko执行远程linux主机命令(详解)
2017/10/16 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
2019/04/29 Python
python利用7z批量解压rar的实现
2019/08/07 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
自荐信的禁忌和要点
2013/10/15 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
灰雀教学反思
2014/04/28 职场文书
大学生心理活动总结
2014/07/04 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
心得体会的写法
2014/09/05 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书