关于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 相关文章推荐
IE7提供XMLHttpRequest对象为兼容
Mar 08 Javascript
JS操作Cookie写入和读取实例代码
Oct 20 Javascript
更高效的使用JQuery 这里总结了8个小技巧
Apr 13 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
Oct 03 Javascript
图片懒加载插件实例分享(含解析)
Jan 09 Javascript
除Console.log()外更多的Javascript调试命令
Jan 24 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
Sep 18 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
Sep 24 Javascript
微信小程序获取当前位置和城市名
Nov 13 Javascript
JS校验与最终登陆界面功能完整示例
Jan 13 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
Apr 26 Javascript
Vue中避免滥用this去读取data中数据
Mar 02 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加入动态flash文件的生成的支持
2006/10/09 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
FormValidate 表单验证功能代码更新并提供下载
2008/08/23 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
jQuery如何获取动态添加的元素
2016/06/24 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
django批量导入xml数据
2016/10/16 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
Python流程控制常用工具详解
2020/02/24 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
python else语句在循环中的运用详解
2020/07/06 Python
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
简历中个人求职的自我评价模板
2013/11/29 职场文书
业务副厂长岗位职责
2014/01/03 职场文书
老师给学生的表扬信
2014/01/17 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
节约用水演讲稿
2014/05/21 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
初中运动会前导词
2015/07/20 职场文书
2016公司新年问候语
2015/11/11 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python