经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » HTML5 » 查看文章
实现元素拖拽的两种方式 - angle-xiu
来源:cnblogs  作者:angle-xiu  时间:2019/9/10 10:53:44  对本文有异议

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

 

   实现思路:

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

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

  代码如下:

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <style>
  5. .box1 {
  6. width: 100px;
  7. height: 100px;
  8. border: 1px black solid;
  9. margin-bottom: 20px;
  10. background: lightblue;
  11. }
  12. .box2 {
  13. width: 100px;
  14. height: 100px;
  15. border: 1px black solid;
  16. background: lightcoral;
  17. }
  18. </style>
  19. </head>
  20.  
  21. <body>
  22. <!-- 参数要传入event对象 -->
  23. <div class="box1" ondragover="allowdrop(event)" ondrop="drop(event)">
  24. <img src="img/2.jpg" alt="00" draggable="true" ondragstart="drag(event)" id="drag" width="50" height="50">
  25. <span>我是盒子一</span>
  26. </div>
  27. <div class="box2" ondragover="allowdrop(event)" ondrop="drop(event)">
  28. <span>我是盒子二</span></div>
  29. <script>
  30. function allowdrop(e) {
  31. e.preventDefault();
  32. }
  33. function drop(e) {
  34. e.preventDefault();
  35. var data = e.dataTransfer.getData("text");
  36. e.target.appendChild(document.getElementById(data));
  37. }
  38. function drag(e) {
  39. e.dataTransfer.setData("text", e.target.id);
  40. }
  41. </script>
  42. </body>
  43.  
  44. </html>

 

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

  思路:

    1.获取鼠标距离元素左边界和上边界的距离;
    2.移动后计算出元素相对原来位置的相对距离,赋予样式。

 

 

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <style>
  5. .box1 {
  6. width: 100px;
  7. height: 100px;
  8. border: 1px black solid;
  9. margin-bottom: 20px;
  10. background: lightblue;
  11. }
  12. .box2 {
  13. width: 100px;
  14. height: 100px;
  15. border: 1px black solid;
  16. background: lightcoral;
  17. }
  18. #drag {
  19. position: relative;
  20. }
  21. </style>
  22. </head>
  23.  
  24. <body>
  25. <div class="box1" id="drag">
  26. <span>我是盒子一</span>
  27. </div>
  28. <div class="box2">
  29. <span>我是盒子二</span></div>
  30. <script>
  31. let drag = document.querySelector("#drag");//获取操作元素
  32. drag.onmousedown = function (e) {//鼠标按下触发
  33. var disx = e.pageX - drag.offsetLeft;//获取鼠标相对元素距离
  34. var disy = e.pageY - drag.offsetTop;
  35. console.log(e.pageX);
  36. console.log(drag.offsetLeft);
  37. document.onmousemove = function (e) {//鼠标移动触发事件,元素移到对应为位置
  38. drag.style.left = e.pageX - disx + 'px';
  39. drag.style.top = e.pageY - disy + 'px';
  40. }
  41. document.onmouseup = function(){//鼠标抬起,清除绑定的事件,元素放置在对应的位置
  42. document.onmousemove = null;
  43. document.onmousedown = null;
  44. };
  45. e.preventDefault();//阻止浏览器的默认事件
  46. };
  47. </script>
  48. </body>
  49.  
  50. </html>

 

 

 

原文链接:http://www.cnblogs.com/angle-xiu/p/11484791.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号