当前位置: 首页 > news >正文

supermall项目上拉加载bug分析

1.bug分析

bug出现的过程是这样的:better-scroll框架会计算滚动内容的高度(通过BScroll对象的scrollerHeight属性记录滚动内容的高度) 由于内容中的图片资源还未加载成功 就已经完成计算 导致计算结果错误 而计算之后 图片资源随之加载完成 这时候better-scroll框架又不会再次更新 因此最终的滚动内容高度只能是不准确的 从而导致我们再滑动过程中不能够滚动到当前页码的末尾

2.问题解决

如果想要正确得到最终的滚动内容高度 我们就需要再每一次图片加载完毕之后进行一次better-scroll刷新 即BScroll.refresh() 刷新操作可以用于更新滚动内容的计算值
但是图片加载的时机如何监听 如果通过原生js的话 利用的是image.onload = function(){} 而如果是通过vue监听图片加载的时机的话 是利用@load完成的

问题是 GoodsItem属于Goods的子组件 而Goods和Scroll属于Home的子组件 在Home组件中 可以通过父访问子(即ref)的方式获取Scroll组件中的BScroll对象 从而调用他的refresh方法 但该方法的调用必须要在每一张图片加载完毕之时才进行 暴力的做法是通过子传父的方式一层层将GoodsItem中的自定义方法往上传递 直到传递给Home为止 如果层级较深的话 那么这种方式显然不合适 因此的话 我们需要通过设计一个中间层来作为Home组件和GoodsItem组件通信的桥梁

这个桥梁的选择采用事件总线最为合适 因为他是专门用于共享事件 你可以将GoodsItem中图片加载函数中的自定义事件发送给事件总线 由Home组件监听事件总线中由GoodsItem发送而来的事件 从而决定是否刷新better-scroll记录的滚动内容高度

3.事件总线

由于我们需要通过事件总线完成对事件的发送和监听操作 因此的话 我们可以通过$bus处理这些相关操作 但是默认$bus为空 我们需要做到该关键字在所有组件中共享 利用Vue的原型就可以实现共享 并且$bus赋值为Vue实例

http://www.lryc.cn/news/472105.html

相关文章:

  • 【linux网络编程】| socket套接字 | 实现UDP协议聊天室
  • 第二届开放原子大赛-开源工业软件算法集成大赛即将启动!
  • PXC集群(Percona XtraDB Cluster )
  • 分布式光伏是什么意思?如何高效管理?
  • 提问GPT
  • 李飞飞团队新突破:低成本高泛化机器人训练法,零样本迁移成功率90%!
  • PHP内存马:不死马
  • 【python】OpenCV—Connected Components
  • 【优选算法篇】前缀之序,后缀之章:于数列深处邂逅算法的光与影
  • win10 更新npm 和 node
  • 搜索引擎算法更新对网站优化的影响与应对策略
  • 使用 Q3D 计算芯片引线的 AC 和 DC R 和 L
  • 前端_008_Vite
  • ssm007亚盛汽车配件销售业绩管理统(论文+源码)_kaic
  • 如何使用python完成时间序列的数据分析?
  • 数字ic设计,Windows/Linux系统,其他相关领域,软件安装包(matlab、vivado、modelsim。。。)
  • SD-WAN分布式组网:构建高效、灵活的企业网络架构
  • Task :prepareKotlinBuildScriptModel UP-TO-DATE,编译卡在这里不动或报错
  • unseping攻防世界
  • 大厂面试真题-简单描述一下SpringBoot的启动过程
  • 4. 硬件实现
  • 《操作系统真象还原》第3章 完善MBR【3.1 — 3.2】
  • 八大排序-冒泡排序
  • 基于Spring Boot+Vue的助农销售平台(协同过滤算法、节流算法、支付宝沙盒支付、图形化分析)
  • uniapp写抖音小程序阻止右滑返回上一个页面
  • 华为配置手工负载分担模式链路聚合实验
  • 【Spring】Cookie与Session
  • chat_gpt回答:qt中,常见格式及格式转换
  • CSS兼容处理
  • 制氮机分子筛的材质选择