关于better-scroll插件的无法滑动bug(2021通过插件解决)


Posted in Javascript onMarch 01, 2021

better-scroll滚动原理

关于better-scroll插件的无法滑动bug(2021通过插件解决)

wrapper作为父容器,它的高度会随着内容的大小而撑高。那么,当
content的高度不超过父容器的高度,是不能滚动的,而它一旦超过了父容器的高度,我们就可以滚动内容区了
BetterScroll 默认处理容器(wrapper)的第一个子元素(content)的滚动,其它的元素都会被忽略
所以也给定了如下页面结构

<div class="wrapper">
 <ul class="content">
  <li>...</li>
  <li>...</li>
  ...
 </ul>
 <!-- 这里可以放一些其它的 DOM,但不会影响滚动 -->
</div>

所以我们在这里只说最重要的一点!!!

因为图片需要加载,所以better-scroll的初始化时机非常重要,因为它在初始化的时候,会计算父元素和子元素的高度和宽度,如果图片还没有加载完成就已经开始初始化,那么计算出的实际高度和你的真实高度就会有大量偏差(网速也会影响。。。)

这是目前所有使用者会出现无法滚动的最大原因

我前几天遇到这个问题,并且better-scroll文档无法访问,github上的文档只有大概使用,找解决方法找了整整一天,网上的各种方法层出不穷,最优解:

通过插件:better-scroll/observe-dom

动态计算 BetterScroll 的可滚动高度或者宽度,你并不需要自己在高度或者宽度发生变化的时候,手动调用 refresh() 方法。插件通过 MutationObserver 帮你完成了

如果当前你的浏览器不支持 MutationObserver,会降级使用 setTimeout。

使用

安装依赖 npm install @better-scroll/observe-dom

import BScroll from '@better-scroll/core'
import ObserveDom from '@better-scroll/observe-dom'
BScroll.use(ObserveDom)

const bs = new BScroll('.wrapper', {
 observeDOM: true
})

这个问题还有很多解决办法,但网上很多文章讲也没有讲清,使用这个插件就好了

别的解决办法大概思路就是:监听图片加载调用refresh()重新计算高度

vue用img标签,用@load="定义一个方法"监听图片加载事件,只要图片加载一个就会调用一次你定义的方法

最后在方法中写入this.scroll.refresh()就可以做到加载一个图片刷新一次重新计算高度,同时你需要使用防抖函数避免频繁的重复调用带来的各种问题

到此这篇关于(2021通过插件解决)better-scroll插件的无法滑动bug的文章就介绍到这了,更多相关better-scroll插件无法滑动内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
使用POST方式弹出窗口的两种方法示例介绍
Jan 29 Javascript
js使用循环清空某个div中的input标签值
Sep 29 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
Oct 11 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
Nov 20 Javascript
JavaScript forEach()遍历函数使用及介绍
Jul 08 Javascript
老司机带你解读jQuery插件开发流程
May 16 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
May 18 Javascript
js实现不提示直接关闭网页窗口
Mar 30 Javascript
Koa代理Http请求的示例代码
Oct 10 Javascript
小程序click-scroll组件设计
Jun 18 Javascript
JavaScript制作3D旋转相册
Aug 02 Javascript
微信小程序去除左上角返回键的实现方法
Mar 06 Javascript
一起来了解一下JavaScript的预编译(小结)
Mar 01 #Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 #Vue.js
three.js 实现露珠滴落动画效果的示例代码
Mar 01 #Javascript
详解js创建对象的几种方式和对象方法
Mar 01 #Javascript
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 #Vue.js
vue实现拖拽进度条
Mar 01 #Vue.js
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
Mar 01 #Vue.js
You might like
PHP面向对象法则
2012/02/23 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
WebPack基础知识详解
2017/01/16 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
pandas中去除指定字符的实例
2018/05/18 Python
由Python编写的MySQL管理工具代码实例
2019/04/09 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
旅游管理专业学生求职信
2013/09/28 职场文书
通信工程专业毕业生推荐信
2013/12/25 职场文书
上学迟到的检讨书
2014/01/11 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
文明单位汇报材料
2014/12/24 职场文书
艺术节开幕词
2015/01/28 职场文书
中小企业员工手册范本
2015/05/14 职场文书
幼儿园国培研修日志
2015/11/13 职场文书
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server