关于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 相关文章推荐
showModelessDialog()使用详解
Sep 07 Javascript
js以对象为索引的关联数组
Jul 04 Javascript
判断多个input type=file是否有已经选择好文件的代码
May 23 Javascript
javascript创建数组之联合数组的使用方法示例
Dec 26 Javascript
Jquery实现自定义弹窗示例
Mar 12 Javascript
javascript每日必学之继承
Feb 23 Javascript
温习Javascript基础语法之词法结构
May 31 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
Oct 21 Javascript
vue中各组件之间传递数据的方法示例
Jul 27 Javascript
Popup弹出框添加数据实现方法
Oct 27 Javascript
jQuery实现的导航条点击后高亮显示功能示例
Mar 04 jQuery
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
一起来了解一下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
php4与php5的区别小结(配置异同)
2011/12/20 PHP
PHP读取Excel类文件
2017/05/15 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
jquery处理json对象
2014/11/03 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
python发送伪造的arp请求
2014/01/09 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
python实现验证码识别功能
2018/06/07 Python
python中的变量如何开辟内存
2018/06/26 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
Python字符串对象实现原理详解
2019/07/01 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
python3 re返回形式总结
2020/11/20 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
2014/08/19 HTML / CSS
初中班主任寄语
2014/04/04 职场文书
2014年店长工作总结
2014/11/17 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
微信小程序实现录音Record功能
2021/05/09 Javascript
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript
OpenCV实现反阈值二值化
2021/11/17 Java/Android
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js