关于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 相关文章推荐
javascript自动改变文字大小和颜色的效果的小例子
Aug 02 Javascript
jquery.cookie.js使用指南
Jan 05 Javascript
简单实现异步编程promise模式
Jul 31 Javascript
JQuery ztree带筛选、异步加载实例讲解
Feb 25 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
Jul 09 Javascript
详细分析Javascript中创建对象的四种方式
Aug 17 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
Jan 14 Javascript
jquery实现input框获取焦点的简单实例
Jan 26 Javascript
vue-router 路由基础的详解
Oct 17 Javascript
微信小程序form表单组件示例代码
Jul 15 Javascript
Vue Element UI + OSS实现上传文件功能
Jul 31 Javascript
浏览器JavaScript调试功能无法使用解决方案
Sep 18 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
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
JS求解两数之和算法详解
2020/04/28 Javascript
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
python入门基础之用户输入与模块初认识
2016/11/14 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
python的依赖管理的实现
2019/05/14 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
人力资源专员岗位职责
2014/01/30 职场文书
公司合作意向书
2014/04/01 职场文书
单位授权委托书范文
2014/08/02 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python