vue自定义指令触底加载

当我们是用某个div盒子滚动时候,又想在即将触底加载数据列表时通常需要监听滚动事件并计算是否滚动到底部,进行请求下一页数据。
指令代码如下:

template绑定指令

<template>
	 <!-- v-scroll使用指令,传递需要触发调用的函数getList   注意这里div要是一个滚动区域。 -->
	<div v-scroll="getList"></div>

</template>

js定义vue指令

//vue单页面自定义指令,定义scroll指令 
directives: {
    scroll: {
      bind(el, binding) {
        const SELECTWRAP_DOM = el;
        SELECTWRAP_DOM.addEventListener("scroll", function() {
          const condition =
          	// -30是为了即将触底就开始获取数据。
            SELECTWRAP_DOM.scrollHeight - 30 - SELECTWRAP_DOM.scrollTop <=
            SELECTWRAP_DOM.clientHeight;

          if (condition) {
          	//这里做节流处理,不然在滚动的过程中会频繁触发触底加载下一页。
            throttle(binding.value);
          }
        });

		//节流api
        let timer;
        let flag;
        /**
         * 节流原理:在一定时间内,只能触发一次
         *
         * @param {Function} func 要执行的回调函数
         * @param {Number} wait 延时的时间
         * @param {Boolean} immediate 是否立即执行
         * @return null
         */
        function throttle(func, wait = 500, immediate = true) {
          if (immediate) {
            if (!flag) {
              flag = true;
              // 如果是立即执行,则在wait毫秒内开始时执行
              typeof func === "function" && func();
              timer = setTimeout(() => {
                flag = false;
              }, wait);
            }
          } else if (!flag) {
            flag = true;
            // 如果是非立即执行,则在wait毫秒内的结束处执行
            timer = setTimeout(() => {
              flag = false;
              typeof func === "function" && func();
            }, wait);
          }
        }
      },
    },
  },
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值