元素碰到边界就不动了怎么实现呢,自己用给加条件判断的方法好像不行,

元素碰到边界就不动了怎么实现呢,自己用给加条件判断的方法好像不行,

# 具体遇到的问题

# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

<!DOCTYPE html>

<html lang="en">


<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <style>

        * {

            padding0;

            margin0;

        }

        

        body {

            background-colorpink;

            height1000px;

        }

        

        .box {

            width50px;

            height50px;

            background-colorred;

        }

    </style>

</head>


<body>

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

    <script>

        let box = document.getElementById('box');

        let screenWidth = document.documentElement.clientWidth

        console.log(screenWidth);

        drag(box, {

            x: true,

            y: true

        })


        function drag(elopation) {

            opation.x = typeof opation.x !== undefined ? opation.x : true;

            opation.y = typeof opation.y !== undefined ? opation.x : true;

            if (!opation.x && !opation.yreturn;

            // 更新后坐标

            let curPoint = {

                    x: 0,

                    y: 0

                }

                // 手指按下时坐标

            let startPoint = {};


            el.addEventListener('touchstart'function(e) {

                let touch = e.changedTouches[0];

                startPoint.x = touch.pageX;

                startPoint.y = touch.pageY;

                // console.log(startPoint.x, startPoint.y);



            }, false)

            el.addEventListener('touchmove'function(e) {

                e.preventDefault()

                let touch = e.changedTouches[0];

                // 滑动后与开始按下的距离+原来坐标的距离

                let juli = {};

                juli.x = touch.pageX - startPoint.x + curPoint.x;

                juli.y = touch.pageY - startPoint.y + curPoint.y;

                // if ((juli.x >= 0 && juli.x <= 375) && (juli.y >= 0 && juli.y <= 1000)) {


                // } else {

                //     console.log('超出范围了');

                // }

                move(eljuli.xjuli.y)




            }, false)

            el.addEventListener('touchend'function(e) {

                let touch = e.changedTouches[0];

                curPoint.x += touch.pageX - startPoint.x;

                curPoint.y += touch.pageY - startPoint.y;

            }, false)


        }


        function move(elmxy) {

            elm.style.transform = `translate3d(${x}px,${y}px,0)`

        }

    </script>

</body>


</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕慕子 2020-12-12 13:50:36

同学你好,对于你的问题解答如下:

1、因为元素碰到右侧边界就不动了,那么元素能够移动的最大距离就是页面的宽度减去盒子的宽度,所以判断判断盒子移动的距离大于等于这个最大距离时,盒子就不能够继续往右移动了,此时将最大距离赋值给juli.x,那么就实现了即使继续往右拖动元素,元素也不会超出界限了,可以结合下图理解:

http://img1.sycdn.imooc.com//climg/5fd4583f099e39d705610162.jpg

2、如果不做限制,juli.x = 0确实可以理解为元素没有动,刚好在左侧边界上,但是当你继续往左拖动元素时,那么juli.x就会变成赋值,导致盒子超出左侧边界,所以想要元素碰到左侧的边界就不动了,那么元素能够移动的最小距离就是0,所以判断盒子移动的距离是否小于等于0时,盒子就不能够继续往左移动了,此时将最小距离赋值给juli.x, 那么就实现了即使继续往左拖动元素,元素也不能够超出界限了。

垂直方向是同样的思路,参考水平方向的解析理解即可。

祝学习愉快~

好帮手慕慕子 2020-12-11 17:14:53

同学你好,因为判断边界的条件不对,所以无法实现效果,可以参考如下思路修改:

  1. 先获取页面和红色方块的宽高。

    http://img1.sycdn.imooc.com//climg/5fd337f4098d497810180332.jpg

  2. 元素移动到右侧的边界就不可以再继续向右移动了,那么此时的最大距离是屏幕的宽度减去盒子的宽度,移动到左侧的边界就不可以再继续向左移动了,那么此时最小的距离就是0,垂直方向也是同样的思路,所以需要添加判断,当距离大于等于屏幕宽高减去方块的宽高时,将此时的距离设置为屏幕宽高减去方块的宽高,当距离小于等于0的时候,将此时的距离设置为0 ,防止方块超出边界。

    http://img1.sycdn.imooc.com//climg/5fd33886098deda612680554.jpg

祝学习愉快~

  • 提问者 weixin_慕村1291783 #1

    还是没明白,为什么要判断页面于盒子的差值而且juli.x=0应该表示没动啊为什么还会小于0

    2020-12-12 09:33:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师