关于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 操作select标签实现代码
May 14 Javascript
javascript dom代码应用 简单的相册[firefox only]
Jun 12 Javascript
基于jQuery的简单的列表导航菜单
Mar 02 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
Jan 16 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
Mar 18 Javascript
js导出txt示例代码
Jan 14 Javascript
node安装--linux下的快速安装教程
Mar 21 Javascript
JS手机端touch事件计算滑动距离的方法示例
Oct 26 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
Jan 31 Javascript
react中Suspense的使用详解
Sep 01 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
原生JS运动实现轮播图
Jan 02 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防注入安全代码
2008/04/09 PHP
php下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
PHP中调用ASP.NET的WebService的代码
2011/04/22 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
运用jQuery定时器的原理实现banner图片切换
2014/10/22 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
Python timeit模块的使用实践
2020/01/13 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
苹果Mac升级:MacSales.com
2017/11/20 全球购物
如何进行Linux分区优化
2016/09/13 面试题
电大会计学自我鉴定
2014/02/06 职场文书
百年校庆节目主持词
2014/03/27 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android
golang实现浏览器导出excel文件功能
2022/03/25 Golang