关于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 相关文章推荐
jquery 简单的进度条实现代码
Mar 11 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
Sep 29 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
Dec 20 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
Aug 24 Javascript
Jquery表单验证失败后不提交的解决方法
Oct 18 Javascript
浅谈js数组和splice的用法
Dec 04 Javascript
JS轮播图中缓动函数的封装
Nov 25 Javascript
Vue组件和Route的生命周期实例详解
Feb 10 Javascript
ES6中let 和 const 的新特性
Sep 03 Javascript
VSCode使用之Vue工程配置eslint
Apr 30 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 05 Javascript
layui使用及简单的三级联动实现教程
Dec 01 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的宝库目录--PEAR
2006/10/09 PHP
php随机显示图片的简单示例
2014/02/15 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
JavaScript 动态生成方法的例子
2009/07/22 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
python 解析html之BeautifulSoup
2009/07/07 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
python3学生名片管理v2.0版
2018/11/29 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
Python将string转换到float的实例方法
2019/07/29 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
Python读写操作csv和excle文件代码实例
2020/03/16 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
"火柴棍式"程序员面试题
2014/03/16 面试题
教师年度考核评语
2014/04/28 职场文书
死亡赔偿协议书
2015/01/28 职场文书
大学生读书笔记大全
2015/07/01 职场文书
logback如何自定义日志存储
2021/08/30 Java/Android
python playwright 自动等待和断言详解
2021/11/27 Python
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android