vue 自定义指令上拉加载更多

项目是用ant-design-vue 写的,在需求中,要求表格有上拉加载更多的的分页效果。

实现其效果需要用到vue自定义指令。由于我们这个指令在很多个组件都使用到了。做成公有指令。

首先,创建一个directive的文件夹,用于管理项目中所有的指令js。

在directive文件夹下,创建一个上拉加载更多的loamore.js

/**
 * 加载更多数据的指令
 */
 export default {
	install(Vue) {
		Vue.mixin({
			directives: {
				loadmore: {
					bind(el, binding) {
						let bindTime;
						clearTimeout(bindTime)
						bindTime = window.setTimeout(function () {
							let selectWrap = el.querySelector(".ant-table-body");
							if (!selectWrap) selectWrap = el.querySelector(".el-table__body-wrapper");
							var lastScrollTop = 0;
							selectWrap.addEventListener("scroll", function () {
								// 触底或者触顶多少距离上限
								let offsetValue = 300;
									if (lastScrollTop != this.scrollTop) {
										lastScrollTop = this.scrollTop;
										// 计算距离
										const scrollDistance = this.scrollHeight - this.scrollTop - this.clientHeight;
										// 触底距离小于等于上限距离时,回调
										if (scrollDistance <= offsetValue) { // 上拉加载
											binding.value('down', this);
										}
									}
							}, false);
						}, 200);
					}
				}
			}
		});
	}
};

 引入这个指令,只需要在main.js中,写以下两行代码

//加载更多数据的指令
import loadMore from '@/directive/loadMore'
Vue.use(loadMore)

在组件中使用,我们这个指令,仅针对ant-design-vue中的table组件。

因此,在将私有指令绑定到table上就行

<a-table
          v-loadmore="loadMore"
          :columns="columns"
          :data-source="tableData"
          :pagination="false"
          :scroll="{y: 162 }"
          :row-key="(record, index) => record.id"
          class="scroll-box"
        ></a-table>

这个表格就有上拉加载更多的效果啦。

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue自定义指令中的防抖和节流是一种优化技巧,用于处理频繁触发的事件。防抖和节流可以减少事件触发的次数,从而提高性能和响应速度。 防抖指的是当事件触发后,等待一段时间后再执行回调函数。如果在等待期间又触发了同样的事件,则会重新计时。这个技巧适用于一些需要等待一段时间后才执行的操作,比如搜索框输入联想功能。通过防抖可以减少不必要的请求次数,提高用户体验。 节流则是指在一定时间间隔内,只执行一次回调函数。如果在间隔时间内有多次事件触发,则只会执行一次。这个技巧适用于一些需要限制频繁触发的操作,比如滚动加载数据。通过节流可以减少不必要的计算和渲染,提高页面性能。 在Vue中,可以通过自定义指令实现防抖和节流的功能。可以使用第三方库如Lodash来简化实现过程,也可以根据需求自己编写相关的代码逻辑。通过自定义指令,可以将防抖和节流的逻辑封装到指令中,并在需要的地方进行调用。 例如,可以定义一个防抖指令,在指令的inserted钩子函数中使用Lodash的防抖函数来实现防抖功能。在指令的unbind钩子函数中取消防抖。 ```javascript Vue.directive('debounce', { inserted: function(el, binding) { const delay = binding.value || 200; el.addEventListener('input', _.debounce(function() { // 执行相关操作 }, delay)); }, unbind: function(el) { el.removeEventListener('input'); } }); ``` 类似地,可以定义一个节流指令,在指令的inserted钩子函数中使用Lodash的节流函数来实现节流功能。在指令的unbind钩子函数中取消节流。 ```javascript Vue.directive('throttle', { inserted: function(el, binding) { const delay = binding.value || 200; el.addEventListener('scroll', _.throttle(function() { // 执行相关操作 }, delay)); }, unbind: function(el) { el.removeEventListener('scroll'); } }); ``` 通过使用自定义指令实现防抖和节流,可以更灵活地控制事件的触发频率,提高页面性能和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值