vue.js移动端app之上拉加载以及下拉刷新实战

对于vue.js移动端app的上拉加载和下拉刷新的实现,我们可以使用第三方插件better-scroll来实现。better-scroll是一款基于原生js的iscroll的重写版本,在实现上提供了更好的性能和更友好的api。

下面是vue.js移动端app之上拉加载以及下拉刷新的完整攻略:

安装better-scroll

在使用better-scroll之前,需要先安装它。在命令行中执行以下命令:

npm install better-scroll -S

下拉刷新

下拉刷新的实现可以分成以下几步:

1. 设计页面结构

假设我们有一个数据列表需要下拉刷新,那么首先需要在页面中设计好结构。一般情况下,下拉刷新的容器高度固定,而数据列表会根据内容自动撑高。

<template>
  <div class="wrapper">
    <div class="list">
      // 数据列表,根据实际情况进行适当修改
    </div>
    <div class="pulldown">
      <div class="loading" ref="pullup">下拉刷新</div>
    </div>
  </div>
</template>

<style>
  .wrapper {
    height: 100%;
    overflow: hidden;
  }
  .list {
    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 50px; // 下拉刷新容器的高度
    overflow: auto;
  }
  .pulldown {
    position: absolute;
    left: 0;
    bottom: 0;
    right: 0;
    height: 50px;
    line-height: 50px;
    text-align: center;
    font-size: 14px;
    color: #999;
  }
  .loading {
    display: inline-block;
    transition: all .2s;
    transform: rotate(0deg);
    margin-right: 10px;
  }
  .loading.rotate {
    transform: rotate(180deg);
  }
</style>

2. 初始化better-scroll

在vue的mounted生命周期中初始化better-scroll。在初始化时,需要配置下拉刷新的参数:

import BScroll from 'better-scroll'

export default {
  data() {
    return {
      bscroll: null, // better-scroll实例
      loaderText: '下拉可以刷新',
      pullLoader: {
        threshold: 80, // 在pullDownRefresh阈值范围内的距离为下拉阈值
        stop: 40 // 最终停留的位置
      }
    }
  },
  mounted() {
    this.initScroll()
  },
  methods: {
    initScroll() {
      const wrapper = this.$refs.wrapper
      const pullup = this.$refs.pullup
      const self = this
      this.bscroll = new BScroll(wrapper, {
        pullDownRefresh: {
          threshold: this.pullLoader.threshold,
          stop: this.pullLoader.stop
        },
        click: true
      })

      this.bscroll.on('pullingDown', function () {
        // 刷新动作
        self.refreshList()
        setTimeout(() => {
          // 刷新完成后重置better-scroll
          self.bscroll.finishPullDown()
          self.bscroll.refresh()
          self.loaderText = '下拉可以刷新'
        }, 1000)
      })

      this.bscroll.on('scroll', function (pos) {
        // 根据下拉距离展示loading样式
        if (pos.y > (self.pullLoader.threshold + self.pullLoader.stop)) {
          self.loaderText = '松开立即刷新'
          pullup.classList.add('rotate')
        } else {
          self.loaderText = '下拉可以刷新'
          pullup.classList.remove('rotate')
        }
      })
    }
  }
}

3. 编写下拉刷新方法

// 在methods中定义refreshList方法用来下拉刷新
methods: {
  refreshList() {
    // 执行下拉刷新逻辑
    console.log('refresh list')
  }
}

上拉加载

上拉加载的实现和下拉刷新类似,也分为以下三步:

1. 设计页面结构

上拉加载的容器放在数据列表的下方,当达到一定的距离时,触发上拉加载事件。

<template>
  <div class="wrapper">
    <div class="list">
      // 数据列表,根据实际情况进行适当修改
    </div>
    <div class="pullup" ref="pullup">
      <div class="loading">loading...</div>
    </div>
  </div>
</template>

<style>
  .wrapper {
    height: 100%;
    overflow: hidden;
  }
  .list {
    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 50px; // 上拉加载容器的高度
    overflow: auto;
  }
  .pullup {
    position: absolute;
    left: 0;
    bottom: 0;
    right: 0;
    height: 50px;
    line-height: 50px;
    text-align: center;
    font-size: 14px;
    color: #999;
  }
  .loading {
    display: inline-block;
    transition: all .2s;
    transform: rotate(0deg);
    margin-right: 10px;
  }
</style>

2. 初始化better-scroll

和下拉刷新一样,在vue的mounted生命周期中初始化better-scroll。在初始化时需要配置上拉加载的参数:

export default {
  data() {
    return {
      bscroll: null, // better-scroll实例
      loaderText: '正在加载...',
      pushLoader: {
        threshold: 110 // 在pushLoadMore阈值范围内的距离为下拉阈值
      }
    }
  },
  mounted() {
    this.initScroll()
  },
  methods: {
    initScroll() {
      const wrapper = this.$refs.wrapper
      const pullup = this.$refs.pullup
      const self = this
      this.bscroll = new BScroll(wrapper, {
        pullDownRefresh: true, // 标记为上拉加载
        click: true,
        pullUpLoad: {
          threshold: this.pushLoader.threshold
        }
      })

      this.bscroll.on('pullingUp', function () {
        // 加载更多
        self.loadMore()
      })

      this.bscroll.on('scroll', function (pos) {
        // 根据下拉距离展示loading样式
        if (pos.y < (pos.maxScrollY - self.pushLoader.threshold)) {
          self.loaderText = '释放加载更多...'
        } else {
          self.loaderText = '正在加载...'
        }
      })
    }
  }
}

3. 编写上拉加载方法

// 在methods中定义loadMore方法用来上拉加载
methods: {
  loadMore() {
    // 执行上拉加载逻辑
    console.log('load more')
  }
}

以上就是vue.js移动端app之上拉加载以及下拉刷新的实现。其中插件better-scroll提供了更好的性能和api,建议大家多加使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue.js移动端app之上拉加载以及下拉刷新实战 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript对象引用与赋值实例详解

    JavaScript对象引用与赋值实例详解 在JavaScript中,有很多时候我们会需要操作对象(Object)。对象是JavaScript中最基本的数据结构之一,而且在JavaScript中,对象是一种引用类型的数据。 这就引出了一个问题,即JavaScript中对象引用和赋值的问题。该问题会在实际的开发中经常遇到,也会给我们带来一些困惑和不好的体验。本…

    JavaScript 2023年5月27日
    00
  • JS Array.slice 截取数组的实现方法

    JS Array.slice截取数组常用于从数组中获取一部分数组元素。以下是完整的攻略,包括:定义、参数、返回值、示例说明、应用场景等。 定义 Array.slice是数组的一个方法,用于截取数组的一部分,返回截取后的新数组,而不会修改原数组。 语法 array.slice(start, end) 参数 start:要截取的开始下标,从0开始。 end:要截…

    JavaScript 2023年5月27日
    00
  • js格式化时间小结

    JS 格式化时间小结 格式化时间是前端开发经常会遇到的问题之一,不同场景下需要展现的时间格式也会有所不同。在JavaScript中,我们可以使用内置的Date对象和一些方法来格式化时间。 获取当前时间 使用内置的Date对象可以获得当前时间。比如以下代码: const now = new Date(); 格式化时间 toLocaleDateString() …

    JavaScript 2023年5月27日
    00
  • javascript 操作cookies详解及实例

    JavaScript操作Cookies详解及实例 在Web应用程序中,Cookie是一种最常用的技术,可用于识别用户并保存用户的状态信息。在这篇文章中,我们将重点讲解JavaScript如何操作Cookie。 什么是Cookie Cookie是一种保存在客户端计算机上的小型文本文件。Cookie由名称、值、过期时间、路径、域等多个属性组成。它们可以帮助我们识…

    JavaScript 2023年6月11日
    00
  • 用js读写cookie的简单方法(推荐)

    以下是详细讲解“用js读写cookie的简单方法(推荐)”的完整攻略: 1. 什么是cookie 1.1 定义 cookie 是一种在客户端存储数据的小文件。在 HTTP 协议中,Web 服务器可以向客户端发送一个 Set-Cookie 的响应头,来告诉客户端保存这个 cookie。之后客户端每次请求响应都会带上这个 cookie,用来告诉服务器用户是谁。 …

    JavaScript 2023年6月11日
    00
  • js字符串转换为对象格式的三种方法总结

    下面详细讲解一下“js字符串转换为对象格式的三种方法总结”的完整攻略。 标题 js字符串转换为对象格式的三种方法总结 正文 在日常开发中,我们经常需要将字符串转换成对象格式。下面总结了三种常用的方法: 方法一:eval() eval()是一种将字符串解析成js代码并运行的方法。通过将字符串转成函数执行,在函数内部给一个对象赋值并将它的引用返回。 示例代码: …

    JavaScript 2023年5月27日
    00
  • 整理JavaScript对DOM中各种类型的元素的常用操作

    整理JavaScript对DOM中各种类型的元素的常用操作攻略 DOM是文档对象模型(Document Object Model)的缩写,JavaScript通过DOM对HTML页面中的各种元素进行操作,从而实现动态网页效果。在DOM中,各种类型的元素均可以通过JavaScript进行操作。下面,我们将详细讲解如何使用JavaScript对DOM中各种类型的…

    JavaScript 2023年6月10日
    00
  • 深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解

    深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解 什么是依赖倒置原则DIP? 依赖倒置原则(Dependency Inversion Principle,DIP)是S.O.L.I.D原则中的一个重要原则。该原则的核心思想是:高层模块不应该依赖于低层模块,二者都应该依赖于抽象接口。同时,抽象接口不应该依赖于具体实现,…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部