关于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 可以拖动的div实现代码 脚本之家修正版
Jun 26 Javascript
JQuery 获取和设置Select选项的代码
Feb 07 Javascript
javascript学习笔记(三)显示当时时间的代码
Apr 08 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
Jan 11 Javascript
JS正则验证邮箱的格式详细介绍
Nov 19 Javascript
jquery实现顶部向右伸缩的导航区域代码
Sep 02 Javascript
javascript简单实现等比例缩小图片的方法
Jul 27 Javascript
Javascript封装id、class与元素选择器方法示例
Mar 13 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
May 08 jQuery
浅谈Webpack自动化构建实践指南
Dec 18 Javascript
node.JS事件机制与events事件模块的使用方法详解
Feb 06 Javascript
关于JavaScript数组去重的一些理解汇总
Sep 10 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
php 猴子摘桃的算法
2017/06/20 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
PHP7修改的函数
2021/03/09 PHP
script标签属性type与language使用选择
2012/12/02 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
js随机生成一个验证码
2017/06/01 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
简单介绍Ruby中的CGI编程
2015/04/10 Python
python文件的md5加密方法
2016/04/06 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
软件测试题目
2013/02/27 面试题
业务部经理岗位职责
2014/01/04 职场文书
初中学校军训方案
2014/05/09 职场文书
事业单位鉴定材料
2014/05/25 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis