美文网首页基础前端
鼠标指针实现拖拽

鼠标指针实现拖拽

作者: CondorHero | 来源:发表于2019-03-22 02:41 被阅读25次

实现思路:

  • 移动对象绝对定位
  • 计算移动距离
  • 移动对象跟随鼠标
  • 添加 JS 监听按下松开

需要补充的知识:
document 的冒泡事件与捕获事件
JavaScript offset

拖拽实例.gif
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>鼠标指针实现拖拽</title>
    <style>
        div{
            position: absolute;
            top: 0;
            left: 0;
            width: 140px;
            height: 172px;
            background-color: skyblue;
        }
    </style>
</head>
<body>
    <div><img src="images/duck.gif" alt="" /></div>

    <script type="text/javascript">
        //得到元素
        var oDiv = document.getElementsByTagName("div")[0];

        //监听里面放监听。JS的奇淫技巧。
        //当oDiv触发了onmousedown事件的情况下,docuent才有onmousemove事件
        oDiv.onmousedown = function(event){
            //鼠标按下去的时候,就要记录鼠标在盒子中的位置,这个位置实际上就是误差
            var deltaX = event.clientX - oDiv.offsetLeft;
            var deltaY = event.clientY - oDiv.offsetTop;
            //整个文档添加mousemove事件,鼠标移动的时候触发
            document.onmousemove = function(event){
                //减去误差
                oDiv.style.left = event.clientX - deltaX + "px";
                oDiv.style.top = event.clientY - deltaY + "px";
                event.preventDefault(); //小聪明
            }
        }

        //鼠标抬起
        document.onmouseup = function(){
            //document身上的监听,设置为null,删除了监听
            document.onmousemove = null;
        }
    </script>
</body>
</html>

遇见的问题:

  1. 对象内移动鼠标,移动对象不应移动,解决办法计算盒子 div 外边到 client 的距离 。
  2. 案例在实现过程中,拖拽图片时,当我们松开鼠标,移动对象仍然跟着鼠标,并未停止。解决办法就是去除浏览器图片默认移动。代码位于小聪明处event.preventDefault(); //小聪明
    2019-03-22

相关文章

  • 鼠标指针实现拖拽

    实现思路: 移动对象绝对定位 计算移动距离 移动对象跟随鼠标 添加 JS 监听按下松开 需要补充的知识:docum...

  • js实现拖拽

    ①鼠标按下+鼠标移动 → 拖拽②鼠标松开 → 无拖拽③鼠标偏移 → 拖拽距离 js实现 ① onmousedown...

  • 拖拽,碰撞检测

    1. 拖拽 1.1 拖拽原理 鼠标拖拽效果的实现,就是在鼠标摁下和移动的时候,修改元素的定位值的效果。 1.1.1...

  • selenium常用元素操作(二)

    一、鼠标操作 selenium的ActionChains类实现鼠标的移动右键,鼠标悬停,拖拽,双击等模拟鼠标的操作...

  • Marker 选项

    常用属性: draggable 是否可拖拽riseOnHover 是否在最上层显示鼠标指针当前的marker

  • vue拖拽元素

    实现目的 代码 实现鼠标按住title可以拖拽set模块。 drag.js 参数e是鼠标点击event,参数a是需...

  • 前端开发入门到实战:实现一个div的拖拽效果

    实现思路: 鼠标按下开始拖拽 记录摁下鼠标时的鼠标位置以及元素位置 拖动鼠标记下当前鼠标的位置 鼠标当前位置-摁下...

  • 前端开发入门到实战:实现一个div的拖拽效果

    实现思路: 鼠标按下开始拖拽 记录摁下鼠标时的鼠标位置以及元素位置 拖动鼠标记下当前鼠标的位置 鼠标当前位置-摁下...

  • javascript实现简单的trello实例

    trello for javascript. 简单的trello实例,用来实现鼠标拖拽停放。 作者:justjavaz

  • 实现一个美化原生拖拽的draggable-polyfill

    拖拽的实现 在HTML5还未普及之前,实现元素的拖拽还算是一件比较麻烦的事,大概思路就是监听鼠标移动相关事件,下面...

网友评论

    本文标题:鼠标指针实现拖拽

    本文链接:https://www.haomeiwen.com/subject/gojkvqtx.html