IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 微信小程序scroll-view重新加载数据,滚动条回到顶部 -> 正文阅读

[移动开发]微信小程序scroll-view重新加载数据,滚动条回到顶部

问题:
微信小程序切换了筛选条件后,列表滚动条没有滚动回顶部。

场景:
wepy+原生
通过<scroll-view>实现列表滚动

方案:
1、通过wx:if设置列表元素的展示隐藏
通过给<scroll-view wx:if="{{flag}}"> 设置显示隐藏,去重新加载列表。直接设置无法生效,滚动条依旧保留在上次滚动的地方;加一个延迟,放在定时器里去setTimeout(() => { this.flag = true }, 100) 设置flag的值。目的是等到页面渲染完成后,再去重新加载。
2、通过scroll-top控制滚动
在重新加载数据的时候,给scroll-top设置0不好使,设置0.1可以生效。

代码:

list.wepy ------ 方案1

<template>
  <view class="log-list">
  	// 通过wx:if控制元素重新渲染
    <scroll-view wx:if="{{flag}}" scroll-y class="log-list__list" bindscrolltolower="loadMore">
      <view class="log-list__box" wx:if="{{dataList.length > 0}}">
         <view class="log-list__item" wx:for="{{dataList}}" >
         </view>
      </view>
    </scroll-view>
  </view>
</template>

<script>
import wepy from 'wepy'

export default class LogList extends wepy.page {
  pageTrackName = 'pages/main';
  eventTrackType = 'main';
  mixins = [appErrorMixin]
  config = {
    navigationBarBackgroundColor: '#fff',
    navigationBarTitleText: '日志记录',
    navigationBarTextStyle: 'black'
  };
  data = {
	dataList: [],
	flag: true
  }
  methods = {
  	// 重新刷新列表,滚动条置顶
  	refreshSearch(info) {
  	  this.flag = false
      this.departmentId = info.departID
      this.clientName = info.clientName
      this.type = info.type
      this.pageIndex = 1
      this.dataList = []
      // 设置flag的时候加个延迟
      setTimeout(() => {
		this.flag = true
		this.$apply()
        this.search()
	  }, 100)
    },
    async search() {
	    const self = this
	    this.setSubmitTime()
	    try {
	      let res = await httpHelper.get({
	        url: 'work/List',
	        showLoading: true,
	        data: {
	          departID: this.departmentId ? this.departmentId : '',
	          saleName: this.clientName,
	          startTime: this.startTime,
	          endTime: this.endTime,
	          pageIndex: this.pageIndex,
	          pageSize: '10'
	        }
	      })
	      let list = res.value.items || []
	      if (list.length < 10) {
	        this.isfooter = true
	      } else {
	        this.isfooter = false
	      }
	      let datatList = list.map((item) => {
	        return {
	          ...item,
	          date: self.formatDate(item.workDate, 'MM月dd日')
	        }
	      })
	      this.dataList = [
	        ...this.dataList,
	        ...datatList
	      ]
	      this.listObj = res.value || {}
	      this.loaded = true
	      this.$apply()
	    } catch (err) {
	      this.showApiError(err, '加载失败,请稍后重试。')
	    }
	  }
	loadMore() {
	    if (this.isfooter) {
	      return false
	    }
	    this.pageIndex = this.pageIndex + 1
	    this.search()
	 }
  }

}
</script>

<style lang="scss" scope>
.log-list {
    padding-top: 84rpx;
    color: #444;
    position: relative;
    z-index: 5;
    width: 100%;
    height: 100%;
   &__list {
	    box-sizing: border-box;
	    width: 100%;
	    height: 100%;
	}
	__box {
	    padding: 40rpx 24rpx 0 28rpx;
	    position: relative;
	    z-index: 8;
	    overflow: hidden;
	}
	__item {
	    padding: 20rpx 0 60rpx 30rpx;
	    box-sizing: border-box;
	    position: relative;
	    margin-top: -40rpx;
	    width: 100%;
	    height: auto;
	}
}
</style>

list.wpy ------ 方案2

<template>
  <view class="log-list">
  	// 通过scrollTop控制滚动
    <scroll-view scroll-y class="log-list__list" bindscrolltolower="loadMore" scroll-top="{{scrollTop}}">
      <view class="log-list__box" wx:if="{{dataList.length > 0}}">
         <view class="log-list__item" wx:for="{{dataList}}" >
         </view>
      </view>
    </scroll-view>
  </view>
</template>

<script>
import wepy from 'wepy'

export default class LogList extends wepy.page {
  pageTrackName = 'pages/main';
  eventTrackType = 'main';
  mixins = [appErrorMixin]
  config = {
    navigationBarBackgroundColor: '#fff',
    navigationBarTitleText: '日志记录',
    navigationBarTextStyle: 'black'
  };
  data = {
	dataList: [],
	scrollTop: 0,
  }
  methods = {
  	// 重新刷新列表,滚动条置顶
  	refreshSearch(info) {
      this.departmentId = info.departID
      this.clientName = info.clientName
      this.type = info.type
      this.pageIndex = 1
      this.dataList = []
      // 只有首次设置0可以生效,后面需要设置0.1
      if (this.scrollTop === 0) {
        this.scrollTop = 0.1
      } else {
        this.scrollTop = 0
      }
      this.$apply()
      this.search()
    },
    async search() {
	    const self = this
	    this.setSubmitTime()
	    try {
	      let res = await httpHelper.get({
	        url: 'work/List',
	        showLoading: true,
	        data: {
	          departID: this.departmentId ? this.departmentId : '',
	          saleName: this.clientName,
	          startTime: this.startTime,
	          endTime: this.endTime,
	          pageIndex: this.pageIndex,
	          pageSize: '10'
	        }
	      })
	      let list = res.value.items || []
	      if (list.length < 10) {
	        this.isfooter = true
	      } else {
	        this.isfooter = false
	      }
	      let datatList = list.map((item) => {
	        return {
	          ...item,
	          date: self.formatDate(item.workDate, 'MM月dd日')
	        }
	      })
	      this.dataList = [
	        ...this.dataList,
	        ...datatList
	      ]
	      this.listObj = res.value || {}
	      this.loaded = true
	      this.$apply()
	    } catch (err) {
	      this.showApiError(err, '加载失败,请稍后重试。')
	    }
	  }
	loadMore() {
	    if (this.isfooter) {
	      return false
	    }
	    this.pageIndex = this.pageIndex + 1
	    this.search()
	 }
  }

}
</script>

<style lang="scss" scope>
.log-list {
    padding-top: 84rpx;
    color: #444;
    position: relative;
    z-index: 5;
    width: 100%;
    height: 100%;
   &__list {
	    box-sizing: border-box;
	    width: 100%;
	    height: 100%;
	}
	__box {
	    padding: 40rpx 24rpx 0 28rpx;
	    position: relative;
	    z-index: 8;
	    overflow: hidden;
	}
	__item {
	    padding: 20rpx 0 60rpx 30rpx;
	    box-sizing: border-box;
	    position: relative;
	    margin-top: -40rpx;
	    width: 100%;
	    height: auto;
	}
}
</style>

参考:
快应用 | scroll-view组件中设置scroll-top:0只有第一次生效的解决方法

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:15:26  更:2022-05-08 08:17:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 23:31:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码