小程序列表跳转详情页面回来还是之前滚动的高度

 一、js页面

1.在列表js文件中,调用获取数据方法后,将已经加载的列表数据保存到Storage中,在onLoad方法中清空

wx.setStorageSync('checkDataLists', this.data.dataLists)


onLoad:function(options){
    wx.setStorageSync('checkDataLists', '')
}

2.data处定义scrollTop

data: {
    scrollTop: 0,
}

3.添加页面滚动事件

// 页面滚动事件
onPageScroll: function(e) {
    // console.log(e.scrollTop,'页面上拉刷新时页面滚动高度');
    this.setData({
        scrollTop: e.scrollTop
    });
},

4.在跳转详情页面处添加wx.pageScrollTo方法并且将scrollTop传递到详情页面

// 记录当前滚动位置
wx.pageScrollTo({
    scrollTop: this.data.scrollTop,
    success: () => {
        wx.navigateTo({
        url: `/pages/check/detail?data=${selectedItem.checkId}&scrollTop=${this.data.scrollTop}`
        });
    }
});

 5.在详情页面js文件的onLoad方法接收scrollTop参数

onLoad:function(options){
    console.log(options.scrollTop,'传过来的高度');
    const scrollTop = options.scrollTop; // 获取传递过来的scrollTop值
    this.setData({
      scrollTop: scrollTop // 保存scrollTop值
    });
  },

6.在详情页面js文件的onUnload方法中返回记录的scrollTop值,这样在返回列表页面时就会接收到返回的scrollTop值

onUnload() {
    const pages = getCurrentPages();
    if (pages.length > 1) {
        const prevPage = pages[pages.length - 2];
        prevPage.setData({
            scrollTop: this.data.scrollTop
        });
    }
  },

7.在列表页面的onShow方法中打印传回来的高度,并且可以获取存入Storage中的数据,然后判断这个数据是否为空,如果不为空就赋值

 onShow(){
    console.log(this.data.scrollTop,'页面返回时的高度');
    console.log(wx.getStorageSync('checkDataLists'),'缓存的数据');
    let checkDataLists = wx.getStorageSync('checkDataLists')
    if (checkDataLists !== null && checkDataLists !== '') {
      // console.log('进入缓存存在的方法');
      let checkDataPageNo = wx.getStorageSync('checkDataPageNo')
      this.setData({
        dataLists: checkDataLists, //dataLists页面渲染的数据
        pageNo: checkDataPageNo,
        loading:false,
      })
      wx.pageScrollTo({
        scrollTop: this.data.scrollTop,
        duration: 0 // 设置滚动动画的持续时间为0毫秒
      });
      // console.log(this.data.dataLists,'缓存渲染的页面的数据');
      // console.log(this.data.pageNo,'缓存渲染的页面数');
    }else{
      //如果不存在
      // console.log('进入缓存不存在的方法');
      this.setData({
        pageNo:1,
        loading: true // 开启加载状态
      })
      wx.pageScrollTo({
        scrollTop: 0,
        duration: 0 // 设置滚动动画的持续时间为0毫秒
      });
      this.getdata() //调用页面刷新的方法
    }
  },

二.wxml页面

在你的列表的wxml中,在列表循环的外层再添加一个scroll-view标签

<scroll-view scroll-top="{{scrollTop}}" scroll-y="true" bindscroll="onPageScroll">
</scroll-view>

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值