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

本文详细介绍了如何使用Better Scroll库在移动端实现滑动列表,包括基础布局设置、数据加载、容器初始化、上滑加载和下拉刷新等功能,并解决了常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步 基础布局及引入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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧阳呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值