踩坑记录:uniapp中scroll-view的scroll-top不生效问题;

情景描述:

最近在uniapp项目中用到scroll-view内置组件,有需求是在页面下拉刷新后,让scroll-view组件区域的显示内容置顶,也就是scroll-view区域的内容恢复不滑动的状态;

补充:下拉刷新操作scroll-view组件中的数据时,并不会让scroll-view的卷起状态重置;

为实现上面需求;第一时间反应就是给scroll-view组件绑定scroll-top(scroll-left)属性,页面在下拉刷新后,控制scroll-top(scroll-left)为零即可。

相关代码片段如下:

模板<scroll-view class="table-body" scroll-y="true" :scroll-top="scrollToTop"><view class="body-tr" v-for="item in temp"><text style="width: 35%;">{{item.name}}</text><text style="width: 20%;">{{item.laneNum}}</text><text style="width: 30%;">{{item.deviceName}</text><text style="width: 15%;">{{item.trafficFlow}}</text></view></scroll-view>scriptdata() {return {scrollToTop: 0,}}
下拉刷新onPullDownRefresh(){this.scrollToTop= 0;}

当下拉刷新时,让scrollToTop值置0,从而恢复scroll-view的卷起状态。
但是实际效果却并没有按当前思路来,先滚动scroll-view区域,再进行下拉刷新后,scroll-view的卷起状态依然是下拉刷新前的状态。

踩坑调查处理:

1.为调查上面的思路实现失效问题,在过程中发现,scroll-view组件的scroll-top(scroll-left)属性的属性值并不是双向绑定的,其区域内容滑动时,scroll-top(scroll-left)属性的属性值scrollToTop并不会发生变化始终是,你给定的值0;

2.思路是没有问题,为了验证scroll-top属性的用法是否有误,我将scroll-top的初始值设置了50,发现页面初始后,scroll-view区域页面的卷起高度发生了变化,说明scroll-top属性值的用法是没有问题;

3.接第2步,我将在页面初始化后scroll-view区域发生滚动变化的情况下,我再滚动scroll-view区域,然后进行下拉刷新 执行 this.scrollToTop= 0;这次页面刷新后,scroll-view区域的滚动状态,居然按照原思路给重置了;

4.为了找到第3步成功的原因与最处不成功的情况有什么不同,我在第3步的执行状态下(页面下拉刷新后,scroll-view区域恢复初始的状态)又进行了一次,滑动scroll-view区域,并之后再下拉刷新页面 执行 this.scrollToTop= 0;这一次结果又有不同;页面刷新后,scroll-view区域的滚动状态 又没有刷新;

5.做出多次测试后发现,当给scrollToTop设置初始值为0时,后续再通过下拉刷新给scrollToTop 重新赋值为0时,scroll-view区域的滚动状态 始终不会初始化;当给scrollToTop设置初始值不为0时,当后续再给scrollToTop = 0 时,会保证第一次下拉刷新的 scrollToTop = 0 (置0)有效果,第一次之后的下拉刷新 scrollToTop 置0 就没有效果了;

6.最后在第5步基础上,在每次下拉刷新时都打印scrollToTop 值,发现 每次scroll-view区域滚动后scrollToTop的值都是默认设置的值,并不会发生变化,也就是第1步的结论;并且推断 出现第5步结果的原因:在 给scrollToTop = 0 ,也就是初始化scroll-view区域的滚动状态时,只有当scrollToTop的值 不等于0 时,或者说 scrollToTop置0前 scrollToTop的就不能是0的情况下,此次赋值后才有效果 。

此处 scrollToTop的置0效果,就好比是 vue中的监听器,只有在scrollToTop的值前后发生变化时,页面才会做出对应相应,这样的机制应该也是为了考虑页面的渲染性能。

原因总结:

结合上面第1步,第5步,第6步,导致页面下拉刷新后scroll-view组件区域滚动状态没有恢复初始化的原因:
1.scroll-top属性值 scrollToTop的初始值为0时,每次下拉刷新后scrollToTop置0都没有效果的情况:

scrollToTop的值,在scroll-view组件区域滚动时,始终是0,在下拉刷新对 scrollToTop 再一次赋值0时,scrollToTop前后的值没有发生变化,所以就不会出现 scroll-view区域的滚动状态重置成初始化状态。

2.scroll-top属性值 scrollToTop的初始值为50时,第一次下拉刷新后scrollToTop置0有效果,第一次之后续scrollToTop置0 就没有效果 的情况:

这种情况下,scrollToTop的初始值为50,不等于0;在第一次scrollToTop置0后,会监测到scrollToTop的值变化,从而scroll-view区域页面发生更新, scroll-view区域的滚动状态重置成初始化状态,从第二次开始,scrollToTop为0,当后续再次置0时,就重复了上面第一种情况。

解决问题思路:

通过原因分析知道,多次重复的将scrollToTop置0,在scrollToTop前后值不变的情况下,对scroll-view组件是没有效果的。

那么就需要满足一种需求就是,既要让scrollToTop值每次都发生变化,并且还能让scroll-view组件区域置顶。

通过尝试,将scrollToTop 的值在0和1之间切换,就能满足需求;当scrollToTop = 0 时,下拉刷新,让scrollToTop = 1,scrollToTop 值发生变化,scroll-view区域页面滚动1像素,几乎看不出来。

最终:

onPullDownRefresh(){this.scrollToTop = this.scrollToTop === 0 ? -1 : 0;
}

最终解决方案采用,将scrollToTop 的值在0和-1之间切换,在每次下拉刷新时,就能保证每次下拉刷新后,绑定 :scroll-top=“scrollToTop” 的scroll-view组件的滚动状态都是初始化的(滚动区域置顶的)。

Tip:

记录uniapp中scroll-view的scroll-top不生效问题详细解决过程和思路,建议越到相同问题的朋友,可以用一点点时间看完(比较通俗易懂个人感觉),希望对你有所帮助,有问题欢迎评论区交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

案例046:基于微信小程序的云上考场

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

22.括号生成

​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;22. 括号生成 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 当只有一对括号时&#xff0c;结果为 "()"&#xff0c;当有 n(n>1) 对括号时&#xff0c;其结果是在 n-1 对括号的…

DNS协议(DNS规范、DNS报文、DNS智能选路)

目录 DNS协议基本概念 DNS相关规范 DNS服务器的记录 DNS报文 DNS域名查询的两种方式 DNS工作过程 DNS智能选路 DNS协议基本概念 DNS的背景 我们知道主机通信需要依靠IP地址&#xff0c;但是每次通过输入对方的IP地址和对端通信不够方便&#xff0c;IP地址不好记忆 因此提…

java实现根据远程url下载文件到浏览器

本文提供 java实现根据远程url下载文件到浏览器片段代码&#xff0c;仅供参考。 可以实现&#xff0c;根据远程url地址下载推送至浏览器下载&#xff0c;这个方法可以解决因前端直接调用远程url下载出现的跨域问题。 /*** 根据远程url下载文件* param url 远程URL* param resp…

pytorch学习5-最大池化层的使用

系列文章目录 pytorch学习1-数据加载以及Tensorboard可视化工具pytorch学习2-Transforms主要方法使用pytorch学习3-torchvisin和Dataloader的使用pytorch学习4-简易卷积实现pytorch学习5-最大池化层的使用pytorch学习6-非线性变换&#xff08;ReLU和sigmoid&#xff09;pytorc…

如何零成本创建微信公众号版的自助查券返利机器人?

如何零成本创建微信公众号版的自助查券返利机器人&#xff1f; 在当今的电商时代&#xff0c;网购已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;寻找商品优惠券和返利却是一件让人头疼的事情。为了解决这个问题&#xff0c;我们可以借助微信公众号和微赚淘客系统…

微信淘宝客自动查券找券返利机器人实现的原理和思路探索

微信淘宝客自动查券找券返利机器人实现的原理和思路探索 在当今的电商时代&#xff0c;网购已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;寻找商品优惠券和返利却是一件让人头疼的事情。为了解决这个问题&#xff0c;我们可以借助微信公众号和微赚淘客系统来实现…

群体遗传 — 核苷酸多样性π

群体遗传 — 核苷酸多样性π **核苷酸多样性&#xff08;nucleotide diversity&#xff09;&#xff0c;记为π&#xff0c;是分子遗传学中一个重要的概念&#xff0c;用于量化种群内部或不同种群间的遗传多样性。**这一概念由根井正利和李文雄在 1979 年提出。核苷酸多样性的…

2023-11-30 AIGC-让图片动起来的主流 AI 工具

摘要&#xff1a; 2023-11-30 AIGC-让图片动起来的主流 AI 工具 让图片动起来的主流 AI 工具 一、数字人播报 1、HeyGen 2、D-ID 3、SadTalker 二、图片生成视频 1、Runway Gen-2 2、Pika Labs 3、Genmo 三、伪3D动态效果 1、LeiaPix 2、剪映手机版 四、角色动画 Animated …

Linux各目录结构说明

文章目录 目录说明源码放哪里&#xff1f;拓展&#xff1a;Linux里面安装软件是装在home目录还是opt目录还是/usr/local好&#xff1f; bin boot dev etc home lib lib64 lostfound media mnt opt proc root run sbin srv sys tmp usr var 目录说明 bin 存放二进制可执行文件&…

再谈谈ThreadLocal

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 大部分面试官喜欢问Thr…

金蝶云星空表单插件获取基础资料的内码

文章目录 金蝶云星空表单插件获取基础资料的内码 金蝶云星空表单插件获取基础资料的内码 不能直接取内码 先获取基础资料数据包&#xff0c;再获取内码 long custId Convert.ToInt64((this.View.Model.GetValue("F_XXXX_CustId") as DynamicObject)["Id&quo…

【从零开始学习JVM | 第三篇】类的生命周期(高频面试)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。 在本文中&#xff0c;我们将深入探讨类的生命周期&#xff0c;从类加载到…

ros2与stm32通讯比较优秀的串口库

这个是我确定的串口库&#xff1a;serial: serial::Serial Class Reference (wjwwood.io) 我也不知道其他的串口库了&#xff0c;我就知道几个&#xff0c;然后我觉得这个是3个里面学习周期比较短&#xff0c;然后质量比较可靠的库 我隐隐觉得这个串口库就是ros1选择的串口库…

shell命令使用杂七杂八(1)——(待完善)

explainshell.com shell统计当前文件夹下的文件个数、目录个数Linux之shell常用命令&#xff08;三&#xff09; sort&#xff08;排序&#xff09;、uniq&#xff08;处理重复字符&#xff09; linux中shell将换行输入到文件中 shell脚本&#xff0c;将多行内容写入文件中 f…

PySpark开发环境搭建常见问题及解决

PySpark环境搭建常见问题及解决 1、winutils.exe问题2、SparkURL问题3、set_ugi()问题 本文主要收录PySpark开发环境搭建时常见的一些问题及解决方案&#xff0c;并收集一些相关资源 1、winutils.exe问题 报错摘要&#xff1a; WARN Shell: Did not find winutils.exe: {} ja…

ffmpeg与opencv-python处理视频

安装 opencv pip install opencv-pythonFFmpeg 1.下载 FFmpeg 访问FFmpeg官方网站。选择 “Windows builds from gyan.dev” 链接&#xff0c;这会带您到一个包含最新版本 FFmpeg Windows 构建的页面。选择一个适合您系统的版本&#xff08;例如&#xff0c;32位或64位&…

批量创建/更新外协工序采购信息记录

批量创建/更新没有物料号的外协工序采购信息记录。 执行事务代码ZME1X_OP,下载模板。(此程序可同时用于外协工序的创建和修改)创建外协工序的时候如果是新建则不需要输入采购信息记录号,如果是要更新外协工序价格,则必须输入采购信息记录号。价格单位默认为‘1’,货币代码…

IPV6技术

配置广域网接入&#xff1a; PPP协议&#xff1a;点对点协议是作为点对点链路上进行IP特性的封装协议而被开发出来的。 ppp定义了IP地址的分配和管理、异步和面向位的同步封装、网络协议复用、链路配置、链路质量测试和错误检测等标准&#xff0c;以及网络层地址协议和数据压缩…

智能井盖倾斜预防方案,井盖监测方式推荐

随着每个城市的日益发展&#xff0c;城市基础设施的重要性慢慢凸显出来。其中井盖作为城市生命线的一部分&#xff0c;其安全问题不容小觑。为了保障市民的出行安全和城市基础设施正常运行&#xff0c;智能井盖传感器作为城市生命线智能监测仪有着重要的作用&#xff0c;该设备…