better-scroll做下拉刷新,上拉加载实例

vue使用better-scroll实现下拉刷新、上拉加载 主要为大家详细介绍了vue使用better-scroll实现下拉刷新、上拉加载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 立即下载
scroll.vue组件
<template>
  <div ref="wrapper" class="scroll-wrap">
    <div>
      <div v-if="pulldown" class="pulldown"
      :style="`margin-top:${dragTip.translate}px`">
        <div class="clear" v-if="dragTip.showLoding">
          <div class="fl"><img width="30" src="~common/js/loading9.svg"></div>
          <div class="fl lh30 ml10">{{dragTip.text}}</div>
        </div>
      </div>
      <slot></slot>
      <div v-if="pullup" class="pullup">
        <div class="clear"v-if="!isDone">
          <div class="fl"><img width="30" src="~common/js/loading10.svg"></div>
          <div class="fl lh30 ml10">加载中.....</div>
        </div>
        <div class="list-donetip" v-if="!isLoading && isDone">
            <slot name="doneTip">没有数据了</slot>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import BScroll from 'better-scroll'
export default {
  props:{
    probeType:{
      type:Number,
      default:1
    },
    /**
     * 点击列表是否派发click事件
     */
    click:{
      type:Boolean,
      default:false
    },
    /**
     * 是否开启横向滚动
     */
    scrollX:{
      type:Boolean,
      default:false
    },
    /**
     * 是否派发滚动事件
     */
    listenScroll:{
      type:Boolean,
      default:false
    },
    /**
     * 列表数据
     */
    data:{
      type:[Object,Array,String],
      default:null
    },
    /**
     * 是否派发滚动到底部的事件,用于上拉加载
     */
    pullup:{
      type:Boolean,
      default:false
    },
    /**
     * 是否派发顶部下拉的事件,用于下拉刷新
     */
    pulldown:{
      type:Boolean,
      default:false
    },
    /**
     * 是否派发列表滚动开始的事件
     */
    deforeScroll:{
      type:Boolean,
      default:false
    },
    /**
     * 当数据更新后,刷新scroll延时
     */
    refreshDelay:{
      type:Number,
      default:20
    }
  },
  data(){
    return{
      dragTip:{
        text:"下拉刷新",
        translate:-50,
        showLoding:false
      },
      isLoading: false,
      isDone: false,
    }
  },
  mounted(){
    setTimeout(() => {
      this._initScroll()
    },20)
  },
  methods:{
    _initScroll(){
      if(!this.$refs.wrapper){
        return
      }
      // better-scroll的初始化
      this.scroll = new BScroll(this.$refs.wrapper,{
        probeType:this.probeType,
        click:this.click,
        scrollX:this.scrollX
      })
      // 是否派发滚动事件
      if(this.listenScroll){
        let me = this
        this.scroll.on('scroll',(pos) => {
          if(this.listenScroll){
            me.$emit('scroll',pos)
          }
        })
      }
      // 是否派发滚动到底部事件,用于上拉加载
      if(this.pullup){
        this.scroll.on('scrollEnd',() => {
          if(this.scroll.y <= (this.scroll.maxScrollY + 50)){
            //所有数据加载完毕后
            this.$on('infinitescroll.loadedDone', () => {
                this.isLoading = false;
                this.isDone = true;
            });
            //单次请求数据加载完毕后
            this.$on('infinitescroll.finishLoad', (ret) => {
                this.isLoading = false;
            });
            //重新初始化
            this.$on('infinitescroll.reInit', () => {
                this.isLoading = false;
                this.isDone = false;
            });
            this.$emit('scrollToEnd')
          }
        })
      }
      // 是否派发顶部下拉事件,用于下拉刷新
      if(this.pulldown){
        this.scroll.on('scroll',(pos) => {
          //显示下拉刷新loding
          this.dragTip.showLoding = true
          //隐藏底部加载loding
          this.isLoading = false
          if(pos.y > 50){
            this.dragTip.text = "释放刷新"
          }
        })
        this.scroll.on('touchEnd',(pos) => {
          if(pos.y > 50){
            this.dragTip.translate = 0
            this.dragTip.text = "刷新中..."
            //重新初始化
            this.$on('pullrefresh.finishLoad', this.resetParams);
            this.$emit('pulldown',pos)
          }
        })
      }
      // 是否派发列表滚动开始的事件
      if(this.beforeScroll){
        this.scroll.on('beforeScrollStart',() => {
          this.$emit('beforeScroll')
        })
      }
    },
    resetParams(){
      setTimeout(() => {
        this.isLoading = false;
        this.isDone = false;
        this.dragTip = {
          text:"下拉刷新",
          translate:-50,
          showLoding:false
        }
      },600)
    },
    disable(){
      this.scroll && this.scroll.disable()  
    },
    enable(){
      this.scroll && this.scroll.enable()
    },
    refresh(){
      this.scroll && this.scroll.refresh()
    },
    scrollTo(){
      this.scroll && this.scroll.scrollTo.apply(this.scroll, arguments)
    },
    scrollToElement() {
      this.scroll && this.scroll.scrollToElement.apply(this.scroll, arguments) 
    }
  },
  watch:{
    data(){
      setTimeout(() => {
        this.refresh()
        new BScroll(this.$refs.wrapper,{
          probeType:this.probeType,
          click:this.click,
          scrollX:this.scrollX
        })
      },this.refreshDelay)
    }
  }
}
</script>

<style scoped lang="stylus" type="stylesheet/stylus">
.scroll-wrap
    height:100%
    overflow:hidden
/* 下拉刷新 */
.pulldown,.pullup
    width:100%
    height:50px
    position:relative
    div.clear
        padding:10px 0px
        font-size:.28rem
        position:absolute
        left:50%
        top:5px
        transform:translate(-50%,0)
.list-donetip
    text-align:center
    line-height:50px
    font-size:.28rem
</style>

home.vue 调用better-scroll组件

<template>
  <div class="ScrollBox">
    <scroll 
    ref="pullrefresh"
    :pullup="isShow"
    :pulldown="isShow"
    @pulldown="loadDemo"
    @scrollToEnd="loadup">
      <div v-for="item in list" class="lh40 pb30">
        <div class="clear">
          <div class="fl">{{item.title}}</div>
          <div class="fl">{{item.create_time}}</div>
        </div>
        <div>{{item.link}}</div>
      </div>
    </scroll>
  </div>
</template>

<script>
import Scroll from 'base/scroll/scroll'
import Slider from 'base/slider/slider'
import {notice} from 'common/js/getData'
export default {
  components:{Scroll,Slider},
  data () {
    return {
      isShow: true,
      list:[],
      page:1
    }
  },
  mounted(){
    this._getDataInfo(1)
  },
  methods:{
    loadDemo(){
      this.list = []
      //下拉刷新重新初始化
      this.$refs.pullrefresh.$emit('pullrefresh.finishLoad');
      this._getDataInfo(1)
    },
    loadup(){
      if(!this.page) return
      this.page ++ 
      //上拉加载重新初始化
      this.$refs.pullrefresh.$emit('infinitescroll.reInit');
      this._getDataInfo(this.page)
    },
    _getDataInfo(page){
      notice(page).then((res) => {
        if(res.list.length >= 10){
          this.list = [...this.list, ...res.list]
          //单次请求数据加载完毕后
          this.$refs.pullrefresh.$emit('infinitescroll.finishLoad');
        }else{
          //把page设置成false 数据已经加载完毕了 不用在加载了
          this.page = false
          //所有数据加载完毕后
          this.$refs.pullrefresh.$emit('infinitescroll.loadedDone');
        }
      })
    }
  }
}
</script>

<style scoped lang="stylus" type="stylesheet/stylus">
@import "~common/stylus/variable"
.ScrollBox
    width:100%
    position:fixed
    top:0px
    bottom:0px
</style>

样式有些粗糙  主要是做scroll组件里面的刷新和加载 

解构LOL数值平衡:从基础公式到实战决策的深层逻辑 本文深入解析了《英雄联盟》数值平衡的底层逻辑,从基础攻击力公式到经济系统设计,揭示了MOBA游戏背后的精密数学架构。通过实战案例展示护甲减伤、技能伤害建模等核心机制,探讨装备定价与战斗节奏的数值关联,帮助玩家理解版本更新中的平衡艺术。 阅读详情

相关推荐

SpringAi 通过大模型来实现调用自己的Api

摘要 本文介绍了如何利用Spring AI的Tools机制扩展大模型能力,实现业务系统集成。通过@Tool和@ToolParam注解定义工具方法,将订单查询和关闭功能暴露给大模型调用。关键实现包括:1)使用详细描述标注工具方法和参数;2)在ChatClient中注册工具服务;3)集成对话记忆保持上下文。该方法使AI具备操作业务系统的能力,形成"认知-决策-执行"闭环,大幅提升了模型在实际业务场景中的应用价值。

又要搬砖了 835

Vue 使用better-scroll 上拉刷新,下拉加载

当 better-scroll 遇见 Vue - 知乎 Vue中引入better-scroll - 简书 基于better-scroll实现移动端vue上拉加载下拉刷新 - 简书 better-scroll&vue实现上拉加载更多下拉刷新_inyiyi的博客-优快云博客_vue下拉加载更多 better-scroll.js文档_汇而不置的博客-优快云博客_better-scroll文档 <template> <div class="tabbar">...

林中明月间丶 1677

GD32F303串口DMA发送数据避坑指南:为什么你的发送函数会卡住?

本文深入解析GD32F303单片机串口DMA发送数据时常见的卡死问题,提供详细的避坑指南。从DMA传输完成中断时序、发送状态管理到双通道DMA的特别注意事项,全面剖析问题根源并给出解决方案,帮助开发者构建健壮的DMA发送机制。

weixin_27038245的博客 294

better-scroll库实现上拉加载下拉刷新

实现上拉加载下拉下拉刷新

weixin_47392228的博客 583

kettle9.0+ 连接Hadoop报错

kettle bug

x²+(y-√³x²)²=1的博客 1559

Visual Studio Code 打开java项目

在 Visual Studio Code 中打开并运行一个 Java 项目之前,你需要确保你已经完成了一些初始设置。

2674

VUE——BetterScroll实现下拉刷新上拉加载

BetterScroll是一款重点解决移动端(已支持PC)各种滚动场景需求的插件。它的核心是借鉴的 iscroll 的实现,它的 API 设计基本兼容 iscroll,在 iscroll 的基础上又扩展了一些特性以及做了一些性能优化。 BetterScroll 是使用纯 JavaScript 实现的,这意味着它是无依赖的。 BetterScroll官网: https://better-scroll.github.io/docs-v1/doc/zh-hans/特点:安装better-scroll有两种方式:

weixin_63215361的博客 1536

基于STM32的智能台灯PWM调光与人体感应融合设计

本文详细介绍了基于STM32单片机的智能台灯设计方案,重点讲解了PWM调光技术与人体感应模块的融合实现。通过STM32的高级定时器产生精准PWM信号控制LED亮度,结合红外传感器实现人来灯亮、人走灯灭的智能体验,同时集成光敏传感实现环境自适应调光,打造高效节能的智能照明解决方案。

threejs5artist的博客 822

vue之better-scroll上拉加载,下拉刷新

上拉加载pullUpLoad选项,用来配置上拉加载功能。当设置为 true 或者是一个 Object 的时候,可以开启上拉加载,可以配置离底部距离阈值(threshold)来决定开始加载的时机this.scroll = new this.$BScroll(this.$refs.middleWrapper, { click: true, scrollY: true, ...

mosowe 1万+

AI Agent开发第84课-paddleocr-vl全网唯一最全本地化布署教程

本文详解 PaddleOCR-VL 本地化布署全过程,指出为何在真实生产环境中 PaddleOCR-VL 更稳定、更易部署、更贴近工程落地。同时还会详细比较与 DeepSeek-OCR 的核心差异,为全网独家介绍paddleocr-vl的本地部署实战指南。

打造全国最全的AI Agent开发知识领域的博客 5966

重回童年的经典系列☀️| 【坦克大战3D版】游戏制作+解析

带你重回童年的经典系列——坦克大战3D版制作,感兴趣的可以看看呀~

努力前行,总会成为自己心中的那道光 5万+

better-scroll 实现下拉刷新、上拉加载的那些坑

简介 better-scroll 是一款近几年移动端常用的插件,重点解决移动端(已支持PC)各种滚动场景需求的插件。可以实现竖向滚动效果,也可以实现横向滚动的效果。它不仅可以做普通的滚动列表,还可以做轮播图、局部文字滚动、下拉刷新、上拉加载等等。 better-scroll 是基本原生JS 实现的,不依赖任何框架。它编译后的代码大小是63kb,压缩后是35kb,zip后仅有9kb,是一款非常轻量的...

蒲公英芽的博客 1万+

复合材料仿真PAM-COMPOSITE 全工艺案例实操参数模板

复合材料仿真PAM-COMPOSITE 全工艺案例实操参数模板

源代码杀手的博客 274

Vue中使用better-scroll插件实现移动端的上拉加载,下拉刷新。

Vue中使用better-scroll插件实现移动端的上拉加载,下拉刷新。

z12845464的博客 1616

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Vue之better-scroll

1.什么是better-scroll: better-scroll顾名思义就是滚动的意思,better-scroll 是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件。它的核心是借鉴的 iscroll 的实现。可以实现上拉加载、下拉刷新的效果。 原理: 当页面内容的高度超过视口高度的时候,会出现纵向滚动条;当页面内容的宽度超过视口宽度的时候,会出现横向滚动条。也就是当我们的视口展示...

jacksonnana的博客 385

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

better-scroll上拉加载和下拉刷新的一个简单写法

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable...

leixu1027的博客 456

如何实现上拉加载,下拉刷新?

下拉刷新和上拉加载这两种交互方式通常出现在移动端中本质上等同于PC网页中的分页,只是交互形式不同开源社区也有很多优秀的解决方案,如iscroll、better-scroll、pulltorefresh.js库等等这些第三方库使用起来非常便捷我们通过原生的方式实现一次上拉加载,下拉刷新,有助于对第三方库有更好的理解与使用。

林恒的博客 1391

vue上拉加载php,vue使用better-scroll实现下拉刷新、上拉加载

本文目的是为了实现列表的下拉刷新、上拉加载,所以选择了better-scroll这个库。用好这个库,需要理解下面说明必须包含两个大的div,外层和内层div外层div设置可视的大小(宽或者高)-有限制宽或高内层div,包裹整个可以滚动的部分内层div高度一定大于外层div的宽或高,才能滚动1、先开始写一个简单demo,最基本的代码架构template......css/*对外层div进行了高度上的...

weixin_36046580的博客 152

原生js如何实现上拉加载下拉刷新?

开源社区也有很多优秀的解决方案,如iscroll、better-scroll、pulltorefresh.js库等等。我们通过原生的方式实现一次上拉加载,下拉刷新,有助于对第三方库有更好的理解与使用。下拉刷新的本质是页面本身置于顶部时,用户下拉时需要触发的动作。最重要的是要理解在什么场景,什么时机下触发交互动作。本质上等同于PC网页中的分页,只是交互形式不同。上拉加载的本质是页面触底,或者快要触底时的动作。监听touchstart事件,记录初始的值。最后,就是监听touchend离开的事件。

weixin_66557048的博客 229

vue better-scroll

https://www.jianshu.com/p/a9262b6a5156 官网http://ustbhuangyi.github.io/better-scroll/doc/ npm install better-scroll --save import BScroll from 'better-scroll' <div class="wrapper"> <!-- better-scroll 只处理容器(wrapper)的第一个子元素(content)的滚动,其它的元素都会被忽略

a432qbc的博客 247

关于better-scroll的使用

better-scroll、页面滚动

qq_42931285的博客 499

面试之如何实现上拉加载,下拉刷新?

面试之如何实现上拉加载,下拉刷新?面试官:如何实现上拉加载,下拉刷新?一、前言二、实现原理上拉加载下拉刷新三、案例小结参考文献 面试官:如何实现上拉加载,下拉刷新? 一、前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页,只是交互形式不同 开源社区也有很多优秀的解决方案,如iscroll、better-scroll、pulltorefresh.js库等等 这些第三方库使用起来非常便捷 我们通过原生的方式实现一次上拉加载,下拉刷新,有助于对第三方库有更好的理解与使用 二、

牛先森家的博客 596

betterscroll的使用2

文章目录HTML结构实例化上拉下拉插件,通过use来注册插件监听下拉刷新 上拉加载更多注意点: HTML结构 <div id="position-wrapper"> <div> <p class="refresh">下拉刷新</p > <div class="position-list"> <!--列表内容--> </div> <p clas

qq_42451776的博客 150

better-scroll 详解

非凡主力

爱睡的虫虫 3万+

上拉加载下拉刷新(better-scroll)

前端实现一个上拉加载,下拉刷新,并且滑动一定的位置能够实现回到顶部的功能。这个在移动端上来说是一个很常见的功能。之前有看到有人用bette-scroll库来实现这个功能。 最基本的初始化代码如下: import BScroll from 'better-scroll' let wrapper = document.querySelector('.wrapper') let scroll = new...

u013262823的博客 5821

面试官:JavaScript如何实现上拉加载,下拉刷新?

一、前言下拉刷新和上拉加载这两种交互方式通常出现在移动端中本质上等同于PC网页中的分页,只是交互形式不同开源社区也有很多优秀的解决方案,如iscroll、better-scroll、pul...

weixin_44475093的博客 4782
下一篇: 前端和ios和android交互 前端调用原生app方法 原生app调用前端方法
userRobee
博客等级 码龄9年 3粉丝 7原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值