div拖拽代码优化

通过函数进行代码优化

目的:

  1. 实现div拖动
  2. shift按键只改变top或left (div 坐标某方向变化)
  3. 四个方向拉伸(div 宽或高变化)
  4. 四个角拉伸 (div 宽高同时变化)

优化前代码思路:

  1. 拖动和某方向上的位置变化只能单独写
  2. 四个方向拉伸时,分别设置
  3. 四个角拉伸变化时,分别设置
    缺点:重复代码过多,占用资源多

优化思路:
定义函数,使div通过类名进行变化

优化后代码:

<div class="all">
        <p>拖我就走</p>
        <div class="top handler"></div>
        <div class="bottom handler"></div>
        <div class="left handler"></div>
        <div class="right handler"></div>
        <div class="top_left dot"></div>
        <div class="bottom_left dot"></div>
        <div class="top_right dot"></div>
        <div class="bottom_right dot"></div>
    </div>
 // 拖着就走 && 实现某方向移动
        function go() {
            var p = document.querySelector('p');
            var all = document.getElementsByClassName('all')[0];
            p.onmousedown = function (evt) {
                var e = evt || window.event;
                // 获取光标点击时 盒子的坐标&光标的坐标
                var allX = all.offsetLeft;
                var allY = all.offsetTop;
                var mouseX = evt.clientX;
                var mouseY = evt.clientY;
                window.onmousemove = function (evt) {
                    // 获取光标当前位置 计算移动距离
                    var currentX = evt.clientX;
                    var currentY = evt.clientY;
                    var chaX = currentX - mouseX;
                    var chaY = currentY - mouseY;
                    all.style.left = allX + chaX + 'px';
                    all.style.top = allY + chaY + 'px';

                    // 按住shift键,只实现鼠标偏移量大的方向的改变
                    if (evt.shiftKey && chaX > chaY) {
                        all.style.left = allX + chaX + 'px';
                        all.style.top = allY + 'px';
                    }
                    if (evt.shiftKey && chaX < chaY) {
                        all.style.left = allX + 'px';
                        all.style.top = allY + chaY + 'px';
                    }
                }
                window.onmouseup = function (evt) {
                    window.onmousemove = null;
                    window.onmouseup = null;
                }
            }
        }
        go()

        // 盒子拖拽
        function resize(dir) {
            var side = document.getElementsByClassName(dir)[0];
            var all = document.querySelector('.all')
            // 设置盒子变化条件(布尔值)
            var isLeft = dir.indexOf('left') !== -1 ? true : false;
            var isRight = dir.indexOf('right') !== -1 ? true : false;
            var isTop = dir.indexOf('top') !== -1 ? true : false;
            var isBottom = dir.indexOf('bottom') !== -1 ? true : false;

            side.onmousedown = function (evt) {
                var allX = all.offsetWidth;
                var allY = all.offsetHeight;
                var mouseX = evt.clientX;
                var mouseY = evt.clientY;
                var allTop = all.offsetTop;
                var allLeft = all.offsetLeft;
                window.onmousemove = function (evt) {
                    var x = evt.clientX;
                    var y = evt.clientY;
                    var chaX = x - mouseX;
                    var chaY = y - mouseY;
                    // 取消盒子宽高改变时默认改变右边和下边位置
                    evt.preventDefault()
                    // 设置点击不同边框时的变化
                    if (isLeft) {
                        all.style.left = allLeft + chaX + 'px';
                        all.style.width = allX - chaX + 'px';
                    }
                    if(isRight){
                        all.style.width = allX + chaX + 'px';
                    }
                    if(isTop){
                        all.style.top = allTop + chaY + 'px';
                        all.style.height = allY - chaY + 'px'
                    }
                    if(isBottom){
                        all.style.height = allY + chaY + 'px';
                    }

                    window.onmouseup = function (evt) {
                        window.onmousemove = null;
                        window.onmouseup = null;
                    }
                }
            }
        }
        resize('top')
        resize('bottom')
        resize('left')
        resize('right')
        resize('bottom_left')
        resize('bottom_right')
        resize('top_left')
        resize('top_right')

    </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
div拖动是指在网页中,可以使用鼠标点击拖动一个div元素,改变它的位置。这通常通过在div元素上添加拖动事件处理程序来实现。当用户点击div元素并移动鼠标时,div元素会跟随鼠标一起移动,直到用户释放鼠标。 实现div拖动的关键是监听鼠标事件,并根据鼠标的位置来改变div元素的位置。当用户按下鼠标时,记录下鼠标的初始位置和div元素的初始位置,并持续监测鼠标的移动。当鼠标移动时,计算鼠标位置的变化,并将div元素的位置相应地进行调整。最后当用户释放鼠标时,停止监测鼠标的移动,并完成div元素的位置改变。这样就实现了div拖动的效果。 div拖动可以给用户带来更好的交互体验,使页面元素的布局更加灵活和个性化。通过div拖动,用户可以自由地调整页面元素的位置,以适应其个人喜好和使用习惯。同时,对于网页设计者来说,div拖动也可以为设计出更加创新和有趣的页面布局提供更多可能性。 在实现div拖动时,需要考虑到用户体验和页面性能等方面的问题。例如,需要合理地控制拖动的范围,避免div元素移出页面边界;还需要优化代码逻辑和减少不必要的重绘,以提高页面的响应速度和用户体验。总而言之,div拖动是一种常见且有趣的网页交互效果,可以通过合理的实现方式为用户带来更好的使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值