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>
相关推荐
兔子零10248 小时前
Ofox AI值得用吗?
前端·javascript·后端
We་ct8 小时前
React 性能优化精讲
前端·javascript·react.js·性能优化·前端框架·html·浏览器
jiejiejiejie_9 小时前
Flutter for OpenHarmony 萌系 UI 实战合集:骨架屏 + 引导页一站式指南
flutter·ui·华为
Ulyanov9 小时前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》 开发环境搭建与工具链极简主义 —— 拒绝臃肿,构建工业级基座
开发语言·python·qt·ui·架构·系统仿真
渣渣盟9 小时前
Spark 性能调优实战:从开发到生产落地
javascript·ajax·spark
Ulyanov9 小时前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》:QML 声明式语法与霓虹按钮 —— 当 Python 遇见现代美学
开发语言·python·ui·qml·系统仿真·雷达电子对抗仿真
专科3年的修炼11 小时前
uni-app移动应用开发第四章
开发语言·javascript·uni-app
光影少年12 小时前
前端在页面渲染优化和组件优化经验?
前端·vue.js·react.js·前端框架
武帝为此13 小时前
【Selenium 执行 JavaScript】
javascript·selenium·测试工具
一锤捌拾13 小时前
V8引擎精品漫游指南--Ignition篇(下 一) 动态执行前的事情
前端·javascript