在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 相关文章推荐
学习YUI.Ext第五日--做拖放Darg&amp;Drop
Mar 10 Javascript
基于jquery的图片懒加载js
Jun 30 Javascript
jquery1.10给新增元素绑定事件的方法
Mar 06 Javascript
Javascript中的Callback方法浅析
Mar 15 Javascript
基于JS实现的笛卡尔乘积之商品发布
May 13 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
May 31 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
Jun 28 Javascript
Vue完整项目构建(进阶篇)
Feb 10 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
Jun 15 Javascript
angularjs1.X 重构controller 的方法小结
Aug 15 Javascript
怎么理解wx.navigateTo的events参数使用详情
May 18 Javascript
DWR内存兼容及无法调用问题解决方案
Oct 16 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
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
Extjs在exlipse中设置自动提示的方法
2010/04/07 Javascript
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
2015/11/25 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
2017/07/05 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
Python yield与实现方法代码分析
2018/02/06 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
Python生成器generator原理及用法解析
2020/07/20 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
医院护士的求职信
2014/01/03 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
本科生求职信
2014/06/17 职场文书
经典演讲稿开场白
2014/08/25 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
初三英语教学计划
2015/01/23 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android