jquery scrollTop定位问题

技术 专栏收录该内容
2 篇文章 0 订阅

今天遇到一个时间弹出框,其高度为固定高度,容器内有时间列表,如下图:


由于时间较多,所以我希望做一个动画效果,方便用户的选择,就是当用户已选择过时间,或者说初始化的时候这个预约时间值就存在,那么我希望这个弹出框内容部分会自动的定位到已选择项。我用的动画效果是直接用的jquery的animate方法,定位用的是scrollTop,代码如下:

$('.time-list-wrap').animate({
      scrollTop:***
},500);

最重要的就是scrollTop后面的value要怎么取值。刚开始的时候,我用的是$('.time-list-wrap li.active').position.top()(已选中的时间段元素),后来发现,这个是无法实现我要的效果的,因为这要分两种情况:1、当已选中的元素在父容器的下方时,也就是$('.time-list-wrap li.active').position.top()值为正数时,scrollTop是可以准确定位的,但是当出现第二种情况,2、当已选中的元素在父容器的上方时,也就是$('.time-list-wrap li.active').position.top()值为负数时,scrollTop是无法准确定位的,它会自动地将父容器定位到顶部状态,也就是如下所示:

      

上图是选中的列表在元素上方,被遮盖,看不见的状态,当再次进入页面的时候,页面会定位成如下页面:

从图中箭头所指,可看到,第一行被排在了第一行,而不是我们想要的被选中的那行排在视图的第一行。然后我去jquery官方文档中查看scrollTop方法,才发现,它只接受正整数值:

     

由此可见当scrollTop的值为负数时,它自动地将值替换为0了。此路不通。但是难道当元素居于父容器的上方,也就是值为负数时,就无法正确定位了吗?于是我用了最笨的方法,模拟元素居于父容器上方位置,直接在谷歌浏览器concole控制台上输入代码:

$('.time-list-wrap').scrollTop(某个正整数值)

大概试了5、6个数值后,我发现,虽然元素在上方,但是,当你直接输入元素相对于父容器顶部的距离值时,不管你是在父容器的上方还是下方,都是可以精准定位的。

写到这,我发现,之所以前面会用错方法,主要是对scrollTop这个方法的理解产生了误区。其实,对于滚动条来说,我不管你上滚到天际何处,还是下拉到地底多深,我只要知道,当文档正常排版时,我的选中元素距离父容器顶部的距离,那么这个值就是我需要定位的值。。。。

------------------ 分割线-----------------------

原本以为这样就可以了,然而。。。后面自测的时候发现还是存在一个问题。就是在手机真机上时,随着选择的时间越往后,滚动的误差就越大,原本以选中的时间应该是排在第一行的,但是有可能会排在第二行,甚至是第三行。

后来才发现,是因为li元素没有设置固定的高度值,我是直接用的padding,将其撑起,后来给li元素加了一行代码这个问题就没有了。height:58px;

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

u010397366

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值