盒子的脱拽

这次我们先做个简单的小特效盒子的拖拽,首先先理解下什么是盒子的拖拽。就是说在一个页面中创建一个正方形的盒子,然后通过鼠标按下并拖动来改变这个正方形的位置。
知道这个我们就来先分析步骤:
①、创建一个div给一个宽高,(既然要改变位置就得给他一个绝对定位)
②、设置js属性首先要获取这个div
③、要改变div的位置,就先声明一个X,Y轴的坐标
④、要清楚这个效果所用到的事件 有鼠标按下事件,以及移动,但是这里的移动可以说是鼠标抚摸事件,最后移动后要有鼠标谈起事件。
⑤、重点。设置事件中div的坐标
简单的有个思路。我们就来看代码怎么实现

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #box {
                width: 200px;
                height: 200px;
                background: red;
                position: absolute;
                top: 100px;
                left: 100px;
                cursor: pointer;
            }
        </style>
        <script type="text/javascript">
            window.onload = function() {
                var oBox = document.getElementById('box');

                var disX = 0; //声明的div的X轴坐标
                var disY = 0;
                oBox.onmousedown = function(ev) { //鼠标按下事件
                    var iEvent = ev || event; //这里的iEvent是用来获取事件的详细信息:鼠标位置,键盘按键的。ev ||event是兼容性处理
                    disX = iEvent.clientX - oBox.offsetLeft; //div的X轴坐标=鼠标点击时的X的值-盒子离浏览器左边的值
                    disY = iEvent.clientY - oBox.offsetTop; //div的Y轴坐标=鼠标点击时的Y的值-盒子离浏览器顶部的值
                    //现在的话我们就能知道现在盒子的坐标,那我们通过改变盒子的坐标就能让盒子真正意义上的移动

                    document.onmousemove = function(ev) { //鼠标抚摸事件。这里写document不写oBox是考虑到作用域的为题
                        var iEvent = ev || event;
                        //div移动后的x,y坐标
                        var left = iEvent.clientX - disX; //这个道理和上面的一样
                        var top = iEvent.clientY - disY;
                        oBox.style.left = left + 'px';
                        oBox.style.top = top + 'px';
                    }
                    document.onmouseup = function() {
                        //鼠标弹起时清空按下和抚摸的值
                        document.onmousedown = null;
                        document.onmousemove = null;
                    }

                }

            }
        </script>
    </head>

    <body>
        <div id="box"></div>
    </body>

</html>

通过上面的代码就能实现盒子的拖拽。但是呢,发现一个bug,就是盒子会跑出显示区域,这样就没法移动了,那下面我们就继续修复这个bug。

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #box {
                width: 200px;
                height: 200px;
                background: red;
                position: absolute;
                top: 100px;
                left: 100px;
                cursor: pointer;
            }
        </style>
        <script type="text/javascript">
            window.onload = function() {
                var oBox = document.getElementById('box');

                var disX = 0; //声明的div的X轴坐标
                var disY = 0;
                oBox.onmousedown = function(ev) { //鼠标按下事件
                    var iEvent = ev || event; //这里的iEvent是用来获取事件的详细信息:鼠标位置,键盘按键的。ev ||event是兼容性处理
                    disX = iEvent.clientX - oBox.offsetLeft; //div的X轴坐标=鼠标点击时的X的值-盒子离浏览器左边的值
                    disY = iEvent.clientY - oBox.offsetTop; //div的Y轴坐标=鼠标点击时的Y的值-盒子离浏览器顶部的值
                    //现在的话我们就能知道现在盒子的坐标,那我们通过改变盒子的坐标就能让盒子真正意义上的移动

                    document.onmousemove = function(ev) { //鼠标抚摸事件。这里写document不写oBox是考虑到作用域的为题
                        var iEvent = ev || event;
                        //div移动后的x,y坐标
                        var left = iEvent.clientX - disX; //这个道理和上面的一样
                        var top = iEvent.clientY - disY;
                        if(left < 0) {//限定离左边的距离如果小于0,就让左边的值就一直等于0
                            left = 0;
                        } else if(left > document.documentElement.clientWidth - oBox.offsetWidth) {
                            //限定右侧里左边的距离,通过可视区域的宽度-盒子的宽度能知道右侧离左边的距离如果左边得值大于这个距离,就同样让他等于固定的距离。
                            left = document.documentElement.clientWidth - oBox.offsetWidth;
                        }
                        if(top < 0) {//顶部的限制和左边同理
                            top = 0;
                        } else if(top > document.documentElement.clientHeight - oBox.offsetWidth) {
                            top = document.documentElement.clientHeight - oBox.offsetWidth;
                        }
                        oBox.style.left = left + 'px';
                        oBox.style.top = top + 'px';
                    }
                    document.onmouseup = function() {
                        //鼠标弹起时清空按下和抚摸的值
                        document.onmousedown = null;
                        document.onmousemove = null;
                    }

                }

            }
        </script>
    </head>

    <body>
        <div id="box"></div>
    </body>

</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值