美文网首页
better-scroll滑动插件使用,上拉加载

better-scroll滑动插件使用,上拉加载

作者: plum_meizi | 来源:发表于2021-11-18 12:51 被阅读0次

    1.安装
    npm install better-scroll@next -S

    2.使用

    import BScroll from '@better-scroll/core';
    import ScrollBar from '@better-scroll/scroll-bar';
    
    private bscroll: BScroll | null;
    
    // 使用滚动条 并且修改滚动条样式
    ScrollBar.prototype['_createIndicatorElement'] = direction => {
        const scrollbarEl = document.createElement('div');
        const indicatorEl = document.createElement('div');
        scrollbarEl.style.cssText = 'position:absolute;z-index:9999;pointerEvents:none';
        indicatorEl.style.cssText = 'box-sizing:border-box;position:absolute;background:#ffecba;border:0;border-radius:0.08rem;';
        indicatorEl.className = 'bscroll-indicator';
        if (direction === 'horizontal') {
            scrollbarEl.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';
            indicatorEl.style.height = '100%';
            scrollbarEl.className = 'bscroll-horizontal-scrollbar';
        } else {
            scrollbarEl.style.cssText += ';width:0.04rem;bottom:0px;top:0px;right:0px';
            indicatorEl.style.width = '100%';
            scrollbarEl.className = 'bscroll-vertical-scrollbar';
        }
        scrollbarEl.style.cssText += ';overflow:hidden';
        scrollbarEl.appendChild(indicatorEl);
        return scrollbarEl;
    };
    BScroll.use(ScrollBar);
    
    // 初始化BScroll,并监听scrollEnd事件
    const ele = document.getElementById(this.id) as HTMLElement;
    this.$nextTick(() => {
        this.bscroll = new BScroll(ele, {
            scrollY: true,
            scrollbar: { fade: false },//滚动条是否一直显示
            click: true,
            useTransition: false,
        });
        this.bscroll.on('scrollEnd', pos => {
            // 滚动到底部事件,用于上拉加载
                    // 设置距离50 使加载更快更灵敏
            if (this.bscroll && pos.y <= this.bscroll.maxScrollY + 50) {
                this.pullUpEvent();
            }
        });
    });
    
    private async pullUpEvent() {
        if (this.ismore) {
            return;
        }
        const res = await msg.get({ offsetTime: this.offsetTime });
        this.list = this.list.concat(res.data.prays);
        if (res.data.prays.length) {
            this.offsetTime = res.data.prays[res.data.prays.length - 1].receiveTime;
        } else {
                    // 没有更多了
            this.ismore = true;
        }
        this.$nextTick(() => {
                    //刷新滑动
            this.bscroll?.refresh();
        });
    }
    
    踩坑:安卓手机,在数据较多情况下,滑动渲染慢

    解决办法:useTransition此参数设置为false,不要用此动画属性

    3.样式修改

    /deep/.bscroll-indicator {
        background: #ffecba !important;
        border: none !important;
    }
    /deep/.bscroll-vertical-scrollbar {
        width: 6px !important;
    }
    

    相关文章

      网友评论

          本文标题:better-scroll滑动插件使用,上拉加载

          本文链接:https://www.haomeiwen.com/subject/hhihtrtx.html