BetterScroll 是什么

BetterScroll 是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件。它的核心是借鉴的 iscroll (opens new window) 的实现,它的 API 设计基本兼容 iscroll,在 iscroll 的基础上又扩展了一些 feature 以及做了一些性能优化。

BetterScroll 是使用纯 JavaScript 实现的,这意味着它是无依赖的。

官方文档:BetterScroll

官方 Demo:示例

为什么不能滚动:滚动原理

绿色部分为 wrapper,也就是父容器,它会有固定的高度。黄色部分为 content,它是父容器的第一个子元素,它的高度会随着内容的大小而撑高。那么,当 content 的高度不超过父容器的高度,是不能滚动的,而它一旦超过了父容器的高度,我们就可以滚动内容区了,这就是 BetterScroll 的滚动原理。

在项目中使用

基本 HTML 结构

HTML
 
<div class="container">
<header class="header-wrapper">
<div class="header-content">
<div class="header-content-item">动画</div>
<div class="header-content-item">漫画</div>
<div class="header-content-item">游戏</div>
<div class="header-content-item">文学</div>
</div>
</header>
<div class="wrapper">
<div class="content">
<span class="pullup-txt">Loading...</span>
</div>
</div>
</div>

样式

STYLUS
 
html,body
margin: 0
padding: 0
background: #ccc
.container
position: relative
.header-wrapper
header-wrapper-height = 40px
background: red
height: header-wrapper-height
width: 100%
white-space: nowrap
overflow: hidden
.header-content
display: inline-block
padding: 0 10px
box-sizing: border-box
.header-content-item
display: inline-block
width: 125px
height: 100%
line-height: header-wrapper-height
.wrapper
position: fixed
top: 45px
bottom: 10px
height: auto
width: 100%
// background: green
overflow: hidden
.content
// position: absolute
padding: 0 10px
box-sizing: border-box
.pullup-txt
display: none
text-align: center
display: block
font-size: 17px
color: white
.content-item
width: 100%
background: white
height: 100px
display: flex
align-items: center
padding: 0 10px
box-sizing: border-box
margin-bottom: 10px
border-radius: 10px
.content-item-avatar
width: 50px
height: 50px
img
width: 50px
height: 50px
border-radius: 50%
.content-item-body
margin-left: 10px

JavaScript 逻辑

JAVASCRIPT
 
import '../style/index/index.styl'
import 'lib-flexible'
import $ from 'jquery'
// 导入better-scroll核心组件
import BScroll from '@better-scroll/core'
import Pullup from '@better-scroll/pull-up'
import ObserveDOM from '@better-scroll/observe-dom'
BScroll.use(ObserveDOM)
BScroll.use(Pullup)
let bodyScroll
let timer
let number = 0
const maxNumber = 10
$(function () {
// 头部滑动
let headerWrapper = document.querySelector('.header-wrapper')
let headerScroll = new BScroll(headerWrapper, {
scrollX: true,
scrollY: false,
probeType: 3 // listening scroll event
})
// 内容区滑动
let wrapper = document.querySelector('.wrapper')
bodyScroll = new BScroll(wrapper, {
scrollY: true,
probeType: 3, // listening scroll event
tap: 'tap',
// 上拉加载更多示例
pullUpLoad: true,
ObserveDOM: true
}) bodyScroll.on('pullingUp', pullingUpHandler)
bodyScroll.autoPullUpLoad()
})
function pullingUpHandler() {
$('.pullup-txt').show()
clearTimeout(timer)
timer = setTimeout(async () => {
number++
if (number >= maxNumber) {
// 假设没有数据了
$('.pullup-txt').text('没有数据了!')
bodyScroll.refresh()
bodyScroll.closePullUp()
} else {
const result = await getSaid()
$('.pullup-txt').before(render(result))
bodyScroll.refresh()
bodyScroll.finishPullUp()
$('.pullup-txt').hide()
}
}, 1000)
}
async function getSaid(c) {
const result = await $.get('https://v1.hitokoto.cn/', {
c
})
return result.hitokoto
}
function render(text) {
return `<div class="content-item">
<div class="content-item-avatar">
<img
src="https://cdn.jsdelivr.net/npm/kang-static@latest/avatar.jpg"
/>
</div>
<div class="content-item-body">${text}</div>
</div>`
}

在线 Demo

使用注意点

  1. 父容器需小于滚动容器才可以滚动
  2. 下拉刷新,上拉加载等需要安装对应插件

移动端滚动方案:better-scroll的更多相关文章

  1. 【JS】341- 移动端滚动穿透的6种解决方案

    前言 相信能看到这篇文章的你,已经是遇到了这个问题.我就不gif展示问题效果了. 鉴于此问题是面试的常客,故特地针对滚动穿透这个疑难杂症,整理了六个解决方案. 各方法操作难易不同,分别针对弹层和bod ...

  2. 有了这套flexible.js 移动端自适应方案,你就能在移动端的来去自如, (*^__^*)

    flexible.js 移动端自适应方案 一,flexible.js 的使用方式: github地址:https://github.com/amfe/lib-flexible 官方文档地址:https ...

  3. 基于jquery鼠标或者移动端滚动加载数据

    基于jquery鼠标或者移动端滚动加载数据 var stop = true; // 防止重复请求数据 $(window).scroll(function () { totalheight = pars ...

  4. finereport普通报表的移动端自适应方案

    移动端报表呈现,首先要求的是页面随手机屏幕大小自动放缩(自适应),下面给出一个普通报表中的finereport移动端自适应方案,适用于finereport 7.1之前的版本. 首先,了解一下当前我们可 ...

  5. 滚动锚定(Scroll Anchoring)- 让视口内容不再因视口上方 DOM 元素的高度变化而产生跳动

    不知道你有没有经历过这样的场景:当你打开一张“多图杀猫”的页面后,正一张图一张图边滚边看,在你刚准备定睛看某一张图的时候,这张图突然被它上面的内容挤到了视口下方,然后你赶紧把滚动条往下拉,试图追赶这张 ...

  6. 最火移动端跨平台方案盘点:React Native、weex、Flutter

    1.前言 跨平台一直是老生常谈的话题,cordova.ionic.react-native.weex.kotlin-native.flutter等跨平台框架的百花齐放,颇有一股推倒原生开发者的势头. ...

  7. rem移动端适配方案

    一. rem vs em 单位 定义 特点 rem font size of the root element 以根元素字体大小为基准 em font size of the element 以父元素 ...

  8. Java 服务端监控方案(四. Java 篇)

    http://jerrypeng.me/2014/08/08/server-side-java-monitoring-java/ 这个漫长的系列文章今天要迎来最后一篇了,也是真正与 Java 有关的部 ...

  9. 一款多功能的移动端滚动选择器,支持单选到多选、支持多级级联、提供自定义回调函数、提供update函数二次渲染、重定位函数、兼容pc端拖拽等等..

    https://github.com/onlyhom/mobileSelect.js/blob/master/docs/README-CN.md mobileSelect.js 一款多功能的移动端滚动 ...

随机推荐

  1. 面试官问我HTTP,我真的是

    面试官:今天要不来聊聊HTTP吧? 候选者:嗯,HTTP「协议」是客户端和服务器「交互」的一种通迅的格式 候选者:所谓的「协议」实际上就是双方约定好的「格式」,让双方都能看得懂的东西而已 候选者:所谓 ...

  2. Codeforces 1466G - Song of the Sirens(哈希)

    Codeforces 题面传送门 & 洛谷题面传送门 事实证明,有的难度评分不算很高.涉及的知识点不算很难的题目也能出得非常神仙 首先考虑如何暴力求答案.注意到一个文本串 \(T\) 在 \( ...

  3. P3438 [POI2006]ZAB-Frogs

    P3438 [POI2006]ZAB-Frogs 给出一个不一样的解法.不需要用到斜率优化等高级算法. 下文记 \(n=w_x,m=w_y\). 首先,答案显然满足可二分性,因此二分答案 \(d\in ...

  4. Linux软件安装管理:rpm与yum

    目录 1. rpm包的管理 1.1 介绍 1.2 rpm包的简单查询指令 1.3 rpm 包名的基本格式 1.4 rpm其它指令 1.5 卸载rpm包 1.6 安装rpm包 2. yum 2.1 说明 ...

  5. 详解工作流框架Activiti的服务架构和组件

    摘要:通过这篇文章,可以对工作流有一个基本的认识,为后续工作流框架Activiti的学习打下坚实的基础. 本文分享自华为云社区<BPMN工作流的基本概念!详解工作流框架Activiti的服务架构 ...

  6. CMakeLists.txt添加多个源代码

    coos2d-x 3.17.2 C++工程,安卓编译使用CMake,按照模板给的写法,只能一个一个源文件添加:如果需要添加大量的C++源代码,这种方式肯定不可取:原来的写法: 1 list(APPEN ...

  7. 使用Docker编译OpenResty支持国密ssl加密

    编译环境 执行编译操作环境如下 #操作系统 CentOS Linux release 7.4.1708 (Core) #docker版本 Version: 19.03.5 编译过程 Dockerfil ...

  8. Netty | 第1章 Java NIO 网络编程《Netty In Action》

    目录 前言 1. Java 网络编程 1.1 Javs NIO 基本介绍 1.2 缓冲区 Buffer 1.2 通道 Channel 1.3 选择器 Selector 1.4 NIO 非阻塞网络编程原 ...

  9. 生产调优3 HDFS-多目录配置

    目录 HDFS-多目录配置 NameNode多目录配置 1.修改hdfs-site.xml 2.格式化NameNode DataNode多目录配置(重要) 1.修改hdfs-site.xml 2.测试 ...

  10. acclaim

    欲学acclaim,先学claim.即使学会claim,未必记住acclaim. [LDOCE] claim的词源是cry out, shoutverb:1. state that sth is tr ...