27.js实现鼠标拖拽

e.offsetX是鼠标距离准确事件源的左上角距离

e.clientX是鼠标距离浏览器可视窗口左上角的距离

e.pageX是鼠标距离文档左上角的距离       

/*
            当鼠标点击div时开始挪动,当鼠标抬起,div静止——事件源是div

            当鼠标点击后,鼠标在移动——事件源是document
            事件类型——鼠标事件
            事件处理函数——要做的式是改变div的位置
        */

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        div {
            width: 200px;
            height: 200px;
            background-color: pink;
            position: absolute;
            left: 0;
            top: 0;
        }
    </style>
</head>

<body>
    <div>

    </div>
    <script>
        var box = document.querySelector('div')

        
        var startX=0    //记录鼠标初始距离div的X位置
        var startY=0
        var flag = false    //当点击div时移动div位置,否则不移动
        box.onmousedown = function (e) {
            startX = e.offsetX
            startY = e.offsetY
            flag = true
        }
        document.addEventListener('mousemove', function (e) {
            if (flag == false) {
                return   
            }
            x = e.clientX - startX;
            y = e.clientY - startY;
            if (x <= 0) {
               x = 0;
            }
            if (y <= 0) {
               y = 0;
            }
            box.style.left = x + "px";
            box.style.top = y + "px";
               
        })
        box.onmouseup = function (e) {
            flag = false   //当抬起鼠标不移动
            // console.log('鼠标抬起的位置', e.offsetX, e.offsetY)
        }

    </script>
</body>

</html>

优化:

x最大值应该是:

相关推荐

  1. js使用canvas实现图片鼠标滚轮放大缩小预览

    2024-07-17 13:32:04       45 阅读
  2. js实现元素可方法

    2024-07-17 13:32:04       62 阅读
  3. js实现快速(定时器版本)

    2024-07-17 13:32:04       33 阅读
  4. 基于Vue.js 实现简易指令

    2024-07-17 13:32:04       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 13:32:04       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 13:32:04       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 13:32:04       62 阅读
  4. Python语言-面向对象

    2024-07-17 13:32:04       72 阅读

热门阅读

  1. ActiViz实战:ActiViz中的自己实现鼠标双击事件

    2024-07-17 13:32:04       30 阅读
  2. libwebrtc.a+exosip连接fS 环境部署tips

    2024-07-17 13:32:04       22 阅读
  3. NoSql选择题解

    2024-07-17 13:32:04       25 阅读
  4. Qt鼠标拖动线条组成的多边形移动

    2024-07-17 13:32:04       22 阅读
  5. 选择podman,还是选择docker?

    2024-07-17 13:32:04       27 阅读