拖拽盒子移动05

本文主要介绍了使用JavaScript实现盒子拖拽的思路和流程,包括复习鼠标相关事件类型,详细讲解了拖拽事件的三个关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题1.复习鼠标相关的事件类型
        onclick :    鼠标单击 (鼠标按下+松开单击一次)
        ondblclick : 鼠标双击
        onmouseover :鼠标移入
        onmouseout  :鼠标移出
        onmousemove : 鼠标移动
        onmousedown : 鼠标按下
        onmouseup   : 鼠标松开

2.拖拽事件 : 三个流程

        (1)拖拽开始 : 鼠标按下 事件
            * 元素.onmousedown
        (2)正在拖拽 :  鼠标移动 事件
            * window.onmousemove
            * 注意点 : a. 给window注册   b.需要在按下的事件处理函数中注册
        (3)拖拽结束 :  鼠标松开 事件
            * 元素.onmouseup
                * 清除鼠标移动事件 : window.onmousemove = null

标题 3.盒子拖拽思路

    //1. 获取元素
    var son = document.querySelector('#son');//拖拽子元素
    var father = document.querySelector('#father');//移动父元素

    //2.注册事件
    // son.onclick = function(){
    //     console.log('鼠标按下+松开,单击一次');
    // };


    //2.拖拽事件三个流程

    //2.1 鼠标按下
    son.onmousedown = function (e) {
        // 1级链 : e: 鼠标按下的
        //第一步:求蓝线距离 = 红线(鼠标按下e.pageX)  - 绿线(father.offsetLeft)
        var x = e.pageX - father.offsetLeft;
        var y = e.pageY - father.offsetTop;
        console.log(x,y);
        
        //2.2 鼠标移动 : 页面移动
        window.onmousemove = function (e) {
            //二级链 :e : 鼠标移动
            console.log(e);
            //第二步 : 求黑线距离 = 红线(鼠标移动e.pageX) - 蓝色
            /* 注意点 : 蓝线和黑线是两根线,需要两个不同变量来存储(千万不要覆盖蓝线x) */
            var x1 = e.pageX - x;
            var y1 = e.pageY - y;
            /*注意点:如果元素有margin,则会产生顿闪 
            分析问题 :元素的定位 是参考 margin左上角
            解决问题 :如果元素有margin,则需要减去margin
             */
            father.style.left =  x1 - 50 + 'px';
            father.style.top =  y1 - 50 +'px';
        };

        //2.3 鼠标松开 : 结束拖拽
        //鼠标松开前提是 :鼠标要先按下。 所以这个松开事件可以在按下之后注册
        son.onmouseup = function () {
            //清除鼠标移动事件
            //原理 : 利用变量赋值特点,先回收旧值,然后存入新值。
            //第三步 : 鼠标松开之后,移除页面的移动事件
            window.onmousemove = null;
        };
    };

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值