拖拽盒子移动05

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

在这里插入图片描述

在Vue中实现拖拽功能,通常需要结合HTML5的拖放API和Vue的响应式系统。以下是一个简单的示例说明如何实现将一个盒子(A盒子拖拽到另一个盒子(B盒子): 1. 首先,在Vue的模板中,你需要为要拖拽的元素(A盒子)添加`draggable`属性,并定义`dragstart`事件处理函数来启动拖拽过程。同时为拖放目标(B盒子)添加`drop`和`dragover`事件处理函数,以便在适当的时候接收拖拽的元素。 2. 在Vue组件的`data`函数中,你可以定义一些状态来跟踪拖拽的状态,例如是否正在拖拽一个元素,以及被拖拽元素的DOM引用。 3. 在`methods`中定义处理拖拽事件的方法。`dragstart`方法可以设置被拖拽元素的数据,比如它的ID等,以便在`drop`事件中识别被拖拽的是哪个元素。`dragover`方法通常需要阻止默认行为,以便允许放置。`drop`方法则是接收拖拽元素的地方,你可以在这里进行DOM操作,将元素移动到B盒子中。 以下是一个简单的代码示例: ```html <template> <div> <div class="box A" draggable @dragstart="handleDragStart" id="boxA"> A盒子 </div> <div class="box B" @drop="handleDrop" @dragover.prevent> B盒子 </div> </div> </template> <script> export default { data() { return { draggedElement: null }; }, methods: { handleDragStart(event) { this.draggedElement = event.target; // 设置需要传递的数据 event.dataTransfer.setData('text/plain', event.target.id); }, handleDrop(event) { // 防止默认行为 event.preventDefault(); // 将拖拽的元素移动到B盒子中 event.target.appendChild(this.draggedElement); // 清除拖拽状态 this.draggedElement = null; } } }; </script> ``` 在这个例子中,当用户开始拖拽A盒子时,`handleDragStart`方法会被触发,设置`draggedElement`为被拖拽的元素。当A盒子被拖动到B盒子上并放下时,`handleDrop`方法会被触发,将A盒子移动到B盒子中,并清除拖拽状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值