老师,请检查代码

老师,请检查代码

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>return</title>

<!-- 1、给body设置固定高度和背景颜色

2、添加块元素设置样式并通过js获取块元素


3、定义一个drag方法,方法中有两个参数,一个参数是拖拽的对象,另一个参数是是否允许拖拽


4、对元素绑定touch事件,可以通过触摸位置的pageX和pageY来计算元素拖拽的位置


5、可以使用transform中的translate3d()样式来改变元素移动的位置

 -->

<!-- 6、元素移动到边界的时候需要添加限制条件,不允许超出边 -->

<style type="text/css">

*{

padding: 0;

margin: 0;

box-sizing: border-box;

}

body{

background-color: pink;

height: 2000px;

}

div{

background-color: red;

width: 300px;

height: 300px;

}

</style>

</head>

<body>

<div id="divv"></div>

<script>


// 获取到要操作的元素

   var divv=document.getElementById('divv');

   

   // 封装一个drag函数,传递元素以及移动的x.y坐标的值

   drag(divv,{

    x:true,

    y:true

   })



// 封装一个drag函数

   function drag(el,option){

     


    option.x=typeof option.x!=='undefined' ? option.x:true;

    option.y=typeof optiony!=='undefined' ?  option.y:true;

    

    if (!option.x&&!option.y) return;

   


   

   // 存放开始的值

    var star={};


    // 存放当前的值

    var cur={

     x:0,

     y:0

    };

    // 存放移动的位置

      var mm={};


    var cliwidth=document.body.clientWidth;

    var cliheight=document.body.clientHeight;

    var boxW=divv.offsetWidth;

    var boxH=divv.offsetHeight;

    

     console.log(cliwidth,boxW);

    // 移动开关默认不移动

   var isTouchMove=false;


   el.addEventListener('touchstart',start,false);

   el.addEventListener('touchmove',move,false);

   el.addEventListener('touchend',end,false);



    function start(ev){

     var touch=ev.changedTouches[0];


     // 把当前点击位置赋值给开始位置

        star.x=touch.pageX;

        star.y=touch.pageY;

        console.log('开始:'+star.x,star.y);

    }


   function move(ev){

      

      ev.preventDefault();


      isTouchMove=true;


      var touch=ev.changedTouches[0];

      

      // 存放当前位置减去开始位置的差值

      var chazhi={};

      

      // 当前位置减去开始位置的差值

      chazhi.x=touch.pageX-star.x;

      chazhi.y=touch.pageY-star.y;

      console.log('当前'+touch.pageX,touch.pageY);

      console.log('差值'+chazhi.x,chazhi.y);


      if(option.x) {

       mm.x=chazhi.x+cur.x;

       

       if (mm.x>=cliwidth-boxW) {

        mm.x=cliwidth-boxW;

       }else if(mm.x<=0){

               mm.x=0;

      }

      }


      if(option.y) {


        mm.y=chazhi.y+cur.y;


       if (mm.y>=cliheight-boxH) {

        mm.y=cliheight-boxH;

        }else if(mm.y<=0){

              mm.y=0;

      }

      }

     


      console.log('当前+差值'+mm.x,mm.y);


      movee(el,mm.x,mm.y);

   }


  function end(ev){


   if (!isTouchMove) return;



   var touch=ev.changedTouches[0];


     // var chazhi={};

     // chazhi.x=touch.pageX-star.x;

     //  chazhi.y=touch.pageY-star.y;


      cur.x=mm.x;

  cur.y=mm.y;

      console.log('最后的值'+cur.x,cur.y);

      isTouchMove=false;

      

  }



function movee(el,x,y){

   x=x||0;

   y=y||0;

   el.style.transform ='translate3d('+x+'px,'+y+'px,0)';

  

}


   }





    

</script>

</body>

</html>


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

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

2回答
好帮手慕星星 2020-04-13 17:51:37

‘lcyjerry’同学你好,使用Chrome浏览器测试底部是可以限制的,没有问题

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

建议按照老师说的,pc切换到移动设备的时候,刷新下页面再进行测试。

祝学习愉快!

  • 那老师如果位置不在左上角呢 如何实现
    2020-04-13 17:53:58
  • 可以将自己写的代码粘贴到问答区,新建一个问题进行提问,老师们会帮助解答的。不建议在其他问题下进行盖楼,为了方便同学日后进行复习。
    2020-04-13 17:58:07
  • 为什么复制代码后 我这边最底部不能限制呢? 我用的是chrome 啊
    2020-04-13 17:59:38
好帮手慕星星 2020-01-17 17:10:01

同学你好,代码实现效果没有问题,很棒!继续加油,祝学习愉快~

  • 他这也不能实现吧? 不能在右边的时候固定住,右边还是会超出
    2020-04-13 17:34:06
  • 看错了 不好意思
    2020-04-13 17:44:15
  • 同学你好,上面代码是没有问题的,右侧不会超出。建议有pc切换到移动设备的时候,刷新下页面再进行测试。祝学习愉快!
    2020-04-13 17:45:16
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

3.WebAPP开发与小程序
  • 参与学习           人
  • 提交作业       622    份
  • 解答问题       6815    个

微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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