vue开发(三)vue-scroller实现下拉刷新,上拉加载笔记(包括吸顶效果失效的问题)

项目中要实现下拉刷新,上拉加载,首先想到了vue-scroller。
npm网址:vue-scroller
简单记录一下自己的使用过程,以备不时之需。

  1. 安装依赖:
npm install vue-scroller -D
  1. 引入
import Vue from 'vue'
import VueScroller from 'vue-scroller'
Vue.use(VueScroller)
  1. html:
<template>
   <div class="content">
	   <!-- 注意使用的是scroller标签 -->
      <scroller :on-refresh="refresh" 
      			:on-infinite="infinite"
      		    ref="my_scroller">
        <index-income ref="income" 
        			  @finish-refresh="finishRefresh"
        			  @finish-infinite="finishInfinite"
        			  ></index-income>
      </scroller>
  </div>
</template>
  1. methods:
methods: {
    /**
     * 下拉刷新
     */
    refresh () {
      console.log("refresh");
      this.$refs.income.ajaxDay()
    },
    /**
     * 结束下拉刷新(因为我的数据请求在子组件中完成,利用父子通信调用结束刷新事件)
     */
    finishRefresh () {
      console.log('refresh over')
      this.$refs.my_scroller.finishPullToRefresh()
    },
     /**
     * 上拉加载
     */
    infinite () {
      console.log("infinite ");
      this.$refs.income.ajaxDay()
    },
    /**
     * 结束上拉加载(因为我的数据请求在子组件中完成,利用父子通信调用结束加载事件)
     */
    finishInfinite () {
      console.log('infinite over')
      this.$refs.my_scroller.finishInfinite()
    },
  },
  1. 补充:使用vue scroller后用原生的监听滚动失效
    页面中原有的吸顶效果是使用监听滚动实现的,但是使用vue scroller后就失效了
    问题代码:
mounted () {
  window.addEventListener('scroll', this.handleScroll, true)
},
methods: {
	if (this) {
        let scrollDom = document.getElementsByClassName('content')[0];
        if (!scrollDom) return;
        this.scrollTop = scrollDom.scrollTop
        if (this.scrollTop > 100) {
          this.searchBarFixed = true
        } else {
          this.searchBarFixed = false
        }
      }
}

解释:一个是浏览器内核控制的滚动,一个是通过transform来实现位移的滚动
解决办法:操作dom,通过计时器监听transform的变化

mounted () {
    /* 受vuescroller影响,不能直接使用监听事件吸顶效果,用了非常麻烦的办法解决了 */
    let _this = this
    this.timer = setInterval(() => {
      let dom = document.getElementsByClassName('_v-content')[0]
      let style = window.getComputedStyle(dom, null)
      let arr = style.transform.split(',')
      let str = arr.pop()
      let top = str.slice(0, str.length - 1)
      if (top < -100) {
        _this.searchBarFixed = true
      } else {
        _this.searchBarFixed = false
      }
    }, 200)
  },
  beforeDestroy () {
    clearInterval(this.timer)
  }

6.上边的方案虽然能实现效果,但是很麻烦,如果有什么好的办法再来补充
7.还发现一个问题,用了vuescroll后vux的左右滑动的组件都失灵了,都不能滑动了,项目紧急,暂时没找到解决办法。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vue-virtual-scroller是一个用于Vue.js的虚拟滚动组件,它可以实现高性能的长列表渲染。下面是使用vue-virtual-scroller实现加载的步骤: 1. 首先,安装vue-virtual-scroller依赖: ```shell npm install vue-virtual-scroller -d ``` 2. 在你的Vue组件中引入vue-virtual-scroller: ```javascript import { RecycleScroller } from 'vue-virtual-scroller'; import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'; export default { components: { RecycleScroller }, // ... } ``` 3. 在模板中使用vue-virtual-scroller组件,并设置相应的属性和事件: ```html <template> <div class="wrapper"> <recycle-scroller :items="items" :item-size="50" :min-item-size="50" :max-item-size="50" :buffer="10" :page-mode="true" @load="loadMore" > <template slot-scope="props"> <!-- 渲染每个列表项的内容 --> <div class="item">{{ props.item }}</div> </template> </recycle-scroller> </div> </template> ``` 4. 在Vue组件的data中定义items数组,并在created钩子函数中初始化items: ```javascript export default { data() { return { items: [] }; }, created() { this.initItems(); }, methods: { initItems() { // 初始化items数组,可以从后端获取数据并赋值给items // 示例:假设从后端获取了10条数据 this.items = Array.from({ length: 10 }, (_, index) => `Item ${index + 1}`); }, loadMore() { // 加载更多数据的逻辑 // 示例:假设每次加载5条数据 const startIndex = this.items.length; const endIndex = startIndex + 5; const newItems = Array.from({ length: 5 }, (_, index) => `Item ${index + startIndex + 1}`); this.items = [...this.items, ...newItems]; } } } ``` 5. 根据你的需求,可以自定义样式来美化滚动区域。 以上是使用vue-virtual-scroller实现加载的基本步骤。你可以根据自己的具体需求进行进一步的定制和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值