在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 相关文章推荐
新页面打开实际尺寸的图片
Aug 25 Javascript
CCPry JS类库 代码
Oct 30 Javascript
Jquery封装tab自动切换效果的具体实现
Jul 13 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
Mar 19 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
Dec 19 Javascript
BootStrap Fileinput的使用教程
Dec 30 Javascript
node 利用进程通信实现Cluster共享内存
Oct 27 Javascript
vue中的计算属性实例详解
Sep 19 Javascript
详解Axios 如何取消已发送的请求
Oct 20 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
Aug 08 Javascript
vue iview实现动态新增和删除
Jun 17 Javascript
vue css 相对路径导入问题级踩坑记录
Jun 05 Vue.js
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 fopen 读取带中文URL地址的一点见解
2012/09/25 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
Angular2库初探
2017/03/01 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
Vue集成Iframe页面的方法示例
2017/12/12 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
2019/09/05 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
python利用hook技术破解https的实例代码
2013/03/25 Python
基python实现多线程网页爬虫
2015/09/06 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
小学生读书感言
2014/02/12 职场文书
活动总结范文
2014/08/30 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
大学副班长竞选稿
2015/11/21 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python
Win10玩csgo闪退如何解决?Win10玩csgo闪退的解决方法
2022/07/23 数码科技