刷新页面时,保留滚动条的位置

本文介绍了一种在网页刷新时保持滚动条位置的方法,通过监听滚动事件并使用localStorage存储滚动位置,实现同一机器刷新页面时滚动条回到上次位置的功能。

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

需求:

同一个机器自动刷新时,滚动条保持上一次得滚动条位置,不是同一个机器的时候,横向滚动条会默认为在最左边,纵向滚动条会默认为置顶

 

 

/**
 * 获取滚动位置:避免刷新时滚动条默认置顶
 * ele:当前有滚动条的元素
 * name:存在localStorage里的名称
 * left:是否有横向滚动条
 * top:纵向滚动条
 */
scroolEvent(ele,name,top,left){
    ele.on('scroll', function(e) {
        let auto ;
        if (left&&top){
            auto = {
                left:$(this).scrollLeft(),
                top:$(this).scrollTop()
            }
        }
        else if (left&&!top) {//只有横向滚动条
            auto = {
                left:$(this).scrollLeft(),
            }
        }
        else if (!left&&top){//只有纵向滚动条
            auto = {
                top:$(this).scrollTop()
            }
        }
        localStorage.setItem(name,JSON.stringify(auto))
    })
},

 

/**
 * 同一机器得刷新,保留上一次得滚动条位置
 * ele:当前有滚动条的元素
 * last:上一个机器
 * current:当前机器
 * name:存在localStorage里的名称
 * left:是否有横向滚动条
 * top:纵向滚动条
 */
setRightScrool(ele,last,current,name,top,left){
    if (last&&last==current){
        let auto= JSON.parse(localStorage.getItem(name));
        if (auto){
            if (left&&top){
                ele.scrollLeft(auto.left)
                ele.scrollTop(auto.top)
            }
            else if (left&&!top) {//只有横向滚动条
                ele.scrollLeft(auto.left)
            }
            else if (!left&&top){//只有纵向滚动条
                ele.scrollTop(auto.top)
            }
        }
    }
    else {
        let auto ;
        if (left&&top){
            ele.scrollLeft(0)
            ele.scrollTop(0)
            auto = {
                left:0,
                top:0
            }
        }
        else if (left&&!top) {//只有横向滚动条
            ele.scrollLeft(0)
            auto = {
                left:0,
            }
        }
        else if (!left&&top){//只有纵向滚动条
            ele.scrollTop(0)
            auto = {
                top:0
            }
        }

        localStorage.setItem(name,JSON.stringify(auto));
    }
},

 

//调用
this.actions.scroolEvent( this.el.find('.right-content .data-wrap'),'RightMenu',true,false)
this.actions.setRightScrool(this.el.find('.right-content .data-wrap'),this.data.lastMachineName,this.data.machineName,'RightMenu',true,false);
//移除localStorage
localStorage.removeItem('RightMenu')//移除右侧内容滚动条位置

 

### 实现Element UI el-table刷新后保持滚动条位置不变 为了实现`el-table`在数据更新或页面刷新之后仍然能保持之前的滚动条位置,可以采用以下策略: 通过JavaScript记录下当前的滚动距离,在每次重新加载数据前保存这个值;待新数据显示出来后再将其恢复。具体来说,可以通过监听特定事件来捕获这些刻,并利用Vue生命周期钩子完成操作。 #### 记录并恢复滚动状态的方法 ```javascript // 定义一个变量用于存储垂直方向上的滚动偏移量 let scrollTop = 0; export default { data() { return { dataList: [], // 表格的数据列表 tableRef: 'singleTable', // 给<el-table>设置ref属性以便后续调用 }; }, methods: { saveScrollPosition() { const bodyWrapper = this.$refs[this.tableRef].$el.querySelector('.el-table__body-wrapper'); scrollTop = bodyWrapper.scrollTop; }, restoreScrollPosition() { setTimeout(() => { // 延迟执行以确保DOM已经更新完毕 const bodyWrapper = this.$refs[this.tableRef].$el.querySelector('.el-table__body-wrapper'); bodyWrapper.scrollTop = scrollTop; }, 1); } }, watch: { dataList(newVal, oldVal){ if (newVal !== oldVal) { // 数据变化先保存当前位置再触发重绘逻辑 this.saveScrollPosition(); nextTick().then(() => { this.restoreScrollPosition(); }); } } } } ``` 上述代码片段展示了如何在一个Vue组件内处理这个问题。这里定义了一个名为`scrollTop`的全局变量用来追踪用户的滚动行为[^1]。每当检测到表格中的数据发生变化(`watch`),就会自动调用两个自定义方法——一个是保存现有滚动位置(`saveScrollPosition`),另一个是在适当的候将滚动条返回原位(`restoreScrollPosition`)。注意这里的延迟是为了等待新的内容被渲染完成后才调整滚动条位置[^2]。 此外,考虑到某些情况下可能需要手动控制这一过程(比如点击分页按钮),可以在相应的地方显式地调用这两个辅助函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值