在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实现的动态添加表单元素input,button等(appendChild)
Nov 24 Javascript
保证JavaScript和Asp、Php等后端程序间传值编码统一
Apr 17 Javascript
学习并汇集javascript匿名函数
Nov 25 Javascript
Node.js模块加载详解
Aug 16 Javascript
javascript记录文本框内文字个数检测文字个数变化
Oct 14 Javascript
基于javascript的COOkie的操作实现只能点一次
Dec 26 Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 Javascript
利用 spin.js 生成等待效果(js 等待效果)
Jun 25 Javascript
Angular通过指令动态添加组件问题
Jul 09 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
Apr 22 Javascript
vue实现下拉菜单树
Oct 22 Javascript
vant中的toast轻提示实现代码
Nov 04 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语句将数据库*.sql文件导入数据库
2014/05/05 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
event.X和event.clientX的区别分析
2011/10/06 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
JS中操作JSON总结
2020/12/06 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
2017/09/07 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
为什么python比较流行
2020/06/19 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
大学学习个人的自我评价
2014/02/18 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
校园安全学习心得体会
2016/01/18 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书