zoukankan      html  css  js  c++  java
  • 元素的移动

    我的想法:

    1.首先给移动的元素一个绝对定位,position: absolute, 通过top和left来实现元素的移动。

    2. 基本过程:(1)当鼠标的左键按下去时,给元素添加onmousemove, onmouseleave(鼠标不在元素上时, 移除onmousemove事件),

              onmouseup(一个移动的完整操作)事件,并触发该元素的 onmousemove 事件。

          (2) 记录鼠标的移动前和移动后的水平和垂直位置,他们的差值就是元素在水平和垂直的移动距离 ,再减去鼠标在移动元素上的相对的水平和垂直位置

              ,最后得到元素移动的目的地(位置)。

      1 <!DOCTYPE html>
      2 <html>
      3 
      4 <head>
      5 
      6 <meta charset="UTF-8">
      7 
      8 <title></title>
      9 
     10 <style>
     11 
     12 *{
     13 
     14 padding: 0px;
     15 
     16 margin: 0px;
     17 
     18 }
     19 
     20 body{
     21 
     22  100%;
     23 
     24 height: 100%;
     25 
     26 background-color: #204D74;
     27 
     28 }
     29 
     30 div{
     31 
     32 position: absolute;
     33 
     34  400px;
     35 
     36 height: 100px;
     37 
     38 background-color: #008000;
     39 
     40 cursor: pointer;
     41 
     42 }
     43 
     44 </style>
     45 
     46 </head>
     47 
     48 <body>
     49 
     50 <div onmousedown="startDrop(event)"></div>
     51 
     52 </body>
     53 
     54 <script>
     55 
     56 var mouseCurrentX;
     57 
     58 var mouseCurrentY;
     59 
     60 var moveX = 0;
     61 
     62 var moveY = 0;
     63 
     64 function startDrop(e) {
     65 
     66 mouseCurrentX = e.clientX;
     67 
     68 mouseCurrentY = e.clientY;
     69 
     70 console.log('开始拖动');
     71 
     72 if (e.target.addEventListener) {
     73 
     74 e.target.addEventListener('mousemove', mouseMove, false);
     75 
     76 e.target.addEventListener('mouseup', stopMove, false);
     77 
     78 e.target.addEventListener('mouseleave', stopMove, false);
     79 
     80 }else if (attachEvent){
     81 
     82 e.target.attachEvent('onmousemove', mouseMove, false);
     83 
     84 e.target.attachEvent('onmouseup', stopMove, false);
     85 
     86 }
     87 
     88 }
     89 
     90 function mouseMove(e) {
     91 
     92 console.log('正在移动');
     93 
     94 moveX = e.clientX - mouseCurrentX;
     95 
     96 moveY = e.clientY - mouseCurrentY;
     97 
     98 var x = e.clientX - e.offsetX + moveX;
     99 
    100 var y = e.clientY - e.offsetY + moveY;
    101 
    102 e.target.style.top = y + 'px';
    103 
    104 e.target.style.left = x + 'px';
    105 
    106 mouseCurrentX = e.clientX;
    107 
    108 mouseCurrentY = e.clientY;
    109 
    110 console.log('元素当前的坐标为: ' + x + ',' + y);
    111 
    112 }
    113 
    114 function stopMove(e){
    115 
    116 console.log('结束移动');
    117 
    118 e.target.removeEventListener('mousemove', mouseMove);
    119 
    120 }
    121 
    122 </script>
    123 
    124 </html>

     ***********************************************************

     2018-08-10

    但感觉还有写小毛病,欢迎指点(致电) 。

  • 相关阅读:
    [小技巧]C#中如何为枚举类型添加描述方法
    如何在ASP.NET Core程序启动时运行异步任务(3)
    如何在ASP.NET Core程序启动时运行异步任务(2)
    如何在ASP.NET Core程序启动时运行异步任务(1)
    如何将Azure DevOps中的代码发布到Azure App Service中
    ASP.NET Core WebApi中使用FluentValidation验证数据模型
    探索ASP.NET Core中的IStartupFilter
    C# 8中的可空引用类型
    ASP.NET Core WebAPI中的分析工具MiniProfiler
    ASP.NET Core中如何针对一个使用HttpClient对象的类编写单元测试
  • 原文地址:https://www.cnblogs.com/hello-dummy/p/9454809.html
Copyright © 2011-2022 走看看