千家信息网

怎么用JavaScript实现div的鼠标拖拽效果

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"怎么用JavaScript实现div的鼠标拖拽效果",在日常操作中,相信很多人在怎么用JavaScript实现div的鼠标拖拽效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
千家信息网最后更新 2026年10月31日怎么用JavaScript实现div的鼠标拖拽效果

这篇文章主要介绍"怎么用JavaScript实现div的鼠标拖拽效果",在日常操作中,相信很多人在怎么用JavaScript实现div的鼠标拖拽效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用JavaScript实现div的鼠标拖拽效果"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

实现原理鼠标按下时根据onmousemove事件来动态获取鼠标坐标位置以此来更新div的位置,实现的前提时div要有一个定位效果,不然的话是移动不了它的。

HTML

CSS样式

.box {    position: absolute;    width: 200px;    height: 200px;    background: red;        }

首先先分析一下需求,这个需求就是点击时鼠标按下你才能移动并改变div在页面中的位置。鼠标松开你就不能在移动了。所以这里鼠标的状态有三个,分别是点击时鼠标按下(mousedown事件)、移动时(mousemove事件)、松开时(mouseup事件)

所以js部分有三个事件。

JS部分

var box = document.getElementsByClassName("box")[0];//获取元素var x, y;//存储div的坐标var isDrop = false;//移动状态的判断鼠标按下才能移动

鼠标按下时

box.onmousedown = function(e) {                var e = e || window.event;//要用event这个对象来获取鼠标的位置                x = e.clientX - box.offsetLeft;                y = e.clientY - box.offsetTop;                isDrop = true;//设为true表示可以移动            }

e.clientX鼠标x轴的位置,e.clientY鼠标Y轴的位置,box.offsetLeft获取div距离左边的距离,box.offsetTop获取div距离上边的距离。

如下图所示 e.clientX - box.offsetLeft我们可以得到坐标点x与 box.offsetLeft之间的偏差值,我们要再用坐标点x减去这个偏差值才是div真实相对于左边移动的距离,e.clientY - box.offsetTop同理得到的是距离上边偏移的距离。

鼠标移动时

为了防止鼠标移动过快事件无法正确处理所以事件绑定到document上

_document.onmousemove = function(e) {         //是否为可移动状态         if(isDrop) {                    var e = e || window.event;                                    var moveX = e.clientX - x;//得到距离左边移动距离                      var moveY = e.clientY - y;//得到距离上边移动距离                                        box.style.left = moveX + "px";                      box.style.top = moveY + "px";          }else{                       return ;          }            }

e.clientX - x 鼠标点坐标减去偏差得到div距离左边的距离,e.clientY - y 鼠标点坐标减去偏差得到div距离上边的距离。给div的left,top重新赋值

鼠标松开时

为了放置鼠标移动过快时间无法正确处理所以事件绑定到document上

_document.onmouseup = function() {                isDrop = false;//设置为false不可移动            }

现在div已经可以拖拽了,目前还需要添加一个范围限定,不然div会拖到页面外面去,这样不行的所以得添加范围限定。div最大移动宽度为页面宽减去div的宽,最小为零,最大高为页面高减去div的高,最小为零。所以范围限定要这样写

_document.onmousemove = function(e) {      var e = e || window.event;                if(is) {                    var moveX = e.clientX - x;                    var moveY = e.clientY - y;                    var maxX = document.documentElement.clientWidth - box.offsetWidth;//X轴可移动最大距离                    var maxY = document.documentElement.clientHeight - box.offsetHeight;//Y轴可移动最大距离                                        //范围限定  最小时取最大  最大时取最小                    if(moveX < 0) {                        moveX=0                     }else if(moveX>maxX){                        moveX=maxX;                    }                                        if(moveY < 0) {                        moveY=0;                    }else if(moveY>maxY){                        moveY=maxY;                     }                    box.style.left = moveX + "px";                    box.style.top = moveY + "px";                } else {                    return;                }            }

这样效果就完美实现了,但是范围限定我们还可以这样做。

可以这样表示范围限定

//范围限定  最小取最大  最大取最小     if(moveX < 0) {           moveX= Math.max(0,moveX)//0     }else if(moveX>maxX){           moveX=Math.min(moveX,maxX);//maxX     }                          if(moveY < 0) {          moveY= Math.max(0,moveY) //0      }else if(moveY>maxY){           moveY=Math.min(moveY,maxY); //maxY      }

所以我们可以这样写

moveX=Math.min(maxX, Math.max(0,moveX));moveY=Math.min(maxY, Math.max(0,moveY));

然后完整代码

                                            

到此,关于"怎么用JavaScript实现div的鼠标拖拽效果"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

移动 鼠标 最大 范围 事件 位置 效果 最小 上边 状态 偏差 坐标 页面 学习 方法 三个 元素 对象 小时 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网产品 科技创新与互联网经济 互联网巨头反垄断金融科技 互联网公司 科技公司 互联网金融科技平台 无线互联网科技 米客互联网科技 四川狮子座互联网科技 安控科技rtu产品工业互联网 智腾互联网科技有限公司 新兴科技互联网创新大赛颁奖典礼 深圳育鹏互联网科技有限公司招聘 群盈汇互联网科技有限公司 工业互联网山东科技大学 山东大美朱楼互联网科技有限公司 互联网科技接地气 青岛易易互联网科技 盐城市攀科互联网科技有限公司 上海互联网科技园景观 互联网 科技节活动 微视频大赛 上海挚品互联网科技有限公司 世界互联网领先科技成果 湖南诚度互联网科技有限公司 湖南一路畅行互联网科技 移动互联网年度科技创新 长沙茂晟互联网科技有限公司 伊宁互联网科技做什么的 众安科技工业互联网合作 保山互联网科技靠谱吗 颐高云石互联网科技
0