全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

由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,再敲几行代码岂不是美滋滋。

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

先放效果图吧:


首先看看我们的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]));
  }

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

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


# js实现图片拖拽排序  # js实现拖拽排序  # js实现图片拖拽  # antdesign-vue结合sortablejs实现两个table相互拖拽排序功能  # 基于js实现的图片拖拽排序源码实例  # React.js组件实现拖拽排序组件功能过程解析  # Elementui表格组件+sortablejs实现行拖拽排序的示例代码  # 基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能  # JS拖拽排序插件Sortable.js用法实例分析  # react.js组件实现拖拽复制和可排序的示例代码  # js 实现拖拽排序详情  # 拖放  # 拖拽  # 事件中  # 几个  # 如果你  # 不需要  # 最重要  # 才可以  # 充分利用  # 这几个  # 听我  # 岂不是  # 大家多多  # 过程中  # 方法如下  # 图吧  # 几行  # 边缘  # 就是在  # format 


相关文章: 常州自助建站工具推荐:低成本搭建与模板选择技巧  Bpmn 2.0的XML文件怎么画流程图  小程序网站制作需要准备什么资料,如何制作小程序?  大连 网站制作,大连天途有线官网?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  如何通过商城免费建站系统源码自定义网站主题?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  如何彻底卸载建站之星软件?  济南网站制作的价格,历城一职专官方网站?  高防服务器租用指南:配置选择与快速部署攻略  上海网站制作开发公司,上海买房比较好的网站有哪些?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何在搬瓦工VPS快速搭建网站?  如何用美橙互联一键搭建多站合一网站?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  如何确保FTP站点访问权限与数据传输安全?  山东云建站价格为何差异显著?  如何快速选择适合个人网站的云服务器配置?  如何在新浪SAE免费搭建个人博客?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  油猴 教程,油猴搜脚本为什么会网页无法显示?  广州美橙建站如何快速搭建多端合一网站?  建站主机是否属于云主机类型?  制作证书网站有哪些,全国城建培训中心证书查询官网?  魔方云NAT建站如何实现端口转发?  如何高效完成独享虚拟主机建站?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  如何挑选最适合建站的高性能VPS主机?  如何快速启动建站代理加盟业务?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  装修招标网站设计制作流程,装修招标流程?  如何做静态网页,sublimetext3.0制作静态网页?  济南企业网站制作公司,济南社保单位网上缴费步骤?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  网站制作网站,深圳做网站哪家比较好?  如何在腾讯云免费申请建站?  如何用已有域名快速搭建网站?  如何高效搭建专业期货交易平台网站?  制作电商网页,电商供应链怎么做?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  如何选购建站域名与空间?自助平台全解析  临沂网站制作公司有哪些,临沂第四中学官网?  建站之星导航菜单设置与功能模块配置全攻略  ppt制作免费网站有哪些,ppt模板免费下载网站?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  潮流网站制作头像软件下载,适合母子的网名有哪些? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。