在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 相关文章推荐
Prototype使用指南之string.js
Jan 10 Javascript
建立良好体验度的Web注册系统ajax
Jul 09 Javascript
JavaScript入门教程(11) js事件处理
Jan 31 Javascript
jquery.ui.draggable中文文档
Nov 24 Javascript
热点新闻滚动特效的js代码
Aug 17 Javascript
javascript实现信息的显示和隐藏如注册页面
Dec 03 Javascript
javascript实现动态加载CSS
Jan 26 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
Oct 27 Javascript
JavaScript实现省市县三级级联特效
May 16 Javascript
jfinal与bootstrap的登出实战详解
Nov 27 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
Dec 12 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/07/02 PHP
php Undefined index的问题
2009/06/01 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
全面解析bootstrap格子布局
2016/05/22 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
微信小程序聊天功能的示例代码
2020/01/13 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
对孩子的寄语
2014/04/09 职场文书
电子工程求职信
2014/07/17 职场文书
作风转变心得体会
2014/09/02 职场文书
2015政治思想表现评语
2015/03/25 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技