实现" />
IT学习网是免费的终身在线学习平台,现在主要提供IT(互联网)方面的教程,博客等方面的内容
主页 > 前端 > > 正文

程序员入门教程实现元素拖拽的两种方式

来源:IT学习网整理 发布时间:2020-02-14 18:51 标签:实现方式元素两种拖拽
浏览:
为将要拖拽的元素设置允许拖拽,并赋予dragstart事件将其id转换成数据保存;为容器添加dragover属性添加事件阻止浏览器默认事件,允许元素放置,并赋予drop事件进行元素的放置程序员入门教程。"/>实现元素拖拽的两种方式

前端开发前端导航工具/手册更多栏目

折扣返利

网站投稿

书籍/周边

站内搜索

fly63前端网

提交

我要投稿

实现元素拖拽的两种方式

时间: 2019-08-08阅读: 173标签: 拖拽

第一种方式:使用H5的API dataTransfer

实现思路:

1.为将要拖拽的元素设置允许拖拽,并赋予dragstart事件将其id转换成数据保存;

2.为容器添加dragover属性添加事件阻止浏览器默认事件,允许元素放置,并赋予drop事件进行元素的放置。

代码如下:

<html> <head> <meta charset="utf-8"> <style> .box1 { width: 100px; height: 100px; border: 1px black solid; margin-bottom: 20px; background: lightblue; } .box2 { width: 100px; height: 100px; border: 1px black solid; background: lightcoral; } </style> </head> <body> <!-- 参数要传入event对象 --> <div ondragover="allowdrop(event)" ondrop="drop(event)"> <img src="http://www.fly63.com/article/detial/5200/img/2.jpg" draggable="true" ondragstart="drag(event)"> <span>我是盒子一</span> </div> <div ondragover="allowdrop(event)" ondrop="drop(event)"> <span>我是盒子二</span></div> <script> function allowdrop(e) { e.preventDefault(); } function drop(e) { e.preventDefault(); var data = e.dataTransfer.getData("text"); e.target.appendChild(document.getElementById(data)); } function drag(e) { e.dataTransfer.setData("text", e.target.id); } </script> </body> </html>


第二种方式:使用原生js(通过计算元素的位置结合定位实现)

思路:

1.获取鼠标距离元素左边界和上边界的距离;

2.移动后计算出元素相对原来位置的相对距离,赋予样式。

代码:

<html> <head> <meta charset="utf-8"> <style> .box1 { width: 100px; height: 100px; border: 1px black solid; margin-bottom: 20px; background: lightblue; } .box2 { width: 100px; height: 100px; border: 1px black solid; background: lightcoral; } #drag { position: relative; } </style> </head> <body> <div> <span>我是盒子一</span> </div> <div> <span>我是盒子二</span></div> <script> let drag = document.querySelector("#drag");//获取操作元素 drag.onmousedown = function (e) {//鼠标按下触发 var disx = e.pageX - drag.offsetLeft;//获取鼠标相对元素距离 var disy = e.pageY - drag.offsetTop; console.log(e.pageX); console.log(drag.offsetLeft); document.onmousemove = function (e) {//鼠标移动触发事件,元素移到对应为位置 drag.style.left = e.pageX - disx + 'px'; drag.style.top = e.pageY - disy + 'px'; } document.onmouseup = function(){//鼠标抬起,清除绑定的事件,元素放置在对应的位置 document.onmousemove = null; document.onmousedown = null; }; e.preventDefault();//阻止浏览器的默认事件 }; </script> </body> </html>


.two_ads{overflow: hidden;} .two_ads a{float: left;width: 49.443%;} .two_ads a:nth-child(2){float: right;} .two_ads img{display: block;margin: 5px 0;max-width: 100%;}

热门文章

  • C++构造函数初始化列表
    C++构造函数初始化列表

    C++构造函数初始化列表

    构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用 初始化列表 。 C +...

  • 抢占超声医学影像产业学习it的网站C位
    抢占超声医学影像产业学习it的网站C位

    抢占超声医学影像产业学习it的网站C位

    随着全球AI人工智能技术的快速发展与应用 全球医疗领域的智能化 科技化成为大势所趋 据相关资料数据统计 2016年全...

  • “编程从娃娃抓起”:逃得过“奥数” 又
    “编程从娃娃抓起”:逃得过“奥数” 又

    “编程从娃娃抓起”:逃得过“奥数” 又

    您所在的位置: 杭州网 > 新闻中心 > 国内新闻 “编程从娃娃抓起”:逃得过“奥数” 又要被编程套住 2019-03-22 09:18:07;杭州网 新华网 少儿编程火了,打开手机...

  • coreldraw教程网Photoshop iPad完整版本正式上
    coreldraw教程网Photoshop iPad完整版本正式上

    coreldraw教程网Photoshop iPad完整版本正式上

    Photoshop iPad完整版本正式上架苹果App Store...

  • 51自学网ps视频教程走在时尚前端的猎豹
    51自学网ps视频教程走在时尚前端的猎豹

    51自学网ps视频教程走在时尚前端的猎豹

    当消费者发现汽车一味的“大”并不能完全解决出行需求,反而影响了在城市中穿梭的便捷性之后,更加贴合年轻人...

后端

更多 >
后端趣味编程unzip命令 传zip到linux并解压
后端计算机程序设计设置FTP传输软件xftp默认打
后端计算机编程语言有哪些Java实现Linux grep命
后端趣味编程linux安装mysql5.7
后端儿童编程学习linux入门系列8--shell编程入门

工具资源

更多 >