原生JS驱动DOM 实现DIV拖拽效果

本文介绍如何利用JavaScript实现HTML页面中DIV元素的拖拽功能。通过监听mousedown, mousemove, mouseup三个鼠标事件,计算鼠标坐标与div元素的相对位置,从而达到拖拽效果。在实践中,需要注意鼠标位置与div元素位置的同步更新,以及在适当事件中开启和关闭拖拽功能。" 114773348,10294430,使用ByteBuddy从接口创建Java类的实现,"['Java', 'ByteBuddy', '动态编程', '代码生成']
摘要由CSDN通过智能技术生成

在建立的HTML 页面中 鼠标 拖拽 盒子 于任意位置 拖拽
可知 我们需要使用到 鼠标事件 div 定位 问题 页面中 鼠标坐标距离上 左 距离的计算

首先第一步 先实现 DIV 于页面中
在这里插入图片描述

         *{
            padding:0;
            margin:0;
          }
         #app{
             background: #ccc;
             width: 200px;
             height: 200px;
             position: absolute;
           }

代码格式如上 因为要使用绝对定位 来确定div 位置 所以提前声明

写之前需要声明一下 与之有关的鼠标事件
鼠标点击 以及鼠标点击 之后 移动 移动完之后 鼠标移开
分别是三个时间 mousedown mousemove mouseup
可以检测这三个事件的先后顺序如下
在这里插入图片描述
结果如下
在这里插入图片描述
由此可知 顺序为 mousedown -> mousemove -> mouseup
具体操作需写在mouseover事件里

在script 区域中 代码如下

   <script>
           var app = document.getElementById('app');
           window.onmouseover = function () {
              app.style.left =  e.pageX  +'px'
              app.style.top = e.pageY  +'px'
           }   
   </script>

虽然这样写 已经基本完成了 但是 有个问题 div 总是出现在鼠标右下角
如果我想 鼠标放在盒子里面 又要如下操作
整体 声明 x y 变量 便于计算 盒子 离上 左 的 绝对距离
声明一个flag 为 false

 var app = document.getElementById('app');
         let Move = false;  var x   , y
         window.onmouseover = function (){
              console.log('over')
         } 
         
         window.onmouseup  = function(){
             console.log('up')
             Move = false

         }

         window.onmousedown = function(e){
             console.log('down')
             x = e.pageX - app.offsetLeft
             y = e.pageY - app.offsetTop
             Move = true

         }

         window.onmousemove = function(e){
             console.log('move ')
             e.preventDefault();
             
             if( Move ) {
                console.log('move')
                app.style.left =  e.pageX - x +'px'
                app.style.top = e.pageY  - y +'px'
             }
         }
      

在down 事件内 改 move 为 true 并记录下 鼠标 距离盒子的距离
move 事件中 实时记录 距离
如此 up 事件后 改 move 为 false 关闭此次事件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值