jquery scrollTop定位问题

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


由于时间较多,所以我希望做一个动画效果,方便用户的选择,就是当用户已选择过时间,或者说初始化的时候这个预约时间值就存在,那么我希望这个弹出框内容部分会自动的定位到已选择项。我用的动画效果是直接用的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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用jQuery返回顶部有多种方法。其中一种常见的方法是通过监听滚动事件,判断页面滚动位置是否超过一定高度,然后显示或隐藏返回顶部的按钮。具体的代码如下: ```javascript $(window).on('scroll', function () { if($(this).scrollTop() >= $(this).height()){ $('#top').fadeIn('slow'); }else { $('#top').fadeOut('slow'); } }); $('#top').on('click',function () { $('body').animate({scrollTop:'0'},500); }); ``` 另一种方法是使用锚点定位,通过设置一个返回顶部的链接,点击链接时页面会自动滚动到指定的位置。具体代码如下: ```html <a href="#" class="top" id="top">返回顶部</a> ``` 但是这种方法的缺点是会刷新页面。还有一种方法是使用`window.scrollTo(x, y)`函数来实现返回顶部的功能,具体代码如下: ```html <a href="javascript:scrollTo(0,0)" class="top" id="top">返回顶部</a> ``` 这种方法不需要刷新页面,直接通过JavaScript函数来实现滚动到指定位置。 所以,根据需求选择适合的方法来实现jQuery返回顶部的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [页面返回顶部的方法总结](https://blog.csdn.net/weixin_33951761/article/details/86120138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值