在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 相关文章推荐
ExtJs扩展之GroupPropertyGrid代码
Mar 05 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
Oct 20 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
Nov 30 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
Dec 19 Javascript
学习JavaScript设计模式(多态)
Nov 25 Javascript
关于JS中二维数组的声明方法
Sep 24 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
Nov 26 Javascript
js 判断数据类型的几种方法
Jan 13 Javascript
JS实现的DOM插入节点操作示例
Apr 04 Javascript
angularjs http与后台交互的实现示例
Dec 21 Javascript
jQuery实现放大镜案例
Oct 19 jQuery
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 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计算函数执行时间的方法
2015/03/20 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
JSON 编辑器实现代码
2009/12/06 Javascript
JavaScript面向对象之静态与非静态类
2010/02/03 Javascript
AngularJS基础知识
2014/12/21 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
2018/04/13 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
python 3.0 模拟用户登录功能并实现三次错误锁定
2017/11/01 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
对Xpath 获取子标签下所有文本的方法详解
2019/01/02 Python
实例介绍Python中整型
2019/02/11 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
应届大专毕业生个人自荐信
2013/09/22 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
成绩单评语
2015/01/04 职场文书
遗失证明范文
2015/06/19 职场文书
复活读书笔记
2015/06/29 职场文书
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL