如何将Vue指令改写为支持滚动加载和监听的长尾词功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计546个文字,预计阅读时间需要3分钟。
突然有人问起Vue如何做滚动监听,既然你这么自信地提出了问题,我很乐意详细地告诉你。以下是一些基本的步骤和示例:
(武藏 + 小次郎)指示你可以非常出色地完成这件事。以下以Element UI的`el-select`组件为例:
javascript// directives.jsexport default { // +v-loadmore install(Vue) { Vue.directive('loadmore', { bind(el, binding) { const callback=binding.value; const selector=binding.arg || 'scroll'; const options=binding.modifiers;
const handleScroll=()=> { const target=el.querySelector(selector); if (target) { const scrollTop=target.scrollTop; const scrollHeight=target.scrollHeight; const clientHeight=target.clientHeight; if (scrollTop + clientHeight >=scrollHeight - options.threshold || options.always) { callback(); } } };
target.addEventListener('scroll', handleScroll); el.__loadmore__=handleScroll; }, unbind(el) { const handleScroll=el.__loadmore__; if (handleScroll) { const target=el.querySelector('scroll'); target.removeEventListener('scroll', handleScroll); } } }); }};
然后在Vue组件中使用:
vue
这样,当滚动到`el-select`组件的底部时,就会触发`loadMore`方法,从而实现滚动监听加载更多数据的功能。
突然有个人问起vue如何做滚动监听?
既然你诚心诚意的发问了, 我就大发慈悲的告诉你.(武藏 & 小次郎)
指令可以很好的做这件事情, 下面以element-select举例:
directives.js
// v-loadmore: 用于在element-ui的select下拉框加上滚动到底事件监听 Vue.directive('loadmore', { bind(el, binding) { // 获取element-ui定义好的scroll盒子 const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap'); SELECTWRAP_DOM.addEventListener('scroll', function() { /* * scrollHeight 获取元素内容高度(只读) * scrollTop 获取或者设置元素的偏移值,常用于, 计算滚动条的位置, 当一个元素的容器没有产生垂直方向的滚动条, 那它的scrollTop的值默认为0. * clientHeight 读取元素的可见高度(只读) * 如果元素滚动到底, 下面等式返回true, 没有则返回false: * ele.scrollHeight - ele.scrollTop === ele.clientHeight; */ const CONDITION = this.scrollHeight - this.scrollTop <= this.clientHeight; if(CONDITION) { binding.value(); } }); } })
组件中:
<template> <el-select v-model="selectValue" v-loadmore="loadMore"> <el-option v-for="item in options" :key="item.id" :label="item.accountName" :value="item.id"> </el-option> </el-select> </template> // methods loadMore() { // 这里可以做你想做的任何事 到底执行 },
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。
本文共计546个文字,预计阅读时间需要3分钟。
突然有人问起Vue如何做滚动监听,既然你这么自信地提出了问题,我很乐意详细地告诉你。以下是一些基本的步骤和示例:
(武藏 + 小次郎)指示你可以非常出色地完成这件事。以下以Element UI的`el-select`组件为例:
javascript// directives.jsexport default { // +v-loadmore install(Vue) { Vue.directive('loadmore', { bind(el, binding) { const callback=binding.value; const selector=binding.arg || 'scroll'; const options=binding.modifiers;
const handleScroll=()=> { const target=el.querySelector(selector); if (target) { const scrollTop=target.scrollTop; const scrollHeight=target.scrollHeight; const clientHeight=target.clientHeight; if (scrollTop + clientHeight >=scrollHeight - options.threshold || options.always) { callback(); } } };
target.addEventListener('scroll', handleScroll); el.__loadmore__=handleScroll; }, unbind(el) { const handleScroll=el.__loadmore__; if (handleScroll) { const target=el.querySelector('scroll'); target.removeEventListener('scroll', handleScroll); } } }); }};
然后在Vue组件中使用:
vue
这样,当滚动到`el-select`组件的底部时,就会触发`loadMore`方法,从而实现滚动监听加载更多数据的功能。
突然有个人问起vue如何做滚动监听?
既然你诚心诚意的发问了, 我就大发慈悲的告诉你.(武藏 & 小次郎)
指令可以很好的做这件事情, 下面以element-select举例:
directives.js
// v-loadmore: 用于在element-ui的select下拉框加上滚动到底事件监听 Vue.directive('loadmore', { bind(el, binding) { // 获取element-ui定义好的scroll盒子 const SELECTWRAP_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap'); SELECTWRAP_DOM.addEventListener('scroll', function() { /* * scrollHeight 获取元素内容高度(只读) * scrollTop 获取或者设置元素的偏移值,常用于, 计算滚动条的位置, 当一个元素的容器没有产生垂直方向的滚动条, 那它的scrollTop的值默认为0. * clientHeight 读取元素的可见高度(只读) * 如果元素滚动到底, 下面等式返回true, 没有则返回false: * ele.scrollHeight - ele.scrollTop === ele.clientHeight; */ const CONDITION = this.scrollHeight - this.scrollTop <= this.clientHeight; if(CONDITION) { binding.value(); } }); } })
组件中:
<template> <el-select v-model="selectValue" v-loadmore="loadMore"> <el-option v-for="item in options" :key="item.id" :label="item.accountName" :value="item.id"> </el-option> </el-select> </template> // methods loadMore() { // 这里可以做你想做的任何事 到底执行 },
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

