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. Web Api 宿主的搭建

    首先我们要清楚一个概念,宿主.宿主是什么意思?先从了解一下Hosting开始吧! 有关Hosting的基础知识 Hosting是一个非常重要,但又很难翻译成中文的概念.翻译成:寄宿,大概能勉强地传达它 ...

  2. CODING 代码资产安全系列之 —— 构建全链路安全能力,守护代码资产安全

    本文作者:王振威 - CODING 研发总监 CODING 创始团队成员之一,多年系统软件开发经验,擅长 Linux,Golang,Java,Ruby,Docker 等技术领域.近两年来一直在 COD ...

  3. Atcoder Grand Contest 001E - BBQ Hard(组合意义转化,思维题)

    Atcoder 题面传送门 & 洛谷题面传送门 Yet another 思维题-- 注意到此题 \(n\) 数据范围很大,但是 \(a_i,b_i\) 数据范围很小,这能给我们什么启发呢? 观 ...

  4. nginx_install

    [root@MiWiFi-R1CM-srv ~]# yum install -y gcc-c++ zlib zlib-devel openssl openssl-devel pcre-devel pc ...

  5. 二叉树——根据遍历结果,画出对应的二叉树 转载至:http://canlynet.blog.163.com/blog/static/255013652009112602449178/

    这道题目很经典,具体如下: 已知遍历结果如下,试画出对应的二叉树: 前序:A B C E H F I J D G K 中序:A H E C I F J B D K G 解题要点: 1.前序.中序.后序 ...

  6. “equals”有值 与 “==”存在 “equals”只是比较值是否相同,值传递,==地址传递,null==a,避免引发空指针异常,STRING是一个对象==null,对象不存在,str.equals("")对象存在但是包含字符‘''

    原文链接:http://www.cnblogs.com/lezhou2014/p/3955536.html "equals" 与 "==" "equa ...

  7. 日常Java测试 2021/11/14

    课堂测试三 package word_show; import java.io.*;import java.util.*;import java.util.Map.Entry; public clas ...

  8. A Child's History of England.50

    'Knave [man without honor]!' said King Richard. 'What have I done to thee [you] that thou [you] shou ...

  9. A Child's History of England.26

    CHAPTER 9 ENGLAND UNDER WILLIAM THE SECOND, CALLED RUFUS William the Red, in breathless haste, secur ...

  10. Python计算期权隐含波动率

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. Black-Scholes 将期权价格描述为标的价格.行权价.无风险利率.到期时间和波动性的函数.  V ...