vue element-ui 使用 el-scrollbar监听滚动条滚动事件,处理el-tabs滚动到顶部header吸顶效果

摘要:
并将el滚动条的高度设置为100%el-scrollbar__wrap{overflow-x:hidden;}},然后使用以下代码<el scrollbarref=“scrollbar”style=“height:class=”isFixedTop&&el滚动条监听滚动事件的js代码如下:newVue({el:

摘要:elememt-ui中使用el-scrollbar时监听scroll事件,处理el-tabs滚动到顶部时header部分吸顶效果

前言

网上关于el-scrollbar滚动事件监听的案例比较少,好不容易找到解决方法,记录一下,启发之处在这里,稍有改动

在vue中使用elememt-ui时,如果页面比较长需要滚动,我们想要优化浏览器侧边默认的滚动条该怎么做?因为默认滚动条特别丑又会默认加padding-left占据页面空间,对页面UI效果体验不是太好,所以在使用elememt-ui时我们通常使用el-scrollbar组件去优化滚动条,而el-scrollbar这个组件官方并没有明确说明,所以对其中的一些属性很陌生,本文主要介绍如何使用el-scrollbar对滚动事件进行监听,达到导航吸顶效果。

图示

刚加载完页面时,tabs标题区域距离顶部有一段距离

图示

当向上滑动时,tabs-header到顶部时固定在顶部,下滑时在恢复原位

图示

el-scrollbar 的使用

el-scrollbar 使用起来很简单,在使用时要设置外层容器高度,并且要设置el-scrollbar 的高度为100%

.el-scrollbar__wrap{
  overflow-x: hidden;
}

注意~~(巨坑):如果项目中用到很多el-scrollbar组件,把.el-scrollbar__wrap写成全局样式的时候,一定不能直接写在全局,否则会影响到el-cascader、el-select之类的组件(导致组件下滑到底部时最后一个元素会被遮挡一部分),原因是el-cascader、el-select这些组件是类似弹窗自动生成到script标签之下,也就是在body上追加的元素,写到全局会对其造成影响,要在其外层包裹主页面的class或id名,或者嵌套在其父级标签下。

例如

#app{
  .el-scrollbar__wrap{
    overflow-x: hidden;
  }
}

然后使用下面代码

<el-scrollbar ref="scrollbar" style="height:100%">
  <el-tabs :class="isFixedTop && 'tabs-fixed-top'">
    <el-tab-pane></el-tab-pane>
    ...
    <el-tab-pane></el-tab-pane>
  </el-tabs>
</el-scrollbar>

el-scrollbar 监听滚动事件

js代码如下

new Vue({
  el: '#app',
  data() {
    return { isFixedTop: false }
  },
  mounted() {
    this.handleScroll()
  },
  methods: {
    handleScroll() {
      let scrollbarEl = this.$refs.scrollbar.wrap
      scrollbarEl.onscroll = () => {
        if(scrollbarEl.scrollTop > 135) {
          this.isFixedTop = true
        } else {
          this.isFixedTop = false
        }
      }
    }
  }
})

135 为el-tabs到浏览器顶部的距离,这里可以传入动态参数动态获取,我这里没有必要了

css 部分(需求不同,仅供参考)

/* 滚动导航顶部贴顶效果 */
.tabs-fixed-top{
  .el-tabs__header{
     100%;
    position: fixed;
    top: 40px;
    left: 0;
    z-index: 20;
    padding-left: 24px;
    background-color: #fff;
    border-bottom: 2px solid #E4E7ED;
  }
  .el-tabs__content{
    padding-top: 63px;
  }
  .el-tabs__nav-wrap::after{
    content: normal;
  }
}

免责声明:文章转载自《vue element-ui 使用 el-scrollbar监听滚动条滚动事件,处理el-tabs滚动到顶部header吸顶效果》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇1602液晶显示selenium+python之iframe学习笔记下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

React组件中对子组件children进行加强

React组件中对子组件children进行加强 问题 如何对组件的children进行加强,如:添加属性、绑定事件,而不是使用<div>{this.props.children}</div>在<div>上进行处理。 前车之鉴 今天写组件遇到这个问题,在网上查阅了很多资料,都说可以使用React.cloneElement...

iframe: 我们来谈一谈

【转】:https://segmentfault.com/a/1190000004502619#articleHeader6 某大咖说: "iframe是能耗最高的一个元素,请尽量减少使用"某大牛说: "iframe安全性太差,请尽量减少使用"...wtf, 你们知不知道你们这样浇灭了多少孩纸学习iframe的热情和决心。 虽然,你们这样说的我竟无法反驳,...

Eclipse 插件开发 —— 深入理解查找(Search)功能及其扩展点

引言 查找功能是计算机语言开发环境 / 平台的一个非常重要的特性。Eclipse 也不例外,它提供了丰富的查找功能(用户可以输入正则表达式或任意字符串,指定查找范围和匹配选项等等),并且提供了简单易用的接口方便开发人员扩展。Eclipse 的查找功能是基于 MVC 设计模式架构的,因此如果读者先前对 MVC 模式了解的话,有助于读者理解 Eclipse 的...

2018年九个很受欢迎的vue前端UI框架

最近在逛各大网站,论坛,SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,小编自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在做自己的公司项目。 学习的过程之中发现继最热的 React 组件库和 Angular 组件库之后,这里有很多个流行和实用的 Vue.js 组件库完善你的下一个用 V...

PB TreeView 属性,事件详解(转)

  本文转自:http://chbin95233.blog.163.com/blog/static/32075111201010573448815/ ■TreeView控件可以以树型方式来组织项目,不仅显示直观、界面友好,而且项目的管理和操作更为方便,是当前比较流行的一个控件。该控件的特点是在较小的空间可以分层次显示大量的数据,并且可以按照用户的要求检索...

phantomJs页面操作

因为phantomjs能加载和操纵页面,它可以自动化地完美执行页面的各种操作。 操作文档: 脚本的被执行,就像它真的正在web 浏览器上运行一样。 下面的脚本,是读取元素id为myagent的文本内容 //导入webpage模块,创建一个实例var page = require('webpage').create(); //输出页面默认的userAgent...