当前位置:首页 > 日记 > 正文

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

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

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

一、HTML5拖放API的知识点

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

拖放API的监听事件如下:

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

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

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

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

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

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

先放效果图吧:


首先看看我们的dom结构

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

我们需要监听的事件:

  const dragCon = document.getElementById('drag-wrap');  dragCon.addEventListener('dragstart', startDrag, false);  /**  * 这里一定要阻止draver的默认行为,不然触发不了drop  */  dragCon.addEventListener('draver', 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]));  }

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

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

相关文章

jquery dataTable 后台加载数据并

jquery dataTable 后台加载数据并

分页,后台,加载数据,实例代码,电脑软件,使用 dataTable后台加载数据并分页。网上版本很多,但很多都是不能用或者不详细的,这里是已经验证过的。引用 js文件<script src="static/ace/js/jquery-2.0.3.min.js"></script><script src="static…

ps怎么设计一款3D立体文字效果?

ps怎么设计一款3D立体文字效果?

3D,文字效果,电脑软件,ps,ps中想要设计立体文字,该怎么设计呢?下面我们就来看看效果图,希望的朋友可以学习一下。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、按CTRL+N新建一个600*600的文档,按SHIFT+…

解析Asp.net Core中使用Session的

解析Asp.net Core中使用Session的

方法,电脑软件,net,Asp,Session,前言2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年。元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Core中引用dll,以往我们引用DLL都是直接引用…

javascript操作cookie

javascript操作cookie

操作,电脑软件,javascript,cookie,前端js cookie的使用cookie的作用:服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已 经登录网站,用户可能会得到提示,…

angular2 ng build部署后base文件

angular2 ng build部署后base文件

文件路径问题,详细,电脑软件,ng,base,最近在学习angular2中遇到了一些问题,问题如下:问题:使用angular-cli搭建的项目,执行ng build后,浏览器打开空白,发现文件的路径不对解决方案: 在package.json文件的scripts中添加命令:"build":"ng build --…

JavaScript之DOM插入更新删除_动力

JavaScript之DOM插入更新删除_动力

删除,学院,节点,动力,电脑软件,JavaScript之DOM插入更新删除,供大家参考,具体内容如下更新拿到一个DOM节点后,我们可以对它进行更新。可以直接修改节点的文本,方法有两种:一种是修改innerHTML属性,这个方式非常强大,不但可以修改一个DOM节点的文本…

ps怎样快速制作一个旋转空调按钮图

ps怎样快速制作一个旋转空调按钮图

空调,快速,按钮图标,电脑软件,ps,ps怎样快速制作一个旋转空调按钮图标?运用PHOTOSHOP软件,可以很简单的制作大家想要的照片,下面和小编一起来看看具体步骤吧。效果图:具体步骤:首先我们来分析一下。不管设计什么的时候,首先都要分析,不是拿着就开…

详谈javascript精度问题与调整

详谈javascript精度问题与调整

调整,精度问题,电脑软件,javascript,一个经典的问题:0.1+0.2==0.3答案是:false因为:0.1+0.2=0.30000000000000004第一次看到这个结果就是无比惊讶,下巴碰到地上,得深入了解下问题出在哪里,该怎么去调整。产生问题的原因在JS中数值类型就只有numbe…

VS2010/VS2013项目创建 ADO.NET连

VS2010/VS2013项目创建 ADO.NET连

项目创建,步骤,连接,详细,电脑软件,本随笔主要是对初学者通过ADO.NET连接数据库的步骤(刚开始我也诸多不顺,所以总结下,让初学者熟悉步骤)1、打开VS新建一个项目(这里的VS版本不限,建项目都是一样的步骤)VS2010版本如图:VS2013版本如图:2、非空项…

Angular动态添加、删除输入框并计

Angular动态添加、删除输入框并计

动态添加,删除,计算,输入框,实例代码,Angular动态添加、删除输入框并计算值实例代码摘要: 在学习群中交流时,有人分享了一个动态添加输入框的方法,我在其基础上进行了一些改进这个功能本身并不复杂,但还是要注意,每个ng-model的对象必须是不同…

怎么使用excel的复制公式excel的复

怎么使用excel的复制公式excel的复

方法,拖动,公式,使用方法,电脑软件,  Excel中公式的复制操作有其特殊性,对此小编从以下几个方面出发,给大家介绍一下在不同情况下公式的复制方法,希望对大家有所帮助。excel的复制公式使用方法一:直接复制公式法首先选中要复制公式的单元格或…

关于jQuery.ajax | 的jsonp碰上pos

关于jQuery.ajax | 的jsonp碰上pos

详解,电脑软件,ajax,jQuery,post,前言以前一直以为当$.ajax()的 dataType设置为jsonp时,其method(请求方法)无论怎么设置,都会变成get,直到前两天遇到了一个坑。下面来一起看看详细的介绍:关于跨域请求与jsonp 跨域:由于受到同源策略(协议、域名、…