在element-ui的select下拉框加上滚动加载


Posted in Javascript onApril 18, 2019

 在项目中,我们需要运用到很多来自后端返回的数据。有时是上百条,有时甚至上千条。如果加上后端的多表查询或者数据量过大,这就导致在前端的显示就会及其慢,特别是在网络不好的时候更是如此。

自然,后端就做了一项非常“漂亮”的交互体验数据——分页

这不分页还好,一分页对超过10条数据之后的本来也不多,就20条,偏偏还得做个分页器。(假设为10条)

此时,如果能够像购物商城那样拖拽到底部自动加载新数据就好了。

于是《在element-ui的select下拉框加上滚动加载》诞生了。

这里通过自定义封装vue指令进行封装。(什么是指令:官方指令叫v-on,v-model)

以下以element-ui中的select为例:

 在main.js同级别文件中添加directives.js:

// directives.js

import Vue from 'vue'
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 () {
   
   const CONDITION = this.scrollHeight - this.scrollTop <= this.clientHeight
   if (CONDITION) {
    binding.value()
   }
  })
 }
})
  • v-loadmore: 用于在element-ui的select下拉框加上滚动到底事件监听
  • scrollHeight 获取元素内容高度(只读)
  • scrollTop 获取或者设置元素的偏移值,常用于, 计算滚动条的位置, 当一个元素的容器没有产生垂直方向的滚动条, 那它的scrollTop的值默认为0.
  • clientHeight 读取元素的可见高度(只读)

如果元素滚动到底, 下面等式返回true, 没有则返回false

scrollHeight - scrollTop === clientHeight

这里运用到了滚动偏移来做监听来处理,这与聊天对话框中默认下拉到底部的原理是大同小异的,后续我会有专门的文章进行讲解。

// main.js
// 注册滚动条加载触发事件v-loadmore绑定
import directives from './directives'
Vue.use(directives)

然后在组件中使用

<!-- vue -->
<el-select
 v-model="chatmode"
 placeholder="聊天模式"
 size="mini"
 v-loadmore="loadMore">
 <el-option
  v-for="item in chatmodes"
  :key="item.value"
  :label="item.qa_name"
  :value="item.qa_code"
  :disabled="item.disabled">
 </el-option>
</el-select>
<script>
export default {
 methods: {
  loadMore () {
   // 这里写入要触发的方法
  }
 }
}
</script>

总结

以上所述是小编给大家介绍的在element-ui的select下拉框加上滚动加载,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JavaScript 撑出页面文字换行
Jun 15 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
Jun 27 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
Dec 30 Javascript
javascript的 {} 语句块详解
Feb 27 Javascript
js将json格式的对象拼接成复杂的url参数方法
May 25 Javascript
微信小程序 本地存储及登录页面处理实例详解
Jan 11 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
May 18 Javascript
微信小程序时间控件picker view使用详解
Dec 28 Javascript
vue中引入mxGraph的步骤详解
May 17 Javascript
react native 仿微信聊天室实例代码
Sep 17 Javascript
浅谈Vue组件单元测试究竟测试什么
Feb 05 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
Aug 11 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
Apr 17 #Javascript
vue模式history下在iis中配置流程
Apr 17 #Javascript
详解Vue 全局变量,局部变量
Apr 17 #Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
Apr 17 #Javascript
Angular Excel 导入与导出的实现代码
Apr 17 #Javascript
详解Vue路由自动注入实践
Apr 17 #Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
Apr 17 #Javascript
You might like
php session 错误
2009/05/21 PHP
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
网页自动跳转代码收集
2009/09/27 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
学习vue.js计算属性
2016/12/03 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
python批量下载图片的三种方法
2013/04/22 Python
python实现的登录和操作开心网脚本分享
2014/07/09 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
大学生护理专业自荐信
2013/10/03 职场文书
外语系毕业生自荐信范文
2013/12/16 职场文书
中学生获奖感言
2014/02/04 职场文书
毕业晚会主持词
2014/03/24 职场文书
场地使用证明模板
2014/10/25 职场文书
工程部文员岗位职责
2015/02/04 职场文书
行政处罚事先告知书
2015/07/01 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
2015年国庆节寄语
2015/08/17 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL