关于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 查找iframe父级页面元素的实现代码
Aug 28 Javascript
JS实现单行文字不间断向上滚动的方法
Jan 29 Javascript
Javascript的无new构建实例详解
May 15 Javascript
JS控制文本域只读或可写属性的方法
Jun 24 Javascript
原生js实现键盘控制div移动且解决停顿问题
Dec 05 Javascript
简单实现js点击展开二级菜单功能
May 16 Javascript
Vue实现active点击切换方法
Mar 16 Javascript
Angular 容器部署的方法
Apr 17 Javascript
解决vue中虚拟dom,无法实时更新的问题
Sep 15 Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 Javascript
vue按需加载实例详解
Sep 06 Javascript
JavaScript函数重载操作实例浅析
May 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网页木马一枚 附PHP木马的防范方法
2009/10/09 PHP
怎样使用php与jquery设置和读取cookies
2013/08/08 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
可输入的下拉框
2006/06/19 Javascript
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
js实现表单检测及表单提示的方法
2015/08/14 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
Python程序设计入门(5)类的使用简介
2014/06/16 Python
Python实现读取并保存文件的类
2017/05/11 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
Python格式化输出--%s,%d,%f的代码解析
2020/04/29 Python
python基于socket函数实现端口扫描
2020/05/28 Python
python实现图片转字符画的完整代码
2021/02/21 Python
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
大学生素质拓展活动方案
2014/02/11 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
5道关于python基础 while循环练习题
2021/11/27 Python
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis