javascript --- > 原生的拖拽功能实现

准备一个方块:

<style>
    .drag{
        background-color:#aaf;
        position:absolute;
    }
</style>
<div class="drag" style="width:100px;height:100px;top:0;left:0"></div>

在这里插入图片描述
监听鼠标的按住事件:

let dragDiv = document.getElementsByClassName("drag")[0];
let mousedown = (event)=>{
    alert("按住了");
}

dragDiv.addEventListener("mousedown", mousedown,false);

在这里插入图片描述
按住事件(具体):

// 首先鼠标得变成一个pointer状态,
// 然后监听移动事件,让方块跟着鼠标动(style.left = 鼠标距离左侧得距离(event.clientX) - 鼠标与方块左边距的距离(dragDiv.style.left))
// 重写mousedown.
let mousedown = (event) => {
    let relaLeft = event.clientX- parseInt(dragDiv.style.left);
    let relaTop = event.clientY- parseInt(dragDiv.style.top);
    
    // 点击时候的样式
    dragDiv.style.cursor = "pointer";
    dragDiv.style.border = "1px solid red";
    
    // 监听鼠标移动 (注意是监听document)
    document.onmousemove = (event) => {
        // 小方格跟着鼠标移动
        dragDiv.style.left = event.clientX - relaLeft + 'px' ;
        dragDiv.style.top = event.clientY - relaTop + 'px' ;
        // 小方格的边界
        if( parseInt(dragDiv.style.left) <=0) {
            dragDiv.style.left = 0
        }
        if( parseInt(dragDiv.style.top) <= 0 ){ 
            dragDiv.style.top = 0
        }
        if( parseInt(dragDiv.style.left) >= window.innerWidth - parseInt(dragDiv.style.width)) {
            dragDiv.style.left = window.innerWidth - parseInt(dragDiv.style.width) + 'px';
        }
        if( parseInt(dragDiv.style.top) >= window.innerHeight - parseInt(dragDiv.style.height)) {
            dragDiv.style.top = window.innerHeight - parseInt(dragDiv.style.height) + 'px';
        }
    }
    document.onmouseup = () => {
        dragDiv.style.border = "";
        document.onmouseup = null;
        document.onmousemove = null;
    }
}

参考 原生js实现拖拽功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值