原生js实现拖拽效果

这段代码展示了如何使用JavaScript实现一个登录框的拖放功能。当鼠标按下登录框时,可以开始拖动,鼠标移动时登录框会跟随移动,并在边界处自动调整位置,防止出界。在鼠标抬起时,拖放事件停止。此功能适用于前端交互设计,提升用户体验。
摘要由CSDN通过智能技术生成

window.οnlοad=function(){
            var login=document.getElementById('login');    //获取包裹图片的id

//在触发鼠标按下事件后在触发鼠标移动事件,最后触发鼠标松开的事件
            login.οnmοusedοwn=function(e){       //鼠标按下登录框区域时触发
                var e=e||window.event;      //兼容ie和firefox

//获取鼠标在图片中的位置,到时图片移动的位置为鼠标相对于页面的y和x轴的距离减去在图片内的距离,clientX,clientY分别为鼠标相对于页面的y和x轴的位置,offsetLeft和offsetTop是图片相对于页面的y和x轴的位置
                var diffX=e.clientX-login.offsetLeft;   //鼠标坐标值-登录框到左端的距离=鼠标到弹框左边的距离,下边同理
                var diffY=e.clientY-login.offsetTop;    
                if(diffX>0&&diffY>0){
                    document.οnmοusemοve=function(e){     //触发鼠标移动事件
                        login.style.left=e.clientX-diffX 'px';    //不断移动过程中,鼠标坐标值-鼠标到弹框左边的距离即登录框到页面的左边距离不断更新,实现拖拽效果
                        login.style.top=e.clientY-diffY 'px';

                        var cw=document.documentElement.clientWidth||document.body.clientWidth;   //兼容ie和firefox,获取网页可视区域宽、高
                        var ch=document.documentElement.clientHeight||document.body.clientHeight;
                        if(e.clientX-diffX<0){   //看下图3情形,判断已出左边界
                            login.style.left='0px';   //出界都重置为0px
                        }else if(e.clientX-diffX>cw-login.offsetWidth){   //看下图2情形,判断已出右边界
                            login.style.left=cw-login.offsetWidth 'px';   //重置为左边最大值
                        }
                        if(e.clientY-diffY<0){   //与上同理
                            login.style.top='0px';
                        }else if(e.clientY>ch-login.offsetHeight){
                            login.style.top=ch-login.offsetHeight 'px';
                        }
                    }
                }    
                document.οnmοuseup=function(){    //鼠标抬起时,鼠标按下与移动事件为null
                    document.οnmοusemοve=null;
                    document.οnmοuseup=null;
                }
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鸡腿最好吃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值