记录滚动位置

本文详细介绍了在H5页面中处理分页情况下记录滚动位置的步骤,包括在页面不分页和分页时如何正确恢复滚动位置。关键点包括记录缓存、分页算法、处理页面刷新后的渲染,以及防止浏览器自动滚动。同时强调了注意事项,如设置`history.scrollRestoration`为`manual`,监听滚动事件更新页面状态,以及在分页过程中确保页码的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

h5页面记录滚动位置的步骤思想

第一种情况:页面不分页时候,只是记录滚动位置,记录个滚动缓存就可以了,跳转到滚动位置就可以了。(百度上很多,就不说了。)

第二种情况:页面分页时候,记录滚动位置

这种情况很坑,以下是处理这样的情况的步骤(举例:电商商品首页记录位置)

总要思想步骤:

1.先记录滚动位置和当前商品数据到缓存。

ps:因为跳转时候如果不先渲染出你的页面,这时候你滚动位置如果大于你的某个值,会跳到当前最大位置,就是没有进行分页的最大位置。

2.分页算法里面记录你的当前页和总页数,当页面刷新好后,当前页和总页数进行判断,是否该分页,以防已经到底还能下拉分页

3.页面刷新后,先根据你的缓存数据渲染页面,然后再进行跳转,这样滚动跳转位置就是正确的,页面页面高度已经发生了变化

4.缓存渲染完页面后,你需要再次获取和缓存数据一样的最新的数据,然后再次渲染页面,最后重置缓存为最新的数据,以防数据变化后,页面还是一直未缓存的页面

 

需要注意的地方:

1.取消默认浏览器记录位置的自动滚动

history.scrollRestoration = 'manual';

2.封装你的分页算法,并且在算法里面记录当前页,页码总数

3.监听滚动时候,记录你的滚动位置

4.监听滚动时候,判断当前页面是否大于页码总数,这里需要处理好你所存的分页总数和当前页,需要做处理,否则你的分页和总页数刷新时候,会出错,这里需根据你的需求,自己做容错,代码部分举例

var pageNo = localStorage.pageNo?parseInt(localStorage.pageNo):pageNo;
            if(isNaN(localStorage.pageTotal)){
                if(localStorage.goodsData){
                    pageTotal = JSON.parse(localStorage.goodsData).length;
                }
            }else{
                pageTotal = localStorage.pageTotal;
            }
            if (pageNo > pageTotal) {
                $(".backtop").fadeIn(1000)
            } else {
               if (scrollTops() + windowHeight() >= (documentHeight() - 40 /*滚动响应区域高度取50px*/ )) {
                    GetRectGoods()
                }
            }

5.分页里面需要判断当前页码是否大于总页码,大于的话,让当前页码等于总页码,以防刷新后,可以一直滚动,举例代码

if(pageNo>pageTotal){
        pageNo = pageTotal;
    }

6.记录完滚动后记得,刷新缓存

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值