关于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 相关文章推荐
驱动事件的addEvent.js代码
Mar 27 Javascript
javascript 禁止复制网页
Jun 11 Javascript
js下通过getList函数实现分页效果的代码
Sep 17 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
Apr 27 Javascript
中文路径导致unitpngfix.js不正常的解决方法
Jun 26 Javascript
AngularJS通过$http和服务器通信详解
Sep 21 Javascript
iconfont的三种使用方式详解
Aug 05 Javascript
在vue项目中引入高德地图及其UI组件的方法
Sep 04 Javascript
基于React Native 0.52实现轮播图效果
Aug 25 Javascript
angular6开发steps步骤条组件
Jul 04 Javascript
JS实现图片幻灯片效果代码实例
May 21 Javascript
Vue+Openlayers自定义轨迹动画
Sep 24 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 函数学习简单小结
2010/07/08 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python生成随机数的方法
2014/01/14 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
浅析python继承与多重继承
2018/09/13 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
python自动下载图片的方法示例
2020/03/25 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
耐克中国官方商城:Nike中国
2018/10/18 全球购物
一份比较全的PHP面试题
2016/07/29 面试题
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
工商技校毕业生自荐信
2013/11/15 职场文书
装修设计师求职信
2014/02/26 职场文书
家长通知书家长评语
2014/04/17 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技