vue-scroller

效果:下拉刷新,上拉分页加载更多数据
在这里插入图片描述

首先在命令行进行npm||cnpm下载

cnpm install vue-scroller -D
-D:就是 --save -dev

然后在你想要用scrolle的那个页面里将咱们刚才下载的东西引入

 import Vue from 'vue'
  import VueScroller from 'vue-scroller'
  Vue.use(VueScroller)



  //网络请求
import Axios from 'axios'
代码ScrollerOne.vue:

<template>
  <div class="container">
    <scroller :on-refresh="refresh" :on-infinite="infinite" ref="myscroller">
      <ul>
        <li v-for="(item,i) in arr" :key="i">
          <div v-if="true" class="itemStyle">111</div>
        </li>
      </ul>
 
    </scroller>
 
  </div>

</template>
 
<script>
  import Axios from 'axios'
 
  export default {
    name: "ScrollerOne",
    data() {
      return {
        noDate: false,//这是一个判断是否加载的开关
        arr: [],
        showPage: 1,
        pageSize: 4,
      }
    },
    mounted() {
      this.getData();
    },
    methods: {
      getData() {
        let that = this;
        // Axios.get('http://gank.io/api/data/%E7%A6%8F%E5%88%A9/5/1').then((response) => {
        Axios.get('http://gank.io/api/data/%E7%A6%8F%E5%88%A9/' + that.pageSize + '/' + that.showPage).then((response) => {
          console.log(response.data)
          let showPage = that.showPage
          //测试设置第3页是最后一页,展示效果
          if (showPage === 2) {
            that.noDate = true
          } else {
            that.noDate = false
          }
 
          if (showPage == 1) {
            that.arr = response.data.results;
            if (that.arr.length==0){
              // 列表数据为空的时候
              that.$refs.myscroller.finishInfinite(true);//这个方法是不让它加载了,显示“没有更多数据”,要不然会一直转圈圈
 
            }
          } else {
            that.arr = that.arr.concat(response.data.results)
          }
          console.log(that.arr)
        }).catch((error) => {
          console.log(error)
          //没网的时候,或者接口调用异常的时候
          that.$refs.myscroller.finishInfinite(true);//这个方法是不让它加载了,显示“没有更多数据”,要不然会一直转圈圈
        })
      },
      // 下拉刷新
      refresh() {
        let that = this
        that.showPage = 1//重置页数刷新每次页数都是第一页
        that.noDate = false//重置数据判断
        setTimeout(function () {
          that.getData();
          that.$refs.myscroller.finishPullToRefresh();//刷新完毕关闭刷新的转圈圈
        }.bind(this), 1700)
      },
      // 上拉加载
      infinite(done) {
        let that = this;
        if (!that.noDate) {
          setTimeout(() => {
            that.showPage++;//下拉一次页数+1
            that.getData();
            done()//进行下一次加载操作
          }, 1500)
        } else {
          that.$refs.myscroller.finishInfinite(true);//这个方法是不让它加载了,显示“没有更多数据”,要不然会一直转圈圈
        }
      },
    },
 
  }
</script>

注意App.vue重置样式:

<script>
  export default {
    name: 'App',
  }
</script>
<style>
  body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, legend, input, textarea, button, p, blockquote, th, td{margin: 0;padding: 0;}
  body {padding:0;margin:0;text-align:center;color:#333;font-size:14px;font-family:"宋体", arial;}
  li{list-style-type:none;}
  a{text-decoration: none;}
  img,input{border:none;vertical-align:middle;}
</style>

原文:https://blog.youkuaiyun.com/dianziagen/article/details/94393170

### 关于 `RecycleScroller` 组件 #### 安装依赖库 为了使用 `vue-virtual-scroller` 及其组件如 `RecycleScroller`,需先安装该包。可以通过 npm 或 yarn 来完成这一步操作[^1]。 ```bash npm install vue-virtual-scroller --save # 或者 yarn add vue-virtual-scroller ``` #### 导入并注册 `RecycleScroller` 在 Vue 文件中导入所需的模块,并将其作为全局或局部组件来注册: ```javascript import { RecycleScroller } from 'vue-virtual-scroller' // 确保样式也被引入 import 'vue-virtual-scroller/dist/vue-virtual-scroller.css' export default { components: { RecycleScroller, }, } ``` #### 基本属性配置 `<recycle-scroller>` 标签内可以设置多个重要参数以控制滚动行为和性能优化效果。下面是一些常用的选项说明[^2]: - **key-field**: 数据项唯一标识字段名,默认为 id; - **items-per-page**: 页面显示条目数量; - **item-size**: 单个列表项高度/宽度(取决于方向),单位 px; - **min-item-size**: 设置最小尺寸用于自适应布局计算; - **max-item-size**: 同上,但是最大值; #### 实际应用案例展示 这里给出一段简单的 HTML 结构配合 JavaScript 的例子,用来呈现如何创建一个垂直方向上的虚拟化列表视图[^3]: ```html <div style="height: 400px;"> <recycle-scroller class="scroller" :items="bigList" :item-size="30" key-field="id" v-slot="{ item }"> <div>{{ item.label }}</div> </recycle-scroller> </div> <script> new Vue({ el: '#app', data() { return { bigList: Array.from({ length: 1e6 }, (_, index) => ({ id: index, label: `Item ${index}` })) } } }) </script> ``` 上述代码片段展示了怎样通过定义 `v-slot` 插槽来自定义每一行的内容渲染逻辑,同时利用数据绑定特性传递必要的上下文给子组件实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值