彻底解决使用better-scroll不能滚动的问题

news2025/7/21 2:08:48

better-scroll这个组件不能说有多好,只能说可以拿来用用。但是很多人都碰到了引入这个组件以后,页面反而不能滚动的问题。今天我就来谈谈怎么彻底解决这个问题

首先要谈谈better-scroll页面滚动的原理:

如上图所示,只有当内容高度大于父级容器的高度时,页面才能滚动!

这是滚动的核心原理! 所以父级容器高度必须是固定的!

有人说这不是废话吗,是的。这看起来的确像是废话,但是你要知道:

在现实环境中:由于dom的渲染需要请求网络数据,而且ajax请求需要时间,而better-scroll的初始化又是异步的,也就是说better-scroll不会等待dom渲染完毕才计算出dom的高度!

注意:这里是关键!

所以: 由于异步的原因,better-scroll计算出的初始dom高度有可能是不正确的!

因为高度计算不正确,内容高度没有超过父容器高度,此时hasVerticalScroll属性就是false!

此时页面当然不能滚动!

 所以这里有两种解决办法:

1. 每当发生页面拖动的时候,重新refresh better-scroll的实例

  import BScroll from "@better-scroll/core";
  import myPullUp from "@better-scroll/pull-up";

      BScroll.use(myPullUp);    

      this.scroll = new BScroll(this.$refs.wrapper, {
        probeType: this.probeType,
        click: true,
        pullUpLoad: true,
      });

      this.scroll.on("pullingUp", () => { // 每当页面上下拖动时,刷新scroll实例
        this.scroll.refresh();
      });

2.  watch动态监视scroll组件收到的异步数据,一旦发现更新就better-scroll的实例

 // dataInfo是scroll组件从父组件接收到的异步数据
 this.$watch("dataInfo", (newVal, oldVal) => {
      if (newVal.length > 0) {
        this.$nextTick(() => {          
          this.scroll.refresh();
        });
      }
    });

 采用以上两种方法(二选一)以后:

hasVerticalScroll就变成了true

注意:不要使用better-scroll官网推荐的setTimeout方法,因为这种方法太过愚蠢!你这个延迟时间设置多少合适呢,靠猜?!delay写死了,显得代码非常不优雅,我始终认为,在js中使用setTimeout处理dom的都是蠢货!

 但是这还不够!!

很多人做到了这一步还是没法滚动!

所以,我在这里介绍终极解决办法:

你们有没有发现:你们都是从pc页面切换到移动端页面的,这个就是关键!

如果是这样就肯定不能滚动!因为在移动端这边,scroll对象还没有完成初始化!也不能正确计算高度,因为你是从pc端切换到移动端的。

终极解决办法:你必须始终在移动端刷新页面,这样scroll就能正确完成初始化,正确加载dom,正确计算dom高度。

你学废了吗!

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

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

相关文章

kafka入门教程,介绍全面

1、官网下载最新版本的kafka,里面已经集成zookeeper。直接解压到D盘 2、配置文件修改,config目录下面的zookeeper.properties. 设置zookeeper数据目录 dataDirD:/kafka_2.12-3.6.0/tmp/zookeeper 3、修改kafka的配置文件server.properties. 主要修…

数模竞赛那么累,究竟能给我带来什么?

国赛官网上有这么一句话:一次参赛,终生受益。 学生时代,我对这句话没啥感触。 因为刚开始学数模时感觉很没头绪,书也看不懂,论文也看不懂,看啥都看不懂。 比赛时题目看不懂,答案搜不到&#xf…

百度小程序DIY小程序源码系统+轻松创建百度小程序,实现个性化功能 带完整的搭建教程

在现在大环境的影响下,小程序已经成为人们日常生活中不可或缺的一部分。百度小程序作为国内领先的小程序平台之一,为广大开发者提供了丰富的开发资源和工具。今天源码小编就来给大家分享一款百度小程序DIY小程序源码系统。百度小程序DIY小程序源码系统是…

共享WIFI贴码怎么推广?快速地推技巧揭秘!

在如今高度互联网化的社会中,共享WIFI已经成为人们生活中不可或缺的一部分。然而,创业者想要让自己代理加盟的共享WIFI贴码,获得更多用户和增加收益,就需要进行有效的推广。那么,共享WIFI贴码该如何推广呢?…

pycharm安装教程-pycharm安装详细步骤(Mac版)

之前跟大家讲了怎么安装Python,这期跟大家介绍个很好用的编程工具–pycharm。 PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单…

cut 命令

cut [选项参数] filename #默认分隔符是制表符 选项参数: -d delimiter 分隔符 -f field 场地、领域(第几列) 命令使用: cut -d " " -f 1 cut.txt #空格为分隔符截取第1列cut -d " " -f 2,3 cut.txt #截…

众和策略可靠吗?神奇成交量指标公式?

可靠 独特成交量方针公式是出资者们广泛运用的技能方针之一,用于衡量股票交易中的成交量活跃度以及商场心境。在这篇文章中,我们将从多个视点剖析独特成交量方针公式的含义、核算办法、运用场景以及留心事项。 首要,我们需求了解独特成交量…

Google浏览器无法打开设置

文章目录 开启沙箱模式Google重命名 开启沙箱模式 前面有一个空格要注意 --no-sandboxGoogle重命名 其他地方记得同步修改

pyinstaller 含有ultralytics库的代码时候无法打开exe文件,资源文件太多就是个坑。函数内部import库直接打包失败。dll缺失如何解决。

1 问题:基于yolov8开发一个功能,结果打包出现了问题。就是打包完了不是这个包找不到就是那个库找不到。 首先必须要说一下类似yolov8这样子的库,其中包含很多yaml文件,包含文档的路径,这个其实就是个坑。如果你经常打…

2023-ICLR-Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning

2023-ICLR-Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning Paper:https://openreview.net/forum?idlq62uWRJjiY Code:https://github.com/QingruZhang/AdaLoRA 自适应计算分配,实现参数高效微调 为了实现动态地调节Lora的rank的大小&#xff0…

微信小程序去掉Button自带边框

前言 微信button自带边框 去掉边框后效果 实现 html代码 <view><button class"contactBtn" open-type"contact" contact"handleContact"session-from"sessionFrom">意见反馈</button> </view>css代码 …

Stable Diffusion WebUI扩展openpose-editor如何使用

先上地址: GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111s stable-diffusion-webuiOpenpose Editor for AUTOMATIC1111s stable-diffusion-webui - GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111s stable-diffusion-webu…

HUMAN TOMATO: T EXT - ALIGNED WHOLE-BODY MOTION GENERATION(2023.10.19)

文章目录 AbstractIntroduction现有工作的不足为了解决上述问题主要贡献 Methodology&#xff08;方法论&#xff09;PROBLEM FORMULATION&#xff08;问题公式化&#xff09;LEARNING DISCRETE WHOLE - BODY REPRESENTATIONS&#xff08;学习离散的全身表征&#xff09;Vanill…

视频平台跨网级联视频压缩解决方案

一、 简介 视频监控领域对带宽有着较大的需求&#xff0c;这是因为视频流需要实时占用网络带宽资源。视频监控的传输带宽是组网结构的基础保障&#xff0c;关系到视频监控的稳定性、可靠性和可拓展性等因素。例如&#xff0c;720P的视频格式每路摄像头的比特率为2Mbps&#xff…

杂记 | 使用numpy计算欧氏距离和马氏距离示例

文章目录 一、欧氏距离与马氏距离二、使用numpy计算欧氏距离三、使用numpy计算马氏距离 一、欧氏距离与马氏距离 这里引用GPT4的回答&#xff1a; 二、使用numpy计算欧氏距离 import numpy as npp1 [1, 2, 3] p2 [4, 5, 6] point1 np.array(p1) point2 np.array(p2)euc…

金山文档轻维表做数据库结合油猴脚本检索

脚本里面新建查询脚本&#xff08;记录脚本webhook和脚本令牌&#xff09; const records Application.Record.GetRecords({ SheetId: 1 }) console.log(records.records) return {data: records.records, } 油猴脚本 // UserScript // name 油猴辅助器 // namespa…

【备忘录】SpringBoot+ dynamic-datasource配置自定义多数据源

一、 业务场景解释 由于公司业务需要开发设计一款文件读取导入工具&#xff0c;导入的配置和目标数据库并不一定在同一个数据库地址&#xff0c;故需要使用到自定义数据源&#xff0c;并且支持数据源切换 大致场景如下&#xff1a; 二、工具选择 鉴于市面上有很多工具&#…

Leetcode刷题详解——计算布尔二叉树的值

1. 题目链接&#xff1a;2331. 计算布尔二叉树的值 2. 题目描述&#xff1a; 给你一棵 完整二叉树 的根&#xff0c;这棵树有以下特征&#xff1a; 叶子节点 要么值为 0 要么值为 1 &#xff0c;其中 0 表示 False &#xff0c;1 表示 True 。非叶子节点 要么值为 2 要么值为 …

【进程】利用 Linux 下的 /proc/pid/ 的内容学习进程

1. 进程号 在计算机中&#xff0c;每一个进程都有一个进程号&#xff0c;进程号类似于一个索引&#xff0c;操作系统就是通过这个进程号快速地找到进程。在 linux 使用 ps -aux 查看进程&#xff0c;可以看到进程号pid&#xff1a; rootswd-Lenovo-G40-80:/proc/4234# ps -au…

建站起步-如何选择域名

如何选择合适的域名 如何选择合适的域名 我们所看到的网站是由域名加空间服务器加网站程序组成的,往往我们用户最先看到的就是网站的域名,因为网站内容加载往往需要时间,所以最先展示的就是我们网站的域名了。域名就跟我们手机号一样具有唯一性,当我们没有及时续费时,就…