相关事件

  1. drag
  2. dragstart
  3. dragend
  4. dragover
  5. dragenter
  6. dragleave
  7. dragexit
  8. drop

原生写法

var dragged;/* 可拖动的目标元素会触发事件 */document.addEventListener("drag", function( event ) {}, false);document.addEventListener("dragstart", function( event ) {// 保存拖动元素的引用(ref.)dragged = event.target;// 使其半透明event.target.style.opacity = .5;}, false);document.addEventListener("dragend", function( event ) {// 重置透明度event.target.style.opacity = "";}, false);/* 放下目标节点时触发事件 */document.addEventListener("dragover", function( event ) {// 阻止默认动作event.preventDefault();}, false);document.addEventListener("dragenter", function( event ) {// 当可拖动的元素进入可放置的目标高亮目标节点if ( event.target.className == "dropzone" ) {event.target.style.background = "purple";}}, false);document.addEventListener("dragleave", function( event ) {// 当拖动元素离开可放置目标节点,重置其背景if ( event.target.className == "dropzone" ) {event.target.style.background = "";}}, false);document.addEventListener("drop", function( event ) {// 阻止默认动作(如打开一些元素的链接)event.preventDefault();// 移动拖动的元素到所选择的放置目标节点if ( event.target.className == "dropzone" ) {event.target.style.background = "";dragged.parentNode.removeChild( dragged );event.target.appendChild( dragged );}}, false);
复制代码

jQuery写法

    //拖放开始:获取id放入dataTransfer$(".divide-pep").on("dragstart",function(e){e.originalEvent.dataTransfer.setData("obj_add",e.target.id);console.log(e.originalEvent.dataTransform)});//允许放入$(".divide-droppable,.option-area").on("dragover",function(e){e.originalEvent.preventDefault();})//放下事件$(".divide-droppable").on("drop",function(e){e.originalEvent.preventDefault;var id = e.originalEvent.dataTransfer.getData("obj_add");$(this).append($("#"+id));})$(".option-area").on("drop",function(e){e.originalEvent.preventDefault;var id = e.originalEvent.dataTransfer.getData("obj_add");$(this).append($("#"+id));})
复制代码

originalEvent是什么?

个人理解originalEvent是jQuery封装的,用于获取原生event事件的;

栗子

$('#aaa').on("touchstart", touchStart);function touchStart(event){console.log(event);
}
//这样可读到,event.originalEvent.touches[0]
复制代码
//用原生的,这样可读到,event.touches[0]
document.getElementById('aaa').addEventListener("touchstart", touchStart, false);function touchStart(event){console.log(event.touches[0]);
}
复制代码

dataTransfer是什么?

在进行拖放操作时,DataTransfer对象用来保存被拖动的数据。它可以保存一项或多项数据、一种或者多种数据类型。

方法

addElement()

设置拖动源。通常你不需要改变这项,如果修改这项将会影响拖动的哪个节点和dragend事件的触发。默认目标是被拖动的节点。 obj.addElement();

clearData()

删除与给定类型关联的数据。类型参数是可选的。如果类型为空或未指定,将删除所有类型相关联的数据。如果不存在指定类型的数据,或数据传输不包含任何数据,此方法将没有任何效果。 obj.clearData(type);

getData()

根据指定的类型检索数据,如果指定类型的数据不存在或者该 DataTransfer 对象中没有数据,方法将返回一个空字符串。 obj.getData(type);

setData()

为一个给定的类型设置数据。如果该数据类型不存在,它将添加到的末尾,这样类型列表中的最后一个项目将是新的格式。如果已经存在的数据类型,替换相同的位置的现有数据。就是,当更换相同类型的数据时,不会更改类型列表的顺序。 obj.setData(type,data);

之前用jq写过拖拽总结的文,当时应该是参考别人的文章写的,如侵权请告知~

拖拽的原生和jQuery写法相关推荐

  1. html实现拖拽排序,简单的jquery拖拽排序效果实现代码

    步骤: 1.实现随鼠标移动的效果: 2.初始化一个元素及其坐标: 3.拖拽对象的最后坐标,与元素的坐标 进行计算和判断 来确定 要插入的目标元素: 4.用insertBefore 方法 插入到目标元素 ...

  2. jquery ui放大缩小_jQuery拖拽放大缩小插件idrag

    插件描述:24行代码,让你的网页元素任意放大.缩小.拖拽.移动 基于jQuery:$(document).mousemove(function(e) { if (!!this.move) { var  ...

  3. Vue2 _ 实现拖拽功能

    老项目重构,其中有一些拖拽功能,不过用的是两个开源 JS 拖拽文件实现的效果,版本太老了,所以需要换代了,然后就查阅了能够用 Vue 来简单快速实现拖拽的功能实现方法 : 目录 一.HTML 拖放 二 ...

  4. vue3 draggable拖拽

    !!首先安装  vuedraggable npm i -S vuedraggable@next 一定要带上@next,不然就会报错 很恶心!使用建议看官网. 官网:vue.draggable中文文档 ...

  5. jquery 手指滑动多半屏_JS拖拽专题(五)——「玩出花儿来」移动端滑动事件的封装...

    欢迎来到我的JS拖拽专题系列文章,本章节将是拖拽系列的最后一篇.感谢大家的支持^_^ 上一章节我们说到了拖拽让图片相互之间交换位置,相对来说是一个比较综合的示例,涉及到了矩形的碰撞检测,勾股定理计算两 ...

  6. 原生javascript实现拖拽改变table表格行高(html)

    最近在做一个OA的项目,里面需要大量的表格操作.有一些是使用html中的table去模拟excel的功能,等项目做完,我会把这些好玩的功能抽取出来,做一个html的excel插件.   今天先和大家分 ...

  7. 用jQuery添加dragstart,dragover和drop事件,实现拖拽效果

    一.效果图 二.代码 <!DOCTYPE html> <html><head><meta charset="UTF-8"><t ...

  8. React.js实现原生js拖拽效果及思考

    一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...

  9. jquery 磁铁模式控件_利用JQuery拖拽插件实现拖拽效果

    asp教程x.cs" inherits="jquerydrag._default" %> $(document).ready(function() { //拖拽方法 ...

最新文章

  1. ecshop文章增加点击次数插件
  2. 高效整洁CSS代码原则
  3. composer安装其实可以很简单 两行命令就解决了
  4. 17、Java Swing Timer:计时器组件
  5. y7000p电池固件_拯救者Y7000、Y7000P、Y9000k显卡切换了解一下
  6. 运动搜索(运动估计)知识
  7. java poi读取excel公式,返回计算值(转)
  8. Flash 3D 基础
  9. windows10连接小米耳机Redmi AirDots 2
  10. skiller3.31 发布
  11. 《彩虹屁》快夸夸我!彩虹屁生成器
  12. 笔记本win7怎么重装系统步骤
  13. python画平行四边形_利用transform skewX制作平行四边形导航菜单
  14. 电商平台--Mysql主从搭建(2)
  15. NYOJ171 聪明的kk
  16. 雷达编程实战之恒虚警率(CFAR)检测
  17. 小程序:微信公众平台:小程序
  18. 软件工程头歌软件测试(实验五)软件项目管理(实验六)
  19. ultramon安装
  20. SSM冬奥会志愿者招募系统毕业设计源码191621

热门文章

  1. async [ə'zɪŋk] 函数
  2. JavaScript为unicode编码转换为中文
  3. 《Head First Python》笔记 第四章 持久存储
  4. Android学习笔记21:ImageView获取网络图片
  5. leetcode 3. Longest Substring Without Repeating Characters
  6. mac os x 添加 用户 所属 组
  7. HTML5中关于wheel事件兼容性处理
  8. jsp写入mysql数据库时出现乱码
  9. CSS:布局的三个关键属性:float、position、display
  10. 如何对.NET远程处理框架相关知识简介