Vue的el-scrollbar实现自定义滚动


Posted in Python onMay 29, 2018

为什么要用el-scrollbar?

最近在写一个内部平台系统,相信大家都知道,其中会有很多自定义的滚动区域,就比如说现在有一个列表需要滚动,第一个念头就是用 overflow: scroll; 啊!嗯嗯,又不是不能用!如果我不曾见过太阳,我本可以忍受黑暗。

大家总会见过不少滚动条比较优雅的实现,不可否认,美是让人愉悦的。所以这些年行走江湖我满怀愧疚,让大家见丑了。

为什么要用el-scrollbar,大家都知道,模拟一个滚动不难,而且市面上有很多这样的库。我考虑的,首先项目用的框架是Vue,然后用的组件库是Element,Element官网也有很多滚动,而且像是Select组件的下拉框也是有滚动的,所以就不用想选择什么了,简简单单的就用Element自己的scrollbar吧,也不用再引入什么别的包或者文件之类的。

看Element的官网是不可能发现Scrollbar这个组件的,没有使用文档,但是可以直接使用。

为什么要写这一篇文章?

第一,有段时间没写东西了,先热热手;

第二,真的有同学不知道怎么用,可能主要是没有文档吧

Vue的el-scrollbar实现自定义滚动

先来看看它的样子。

Vue的el-scrollbar实现自定义滚动

看了效果,接着来看一下怎么找到这个组件,官方没有提供文档,但确实是直接可用的一个组件。为什么这么说,这个一会再聊。先稍微看一下Element项目一些基本的概念。

在Element的贡献指南里说了开发环境搭建和打包代码的指令。打包代码用 npm run dist ,我们去package.json中可以看到这个指令具体的操作。

Vue的el-scrollbar实现自定义滚动

我们简单看一下build/webpack.conf.js这个文件,会发现打包的文件入口是./src/index.js,我们再去看一下这个文件。里面内容除了包含给vue安装插件,原型上挂载对象之类的操作外,就是用插件的方式把Element组件给注册完成,当然也暴露出用安装包方式安装后要用的所有方法和属性。其实我们已经看到了Scrollbar的身影。再循着去看一下packages/scrollbar/index.js'这个文件,简单的把这个组件引入后,添加了一个install方法,提供给Vue的use方法使用,然后就直接export出来了。

Vue的el-scrollbar实现自定义滚动

去src/main.js这个文件,看一下组件接收的props:

Vue的el-scrollbar实现自定义滚动

native属性:如果为true就不显示el的bar,也就是el模拟出来的滚动条,如果为false就显示模拟的滚动条

关于tag这个属性,可以看一下el的Select组件中的应用。

Vue的el-scrollbar实现自定义滚动

画个图表示一下view和wrap这两个区域的区别:

Vue的el-scrollbar实现自定义滚动

尝试用一下

考虑到有些同学有时会打不开上面的链接,把代码贴出来。

HTML

<script src="//unpkg.com/vue/dist/vue.js"></script>
<script src="//unpkg.com/element-ui@2.3.9/lib/index.js"></script>
<div id="app">
 <h2>list:</h2>
 <el-scrollbar wrap-class="list" wrap-style="color: red;" view-style="font-weight: bold;" view-class="view-box" :native="false">
 <div v-for="value in num" :key="vlaue">
  {{value}}
 </div>
 </el-scrollbar>
</div>


CSS

@import url("//unpkg.com/element-ui@2.3.9/lib/theme-chalk/index.css");
#app {
 height: 300px;
 overflow: hidden;
}
/*展示列表的区域,超过200px出现滚动条*/
.list {
 max-height: 200px;
}


JavaScript

new Vue({
 el: "#app",
 data: {
 num: 30
 }
})

Element UI官方说不准什么时候就更新文档了,不过,真的可能是因为太简单了。

Python 相关文章推荐
详谈python http长连接客户端
Jun 12 Python
python+pandas分析nginx日志的实例
Apr 28 Python
Django ORM 查询管理器源码解析
Aug 05 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
python科学计算之narray对象用法
Nov 25 Python
python装饰器相当于函数的调用方式
Dec 27 Python
Python实现RabbitMQ6种消息模型的示例代码
Mar 30 Python
Python 炫技操作之合并字典的七种方法
Apr 10 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 Python
Pycharm导入anaconda环境的教程图解
Jul 31 Python
使用Django实现商城验证码模块的方法
Jun 01 Python
基于Django与ajax之间的json传输方法
May 29 #Python
django ajax json的实例代码
May 29 #Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
May 29 #Python
PyTorch学习笔记之回归实战
May 28 #Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 #Python
Python实现爬虫爬取NBA数据功能示例
May 28 #Python
Django+Ajax+jQuery实现网页动态更新的实例
May 28 #Python
You might like
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
JavaScript 异步调用框架 (Part 3 - 代码实现)
2009/08/04 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
详解JavaScript时间格式化
2015/12/23 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
Vue项目利用axios请求接口下载excel
2020/11/17 Vue.js
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
python 去除二维数组/二维列表中的重复行方法
2019/01/23 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
Python 多线程其他属性以及继承Thread类详解
2019/08/28 Python
关于Python-faker的函数效果一览
2019/11/28 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
巴西网上药房:onofre
2016/11/21 全球购物
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
生物专业个人自荐信范文
2013/11/29 职场文书
学生会竞选演讲稿
2014/04/24 职场文书
学校领导干部民主生活会整改方案
2014/09/29 职场文书
党建工作汇报材料
2014/12/24 职场文书
工作调动申请报告
2015/05/18 职场文书
话题作文之自信作文
2019/11/15 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
Redis RDB技术底层原理详解
2021/09/04 Redis
python Tkinter模块使用方法详解
2022/04/07 Python