移动端滚动神器 better-scroll 系列篇三 原生js+BS上滑加载,下拉刷新

简介: 笔记

第一步 基础布局及引入JS


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>Document</title>
    <style>
    </style>
    <style>
        body{
            margin: 0;
        }
        body,html{
            height: 100%;
        }
        ul,ol{
            list-style: none;
            padding: 0;
            margin: 0;
        }
        .con{
            width: 100vw;
            height: 100vh;
            /* 外框一定要设置高度 如果不设置 将没有效果 */
            /* background: green; */
            overflow: hidden;
        } 
        /* 横向滑屏 */
        ul{
            /* width: 150vw; */
            position: relative;
        }
        ul>li{
            width: 100%;
            height: 40px;
            line-height: 40px;
            text-indent: 20px;
            border-bottom: 1px solid #666666;
            color: #333333;
        }
    </style>
</head>
<body>
    <div class="con">
        <ul class="list">
        </ul>
    </div>
</body>
<script type="text/javascript" src="https://unpkg.com/better-scroll@1.12.1/dist/bscroll.min.js"></script>


第二步 模拟数据



 var list = document.querySelector(".list");
    //数据加载
    function getData(){
        var html = "";
        for(var i = 0; i < 20; i++){
            html += "<li>我是第"+(i+1)+"个li</li>"
        }
        list.innerHTML = html;
    }
     window.onload = () => {
        getData();
    }

列表有数据了,但是划不动,接下来让它动起来


第三步 初始化容器



  //初始化con
    function con(){
        var con = document.querySelector(".con");
        var bscroll =  new BScroll(con,{
            scrollX:true,
            scrollY:true,
            momentum:true,
            //上滑加载的配置项
            pullUpLoad: {
                //滑动到底部还剩多少单位:px 进行一个操作
                threshold:50
            },
      //下拉刷新的配置项
            pullDownRefresh:{
              //同上
                threshold:-50,
                //刷新的时间里停留的位置 单位:px
                stop:30
            }
        });
     }

记得: con()方法添加到加载函数里去,此时容器已经可以滚动了


第四步 添加对应的方法(BS提供的)



先做一些样式处理,上滑及下拉的提示文字,这里只做简单处理

css 添加一些样式

    .pullUp:after{
            content: "加载中,请稍候...";
        }
        .pullDown:before{
            content: "正在刷新,请稍候...";
            position: absolute;
            top: -30px;
        }

加一个数据更新的方法

//上滑加载 or 下拉刷新
    function getNewData(type){
        var html = "";
        for(var i = 0; i < 10; i++){
            html += "<li>新加载数据第"+(i+1)+"条</li>"
        }
        if(type === "up"){
            list.innerHTML += html;
        }else{
            list.innerHTML = html + list.innerHTML;
        }
    }

上滑加载

 //上滑加载事件
        bscroll.on("pullingUp",()=>{
            // console.log('111');
             //阀门,当所有数据加载完成不让它加载了
            var fal = false;
            setTimeout(()=>{
                getNewData("up");
                list.classList.add("pullUp");
                 if(!fal){
                     bscroll.closePullUp();
                 }else{
                     list.classList.add("pull");
                      //结束
                     bscroll.finishPullUp();
                 }
                //由于不是真实服务端接口 它不会刷新
                //需要手动刷新
                bscroll.refresh();
            },1000)
        })

下拉刷新

 bscroll.on("pullingDown",()=>{
            list.classList.add("pullDown");
            setTimeout(()=>{
                getNewData("down");
                //告诉他结束了下拉
                bscroll.finishPullDown();
                list.classList.remove("pullDown");
            },1000);
        })

FAQ

  1. 由于不是真实服务端接口,BS有时候没有监听到dom变化,不会刷新,需要手动刷新 bscroll.refresh();
  2. 上滑及下拉结束之后一定要及时告诉BS,调用它的api,例如上滑加载: finishPullUp();
目录
相关文章
|
2月前
|
缓存 JavaScript 前端开发
高效打造跨平台桌面应用:Electron加载服务器端JS
【9月更文挑战第17天】Electron 是一个基于 Chromium 和 Node.js 的开源框架,允许使用 HTML、CSS 和 JavaScript 构建跨平台桌面应用。加载服务器端 JS 可增强应用灵活性,实现代码复用、动态更新及实时通信。通过 HTTP 请求、WebSocket 或文件系统可实现加载,但需注意安全性、性能和兼容性问题。开发者应根据需求选择合适方法并谨慎实施。
106 3
|
2天前
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
26 6
|
2月前
|
移动开发 前端开发 JavaScript
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
本文介绍了一个使用JavaScript和HTML5 Canvas API实现的贪吃蛇游戏的升级版本,该版本支持PC端和移动端,提供了丝滑的转向效果,并允许玩家通过键盘或触摸屏控制蛇的移动。代码中包含了详细的注释,解释了游戏逻辑、食物生成、得分机制以及如何响应不同的输入设备。
51 1
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
|
2月前
|
移动开发 前端开发 JavaScript
原生JavaScript+canvas实现五子棋游戏_值得一看
本文介绍了如何使用原生JavaScript和HTML5的Canvas API实现五子棋游戏,包括棋盘的绘制、棋子的生成和落子、以及判断胜负的逻辑,提供了详细的代码和注释。
26 0
原生JavaScript+canvas实现五子棋游戏_值得一看
|
3月前
|
JavaScript 数据可视化
JS如何优雅的实现模块自动滚动展示
【8月更文挑战第22天】JS如何优雅的实现模块自动滚动展示
30 1
JS如何优雅的实现模块自动滚动展示
|
3月前
|
编解码 缓存 算法
Three.js如何降低3D模型的大小以便更快加载
为加快600MB的3D模型在Three.js中的加载速度,可采用多种压缩方法:1) 减少顶点数,使用简化工具或LOD技术;2) 压缩纹理,降低分辨率或转为KTX2等格式;3) 采用高效文件格式如glTF 2.0及draco压缩;4) 合并材质减少数量;5) 利用Three.js内置优化如BufferGeometry;6) 按需分批加载模型;7) Web Workers后台处理;8) 多模型合并减少绘制;9) 使用Texture Atlas及专业优化工具。示例代码展示了使用GLTFLoader加载优化后的模型。
347 12
|
3月前
|
Devops 持续交付 测试技术
JSF遇上DevOps:开发流程将迎巨变?一篇文章带你领略高效协同的魅力!
【8月更文挑战第31天】本文探讨了如何在JavaServer Faces(JSF)开发中融入DevOps文化,通过持续集成与部署、自动化测试、监控与日志记录及反馈机制,提升软件交付速度与质量。文中详细介绍了使用Jenkins进行自动化部署、JUnit与Selenium进行自动化测试、ELK Stack进行日志监控的具体方法,并强调了持续改进的重要性。
36 0
|
3月前
|
JavaScript 前端开发 API
从零开始学表单操作,jQuery 与原生 JavaScript 完全指南,带你轻松掌握网页交互关键!
【8月更文挑战第31天】在网页开发中,表单是实现用户互动的关键元素。无论是收集信息、提交数据还是验证输入,都需要对表单进行有效操作。本文档介绍了如何使用原生 JavaScript 和 jQuery 操作表单,包括获取表单元素、读写表单值、处理表单提交及验证等核心功能。jQuery 提供了更简洁的语法和更好的兼容性,但原生 JavaScript 在性能上有优势。选择合适的方法取决于项目需求和个人偏好。下面通过具体示例展示了两种方式的操作方法。
28 0
|
3月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
|
3月前
|
JavaScript 前端开发
JavaScript引入全攻略:提升网页加载速度的秘诀!
JavaScript引入全攻略:提升网页加载速度的秘诀!