在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 相关文章推荐
js+css在交互上的应用
Jul 18 Javascript
jsTree 基于JQuery的排序节点 Bug
Jul 26 Javascript
jQuery 开发者应该注意的9个错误
May 03 Javascript
如何判断元素是否为HTMLElement元素
Dec 06 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
Aug 20 Javascript
深入理解bootstrap框架之入门准备
Oct 09 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
Oct 21 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
Dec 18 Javascript
各种选择框jQuery的选中方法(实例讲解)
Jun 27 jQuery
关于Vue Webpack2单元测试示例详解
Aug 14 Javascript
浅谈super-vuex使用体验
Jun 25 Javascript
微信小程序通过websocket实时语音识别的实现代码
Aug 19 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初学者头疼十四条问题大总结
2008/11/12 PHP
一步一步学习PHP(7) php 字符串相关应用
2010/03/05 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
php输出xml属性的方法
2015/03/19 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
深入分析原生JavaScript事件
2014/12/29 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
2018/09/20 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
python实现装饰器、描述符
2018/02/28 Python
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
会计专业自我评价
2014/02/12 职场文书
党员党性分析材料
2014/02/17 职场文书
出差报告格式模板
2014/11/06 职场文书
党员个人年度总结
2015/02/14 职场文书
公司慰问信范文
2015/03/23 职场文书
检讨书模板大全
2015/05/07 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
庭外和解协议书
2016/03/23 职场文书
图解上海144收音机
2021/04/22 无线电
Python time库的时间时钟处理
2021/05/02 Python
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js