文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-25 13:01

关注

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

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

HTML

<div class="box"></div>

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同理得到的是距离上边偏移的距离。

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

鼠标移动时

为了防止鼠标移动过快事件无法正确处理所以事件绑定到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));

然后完整代码

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>        <style>            .box {                position: absolute;                width: 200px;                height: 200px;                background: red;            }        </style>    </head>    <body>        <div class="box"></div>        <script>            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表示可以移动            }            document.onmousemove = function(e) {                //是否为可移动状态                                                   if(isDrop) {                        var e = e || window.event;                                          var moveX = e.clientX - x; //得到距离左边移动距离                                          var moveY = e.clientY - y; //得到距离上边移动距离                    //可移动最大距离                    var maxX = document.documentElement.clientWidth - box.offsetWidth;                    var maxY = document.documentElement.clientHeight - box.offsetHeight;                    //范围限定  当移动的距离最小时取最大  移动的距离最大时取最小                    //范围限定方法一                                        //范围限定方法二                     moveX=Math.min(maxX, Math.max(0,moveX));                                        moveY=Math.min(maxY, Math.max(0,moveY));                    box.style.left = moveX + "px";                      box.style.top = moveY + "px";                          } else {                    return;                          }            }            document.onmouseup = function() {                isDrop = false; //设置为false不可移动            }        </script>    </body></html>

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯