Element UI【详解】el-scrollbar 滚动条组件 —— 监听滚动条的滚动,跟随页面一起滚动,获取滚动距离,隐藏水平滚动条等

简介: Element UI【详解】el-scrollbar 滚动条组件 —— 监听滚动条的滚动,跟随页面一起滚动,获取滚动距离,隐藏水平滚动条等

el-scrollbar 滚动条组件用于优化页内滚动条的UI效果,使用时必须指定高度!

/*el-scrollbar 必须指定高度*/
.scrollMenuBox {
    height: 200px;
    width: 100px;
    border: 1px solid red;
}

控制el-scrollbar内滚动条的方法与控制页面的滚动条的方法基本一样,只是获取el-scrollbar节点的滚动条时,需使用  this.$refs.scrollMenuRef.wrap

<el-scrollbar ref="scrollMenuRef" class="scrollMenuBox">
    <p v-for="i in titleTotal" :key="i">标题{{i}}</p>
</el-scrollbar>

获取 el-scrollbar 内滚动条向下滚动的距离

this.$refs.scrollMenuRef.wrap.scrollTop

控制 el-scrollbar 内滚动条滚动到指定位置

比如,向下滚动 100px

this.$refs.scrollMenuRef.wrap.scrollTop

el-scrollbar 内内容的高度

this.$refs.scrollMenuRef.wrap.scrollHeight

监听 el-scrollbar 内滚动条的滚动

this.$refs.scrollMenuRef.wrap.addEventListener("scroll", this.scrollMenu);

隐藏水平滚动条

使用 scoped 时,需用 /deep/ 实现样式穿透

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

el-scrollbar 内滚动条跟随页面一起滚动

mounted() {
    // 监听浏览器/页面滚动条的滚动
    window.addEventListener("scroll", this.scrollContent);
},
// 页面滚动时触发
scrollContent() {
    // scrollTop为显示屏顶部与整个文档顶部间的距离
    let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    // 页面滚动条滚动时,el-scrollbar内滚动条按比例跟随一起滚动
    this.$refs.scrollMenuRef.wrap.scrollTop = scrollTop / document.body.scrollHeight * this.$refs.scrollMenuRef.wrap.scrollHeight
},

完整范例代码

<template>
    <div style="padding: 20px">
        <div class="menuBox">
            <button @click="scrollTo(25)">目录滚动到标题25</button>
            <br>
            <button @click="getScrollTop">获取目录内滚动条向下滚动的距离</button>
            <hr>
            <p>目录</p>
            <el-scrollbar ref="scrollMenuRef" class="scrollMenuBox">
                <p v-for="i in titleTotal" :key="i">标题{{i}}</p>
            </el-scrollbar>
        </div>
        <div class="contentBox">
            <p v-for="i in rowTotal" :key="i">第{{i}}行</p>
        </div>
    </div>
</template>
<script>
    export default {
        data() {
            return {
                // 总行数
                titleTotal: 50,
                // 总行数
                rowTotal: 200
            }
        },
        mounted() {
            // 监听浏览器/页面滚动条的滚动
            window.addEventListener("scroll", this.scrollContent);
            // 监听el-scrollbar内滚动条的滚动
            this.$refs.scrollMenuRef.wrap.addEventListener("scroll", this.scrollMenu);
        },
        methods: {
            // el-scrollbar内滚动条滚动时,打印滚动条向下滚动的距离
            scrollMenu() {
                console.log(this.$refs.scrollMenuRef.wrap.scrollTop)
            },
// 页面滚动时触发
            scrollContent() {
                // scrollTop为显示屏顶部与整个文档顶部间的距离
                let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
                // 页面滚动条滚动时,el-scrollbar内滚动条按比例跟随一起滚动
                this.$refs.scrollMenuRef.wrap.scrollTop = scrollTop / document.body.scrollHeight * this.$refs.scrollMenuRef.wrap.scrollHeight
            },
            // el-scrollbar内滚动条滚动到指定的标题号
            scrollTo(titleNo) {
                this.$refs.scrollMenuRef.wrap.scrollTop = (titleNo - 1) / this.titleTotal * this.$refs.scrollMenuRef.wrap.scrollHeight
            },
            // 获取el-scrollbar内滚动条向下滚动的距离
            getScrollTop() {
                alert(this.$refs.scrollMenuRef.wrap.scrollTop)
            }
        },
    }
</script>
<style scoped>
    /*目录悬浮*/
    .menuBox {
        position: fixed;
    }
 
    /*内容居中*/
    .contentBox {
        width: 60%;
        margin: auto;
    }
 
    /*el-scrollbar 必须指定高度*/
    .scrollMenuBox {
        height: 200px;
        width: 100px;
        border: 1px solid red;
    }
 
    /*隐藏水平滚动条*/
    /deep/ .el-scrollbar__wrap {
        overflow-x: hidden;
    }
</style>
目录
相关文章
|
12天前
|
缓存 搜索推荐 索引
「Mac畅玩鸿蒙与硬件12」鸿蒙UI组件篇2 - Image组件的使用
在鸿蒙应用开发中,Image 组件用于加载和显示图片资源,并提供多种属性来控制图片的显示效果和适配方式。本篇将带你学习如何在鸿蒙应用中加载本地和远程图片、设置图片样式以及实现简单的图片轮播功能。
51 7
「Mac畅玩鸿蒙与硬件12」鸿蒙UI组件篇2 - Image组件的使用
|
3天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
14天前
|
自然语言处理 开发者
「Mac畅玩鸿蒙与硬件11」鸿蒙 UI 组件篇1 - Text 和 Button 组件详解
本篇将详细介绍鸿蒙应用开发中的 Text 和 Button 组件。通过本篇内容,你将学习如何使用 Text 组件显示文本、格式化文本样式,以及如何使用 Button 组件处理点击事件并自定义样式。掌握这些基本组件的用法将为后续的 UI 开发奠定基础。
41 4
「Mac畅玩鸿蒙与硬件11」鸿蒙 UI 组件篇1 - Text 和 Button 组件详解
|
1月前
|
API UED 容器
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
在这篇博客中,我们将深入探讨 Element UI 中的自定义滚动条及弹出层管理技巧。文章详细介绍了 el-scrollbar 组件的使用和参数设置,以及 PopupManager 如何有效管理弹出层的 z-index。我们还将探讨如何实现灵活的全屏组件,利用 vue-popper 创建自定义弹出层,最后介绍 ClickOutside 指令的用法。这些高级技巧将帮助你提升 Element UI 应用程序的用户体验与交互灵活性。
185 1
深入探索 Element UI:自定义滚动条与弹出层管理的技巧
|
30天前
|
JavaScript 索引
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
108 0
|
2月前
|
JavaScript
从零开始写一套广告组件【一】搭建基础框架并配置UI组件库
其实这个从零有点歧义,因为本质上是要基于`tdesign-vue-next`来进行二次封装为一套广告UI组件库,现在让我们在一起快乐的搭建自己的广告UI库之前,先对以下内容做出共识:
80 0
从零开始写一套广告组件【一】搭建基础框架并配置UI组件库
|
1月前
Element-UI组件的使用
【10月更文挑战第1天】
34 0
|
3月前
|
开发者 C# Android开发
明白吗?Xamarin与Native的终极对决:究竟哪种开发方式更适合您的项目需求,让我们一探究竟!
【8月更文挑战第31天】随着移动应用开发的普及,开发者面临多种技术选择。本文对比了跨平台解决方案Xamarin与原生开发方式的优势与劣势。Xamarin使用C#进行跨平台开发,代码复用率高,可大幅降低开发成本;但因基于抽象层,可能影响性能。原生开发则充分利用平台特性,提供最佳用户体验,但需维护多套代码库,增加工作量。开发者应根据项目需求、团队技能和预算综合考量,选择最适合的开发方式。
110 0
|
1月前
|
开发框架 JavaScript 前端开发
鸿蒙NEXT开发声明式UI是咋回事?
【10月更文挑战第15天】鸿蒙NEXT的声明式UI基于ArkTS,提供高效简洁的开发体验。ArkTS扩展了TypeScript,支持声明式UI描述、自定义组件及状态管理。ArkUI框架则提供了丰富的组件、布局计算和动画能力。开发者仅需关注数据变化,UI将自动更新,简化了开发流程。此外,其前后端分层设计与编译时优化确保了高性能运行,利于生态发展。通过组件创建、状态管理和渲染控制等方式,开发者能快速构建高质量的鸿蒙应用。
109 3
|
20天前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
71 8