better-scroll的学习和使用

2023-10-26

better-scroll的学习和初始化

介绍

在日常的移动端开发中,列表滚动条的处理是非常常见的需求,横竖的滚动条使用better-scroll都可以帮助我们在开发中实现。

什么是better-scroll

better-scroll是一个移动端滚动的解决方案,他不仅可以做普通的滚动列表,也可以做轮播投,prcker等等。

better-scroll的滚动原理

原始的浏览器的滚动条很常见,当页面内容的高度超过视口高度的时候就会出现纵向滚动条,超出视口宽度的时候会出现横向的滚动条,也就是当我们的视口展示不下内容的时候,会通过滚动条的方式让用户滚动屏幕看到剩余的内容。better-scroll也是一样的道理。

better-scroll最常见的结构

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

初始化better-scroll

html文件中使用
在script标签中引用,进行初始化,直接引用即可
官网地址
初始化better-scroll
Vue中使用better-scroll

  1. 安装
npm install @better-scroll/core --save
  1. 在main中使用插件

import BScroll from '@better-scroll/core'
import Pullup from '@better-scroll/pull-up'
BScroll.use(Pullup)
  1. 引入
import BScroll from '@better-scroll/core'
  1. 初始化
    html代码:
<template>
<div class="wrapper">
    <ul class="content">
    	...
    </ul>
</div>
</template>

script代码:

<script>
import BScroll from '@better-scroll/core'
export default {
    data(){
        return{
            scroll:null
        }
    },
    mounted(){
        this.scroll = new BScroll(document.querySelector(".wrapper"),{}),
    }
}
</script>

Vue.js 提供了我们一个获取 DOM 对象的接口—— vm. r e f s 。 在 这 里 , 我 们 通 过 了 t h i s . refs。在这里,我们通过了 this. refsthis.refs.wrapper 访问到了这个 DOM 对象,并且我们在 mounted 这个钩子函数里,this. n e x t T i c k 的 回 调 函 数 中 初 始 化 b e t t e r − s c r o l l 。 因 为 这 个 时 候 , w r a p p e r 的 D O M 已 经 渲 染 了 , 我 们 可 以 正 确 计 算 它 以 及 它 内 层 c o n t e n t 的 高 度 , 以 确 保 滚 动 正 常 。 这 里 的 t h i s . nextTick 的回调函数中初始化 better-scroll 。因为这个时候,wrapper 的 DOM 已经渲染了,我们可以正确计算它以及它内层 content 的高度,以确保滚动正常。 这里的 this. nextTickbetterscrollwrapperDOMcontentthis.nextTick 是一个异步函数,为了确保 DOM 已经渲染,感兴趣的同学可以了解一下它的内部实现细节,底层用到了 MutationObserver 或者是 setTimeout(fn, 0)。其实我们在这里把 this.$nextTick 替换成 setTimeout(fn, 20) 也是可以的(20 ms 是一个经验值,每一个 Tick 约为 17 ms),对用户体验而言都是无感知的。

实现better-scroll的一个简单滚动

默认情况下betterScroll是不可以实时的监听滚动位置
probe 侦测,【0,1多部侦测实时的位置】,【2:侦测】【3】只要是滚动都侦测,当传入2的时候,在手指滚动的过程中侦测,手指离开后的惯性滚动的过程不侦测
简单例子:
better-scroll的一个简单上拉加载滚动
代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .content{
            height: 200px;
            background-color: aquamarine;
            overflow: hidden;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="content">
            <ul>
                <button>按钮</button>
                <li>列表数据1</li>*1000
            </ul>
        </div>
    </div>
    <script src="./better-scroll.js"></script>
    <script>
        const bs = BetterScroll.createBScroll('.content', {
            probeType:3, //只要是滚动都侦测,当传入2的时候,在手指滚动的过程中侦测,手指离开后的惯性滚动的过程不侦测
            click:true,  //滚动内容中允许有可以点击的内容
            pullUpLoad:true
        })
        bs.on('scroll',(position)=>{
             //console.log(position);
        })
        bs.on("pullingUp",()=>{            
            console.log("上拉加载更多");
            //先去发送网络请求,请求更多页的数据
            //等数据请求完成,并且将新的数据展示出来后
            setTimeout(()=>{
                bs.finishPullUp()
            },2000)
        })
    </script>
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

better-scroll的学习和使用 的相关文章

  • 在 angularjs 模块初始化期间有条件地注入依赖项

    我有一个角度模块 我想有条件地将依赖项注入其中 IE var myapp angular module myapp ngRoute myappcontroller ngGrid I want to include ngGrid only i
  • Twitter Bootstrap 轮播在加载时自动播放

    使用twitter bootstrap框架 如何调用轮播来 自动滑动 这意味着当页面加载时 轮播会自动滚动 我尝试过 javascript onLoad click 函数 a 下一个链接的 但这不起作用 你应该这样做Twitter Boot
  • 禁用整个站点的 IE8 加速器

    是的 我知道有类似的问题 https stackoverflow com questions 499565 is it possible to disable ie8 accelerators on my website在 SO 上 但它已
  • 如何删除从 javascript var 转义的反斜杠?

    我有这个变量 var x div class Which is div class 但是我需要 div class abcdef 我怎样才能 unes cape 这个变量来删除所有转义字符 您可以通过正则表达式将反斜杠后跟引号替换为仅引号
  • AngularJS - 服务、工厂、过滤器等中的依赖注入

    因此 我想在我的 Angular 应用程序中使用一些插件和库 目前 我只是引用这些函数 方法 因为它们是在 99 的应用程序中以完全忽略依赖注入的方式使用的 我有 例如 javascript 库 MomentJS 它处理格式化和验证日期 并
  • 使用 jQuery/JavaScript 将文本框值复制到剪贴板

    我有一个文本框和按钮 如下所示 div class col xs 11 style padding 20px 0 div
  • 使用 Javascript eval() 100% 安全吗?

    我正在编写一个生成 Javascript 代码的 PHP 库 Javascript 代码有许多名为component001 component002 etc 页面通过 AJAX 动态加载 我需要通过 URL 变量传递组件的名称 然后由脚本进
  • 表单序列化javascript(无框架)

    想知道 javascript 中是否有一个没有 jquery 或任何框架的函数可以让我序列化表单并访问序列化版本 2023 年更新 Use FormData https developer mozilla org en US docs We
  • selenium-webdriver 与 webdriverjs 有什么区别(以及何时使用)?

    我是一位使用 selenium webdriver 的经验丰富的专业人士 我正在探索有关如何测试 javascript 应用程序的更多选项 我发现了 webdriverJs 不幸的是 我不明白这两者 2 之间有什么区别 有人可以解释一下何时
  • 阻止通过 GET 传递“提交”按钮值?

    我正在尝试通过 GET 传递表单信息 这很重要 这样人们就可以将表单选择中过滤后的数据发送给其他人 问题是 使用下面的代码 它不仅传递过滤器信息 还传递提交表单值 如下所示 index php month filter Feb year f
  • javascript/jquery 禁用点击提交按钮,防止重复提交

    所以我的提交按钮如下所示 a href img src images user create product png border 0 a 当我双击它时 显然会双重提交 问题是 我将信息保存在数据库中 因此那里会有重复的信息 我不想那样 这
  • d3力定向布局-链接距离优先

    在 d3 中使用力导向布局 如何使链接距离成为优先事项 同时仍然保持良好的图形布局 如果我指定动态链接距离 但保留默认费用 则我的图形距离会因费用函数而发生一些变形 并且不再是准确的距离 但是 如果我删除电荷 图表将如下所示 任何建议表示赞
  • 在多个数组中搜索字符串,然后设置 var - jQuery

    我正在寻找基于字符串存在于哪个数组中设置一个变量 例如 var primary red blue yellow var secondary orange purple green 然后检查 purple 并返回它在 secondary 数组
  • 如何仅突出显示嵌套表的最里面的表行?

    我有几个嵌套表 我想突出显示鼠标指针下方的最里面的行 我怎样才能做到这一点 一些提示 我使用嵌套表来显示递归表格数据 表可以嵌套 10 层 嵌套正如您所期望的那样 table tr td table tr td table tr td 可能
  • window.open 使用 css 样式

    我想设计我的 window open 目前 我的网页上有一些项目由于解析了某个类而打开 然后在新窗口中打开指定的文本 我想更改字体大小 字体和填充等 这是我的 JavaScript 代码
  • ES6 Reflect API 的好处

    我一直在努力升级一些代码以使用 ES6 语法 我有以下代码行 delete this foo 我的 linter 提出了使用建议 Reflect deleteProperty this foo 您可以找到该方法的文档here https d
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲
  • 使用 div 或表格来包含链接列更好吗?

    我的页面底部有 3 列链接 每列都放入一个 div 中 所有三个 div 都包装在页面中央的一个大 div 中 这是更适合桌子的东西还是桌子不适合这项工作 您还可以使用 ul http www w3schools com tags tag
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网
  • React 错误:目标容器不是 DOM 元素

    我刚刚开始使用 React 所以这可能是一个非常简单的错误 但我们开始吧 我的html代码非常简单 load staticfiles

随机推荐

  • centos系统出现grub问题修复

    问题 解决方式 1 查看系统分区情况 ls 查看分区 ls hd0 msdos1 查看分区内容 找到存在vmlinuz文件和initramfs文件的分区 操作3步骤 3 grub gt set root hd0 msdos1 将存在vmli
  • echarts(横向柱状图和grid)

    场景 最近在做知识图谱的时候 右侧弹窗需要有数据统计功能 大概 如下图 当时想到的是横向柱状图来实现 目前的效果与UI的不同是后面统计的数量显示的位置 后来经其他前端同事启发 他是用进度条来实现的 发现自己的思想有些死板了 原来进度条实现也
  • VScode中设置vue代码的自动提示&主题

    VScode中设置vue代码的自动提示 下载VueHelper即可 主题推荐 Solarized Light
  • react 阻止默认行为

    react在做某一些弹层的时候 会用到原生的监听点击事件document addEventListener click 这个时候会用到阻止默认事件发生 代码如下 e nativeEvent stopImmediatePropagation
  • 2023linux面试问答_Linux基础

    1 什么是Linux Linux是一套免费使用和自由传播的类Unix操作系统 是一个基于POSIX和Unix 的多用户 多任务 支持多线程和多CPU的操作系统 它能运行主要的Unix工 具软件 应用程序和网络协议 它支持32位和64位硬件
  • 深入随机数Random

    以下内容来自 http www cnblogs com rupeng p 3723018 html 今天再园子上看到了杨老师的一片blog 受益了 原来随机数还有这么多道道 要走的路还远啊 以下为个人收录 几乎所有编程语言中都提供了 生成一
  • windows2008文件服务器端口,windows server 2008 文件服务器不定期出现大量CLOSE_WAIT状态的连接,必须重启服务器,客户端才能访问共享。...

    故障现象如题 用netstat ano p tcp 可以看到大量的连接 都处于close wait状态 然后客户端访问共享就很卡 EXCEL也卡死 服务器重启恢复正常 但是过一段时间又出现这个问题 不知道有谁知道这个问题可能出在哪里 服务器
  • apt-cache - 搜索软件包

    Apt cache是一个命令行工具 可以从本地 APT 文件中查询和显示有关包的可用信息 包信息包括包名称 描述 版本 依赖项 repo 和维护者 存储来自 Debian 镜像的副本的本地 apt 文件位于 var lib apt list
  • day03-switch&循环语句

    1 流程控制语句 应用 在一个程序执行的过程中 各条语句的执行顺序对程序的结果是有直接影响的 所以 我们必须清楚每条语句的执行流程 而且 很多时候要通过控制语句的执行顺序来实现我们想要的功能 1 1 流程控制语句分类 顺序结构 分支结构 i
  • 计算机网络第五章——传输层(下)

    安得广厦千万间 大庇天下寒士俱欢颜 文章目录 按序的不丢失的 这个校验也是二进制求反码来判断有没有发送错误 TCP传输的时候就是以一个字节为单位 所以就会把一个字节编一个序号 对于一个文件第一个需要是多少是可以随机的 发送的时候是以报文段为
  • 4元数(转)

    这是国内找不到的超好文章 为什么大陆的4元数文章很垃圾呢 翻译中 奉献给大家 70秒即懂 能使用 用四元数 4元数 阔特尼恩 Quaternion旋转 C 中田 亨 独立行政法人 产业技术综合研究所 数字人类研究中心 研究员 博士 工学 2
  • wireshark抓包图解 TCP三次握手/四次挥手详解

    一 TCP IP协议族 TCP IP是一个协议族 通常分不同层次进行开发 每个层次负责不同的通信功能 包含以下四个层次 1 链路层 也称作数据链路层或者网络接口层 通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡 它们一起处理与电
  • 医疗大数据安全技术实践

    随着医疗大数据的不断积累 其安全性问题也逐渐受到广泛的关注 保护医疗大数据的安全和隐私至关重要 不仅需要制定相应的政策措施 更需要实际的技术实践 下面我将重点介绍医疗大数据安全技术实践的相关措施 1 数据加密技术 数据加密技术是医疗大数据安
  • 源码分享-go语言实现的snow3g加密算法

    源码路径 free5gc nas security snow3g snow3g go package snow3g var sr byte 0x63 0x7c 0x77 0x7b 0xf2 0x6b 0x6f 0xc5 0x30 0x01
  • 利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程

    如需完整代码 加 LiteMango 付费 项目内容 本案例选择 gt gt 商品类目 沙发 数量 共100页 4400个商品 筛选条件 天猫 销量从高到低 价格500元以上 以下是分析 源码点击文末链接 项目目的 1 对商品标题进行文本分
  • Python爬虫要学多久

    Python爬虫要学三个月到半年 自学的话 根据每个人的情况来说 学习周期是不同的 如果没有任何基础 零基础小白进行Python学习的话 需要先进行简单的Python基础知识学习 就需要三个月左右的时间 再进行爬虫知识的学习 少则半年左右
  • 常用网址合集

    常用网址合集 一 壁纸网站 a AweSome Wallpapers 二 音乐网站 a 音乐下载器 三 电子书下载网站 a PDF之家 四 摸鱼网站 a Fakeupdate 很早之前就想收集一些比较常用的网址 最开始是直接放浏览器里面 但
  • 北大学生控诉字节跳动backup制度,怎么破解职场pua?

    5月13日下午 一名北大学生在校内论坛未名BBS上写下4000多字长文 陈述自己在字节跳动实习的经历 该同学表示 2021年1月份在字节跳动办理实习生入职 四月中旬实习期已满 且因毕业事宜繁忙向leader表达了近期需要离职的诉求 但竟遭遇
  • unity3d课后练习(四)

    文章目录 1 基本操作演练 建议做 2 编程实践 1 基本操作演练 建议做 下载 Fantasy Skybox FREE 构建自己的游戏场景 在 Asset Store 中搜索 Fantasy Skybox FREE 下载完成后 按照介绍导
  • better-scroll的学习和使用

    better scroll的学习和初始化 介绍 在日常的移动端开发中 列表滚动条的处理是非常常见的需求 横竖的滚动条使用better scroll都可以帮助我们在开发中实现 什么是better scroll better scroll是一个