27.js实现鼠标拖拽

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

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

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

/*

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

当鼠标点击后,鼠标在移动------事件源是document

事件类型------鼠标事件

事件处理函数------要做的式是改变div的位置

*/

javascript 复制代码
<!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最大值应该是:

相关推荐
pingan878710 分钟前
试试 docx.js 一键生成 Word 文档,效果很不错
开发语言·前端·javascript·ecmascript·word
张一凡9318 分钟前
重新理解 React 状态管理:用类的方式思考业务
前端·react.js
结网的兔子1 小时前
前端学习笔记——Element Plus 栅格布局系统示例
前端·javascript·css
l1t1 小时前
DeepSeek总结的用 C# 构建 DuckDB 插件说明
前端·数据库·c#·插件·duckdb
zhensherlock1 小时前
Protocol Launcher 系列:App Store 精准引流与应用推广
javascript·macos·ios·typescript·iphone·mac·ipad
泯泷1 小时前
从零构建寄存器式 JSVMP:实战教程导读
前端·javascript·算法
叫我一声阿雷吧2 小时前
JS 入门通关手册(24):Promise:从回调地狱到异步优雅写法
javascript·前端开发·promise·前端面试·异步编程·js进阶·js异步
开源盛世!!2 小时前
3.19-3.21
linux·服务器·前端
必胜刻2 小时前
AJAX 请求理解
前端·ajax·okhttp·前后端交互
小民AI实战笔记2 小时前
NVM实战指南:高效管理你的Node.js环境
前端·node.js