老师我还是有点疑惑

老师我还是有点疑惑

var l=el.clientX-this.offsetLeft;

var needX=el.clientX-l;

就是offsetLeft他获取的是元素距离父元素的距离,clientX获取的是元素距离页面左侧的距离,clientX是随着鼠标的移动不断获取距离,offsetLeft是只能获取一次距离不能不断更新距离吗?所以最后不能用offsetLeft来

直接替代needX,是这样吗?

正在回答

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

2回答

同学你好,是的,也可以这样理解的,老师在上次回答的时候说了哦,只有按钮的位置改变了,才可以获取到改变后的offsetLeft值, 这里如果通过offsetLeft直接设置按钮的left值,按钮没有发生移动,offsetLeft就是一个固定的值。

祝学习愉快~

好帮手慕粉 2020-05-25 19:59:41

同学你好,关于同学的问题回答如下:

1、offsetLeft不是只能获取一次距离,在鼠标按下的时候,获取按钮此时距离最左侧的距离, needX表示定位的left值, 也就是按钮移动的距离, 在鼠标移动的过程中clientX值是变化的。可以参考下图注释理解:

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

2、从第一个回答中,可以看出来,needX和 this.offsetLeft是不相等的。

var l = ev.clientX-this.offsetLeft获取的是鼠标点击那一瞬间的值(可以理解为初始值)

var needX = ev.clinetX - l 表示的是鼠标移动过程中的值,ev.client是不断改变的,所以不可以使用offsetLeft来替代needX。

3、我们要明白,只有按钮的位置改变了,才可以获取到改变后的offsetLeft值, 这里如果通过offsetLeft直接设置按钮的left值,按钮没有发生移动,offsetLeft就是一个固定的值,所以不可以这样写。

结合第一条和第二条的解答去理解,需要在鼠标的移动过程中,通过鼠标距离窗口左侧的距离减去初始值,才可以设置按钮的left值,让按钮的位置发生改变。

如果我的回答帮助了你,欢迎采纳。祝学习愉快~

  • 提问者 幻城163630 #1
    老师我感觉越说越糊涂了,你说只有按钮的位置改变了,才可以获取到改变后的offsetLeft值, 这里如果通过offsetLeft直接设置按钮的left值,按钮没有发生移动,offsetLeft就是一个固定的值, 既然没有发生移动固定值就固定值呗,有啥影响?还有就是var l=el.clientX-this.offsetLeft;var needX=el.clientX-l;我感觉他们在一起就可以直接写成needX=el.clientX-el.clientX+this.offsetLeft=this.offsetLeft,这不就是this.offsetLeft了吗?好打脑壳。
    2020-05-25 20:22:41
  • 提问者 幻城163630 #2
    抱歉,老师忽略我上面的说法,我好像有点理解了,你看对不对就是this.offsetLeft不能随着按钮移动不断改变值,只能获取到移动改变后的值所以如果直接把needX设置成this.offsetLeft就会成为一个固定值,而无法移动,而el.clientX会随着按钮的不断改变而不断获取到值,所以才不会把按钮锁死,才可以移动。
    2020-05-25 21:13:27
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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