天天看點

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 内滾動條滾動到指定位置

this.$refs.scrollMenuRef.wrap.scrollTop = 100      

el-scrollbar 内内容的高度

this.$refs.scrollMenuRef.wrap.scrollHeight      

監聽 el-scrollbar 内滾動條的滾動

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

隐藏水準滾動條

/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>      

繼續閱讀