最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue組件設計-Sticky布局效果示例

 更新時間:2023年05月05日 11:28:06   作者:aiguangyuan  
這篇文章主要介紹了Vue組件設計-Sticky布局,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Vue組件設計-Sticky布局

Sticky布局即為粘性定位,常見于一些重要的頁面區(qū)域在向上滾動時不會被卷起來,在CSS中可以通過設置position:sticky來實現(xiàn)這一功能,但是如果出于兼容性考慮或是一些復雜的場景,就需要我們用傳統(tǒng)的方法來實現(xiàn),以下基于Vue封裝一個組件給大家參考。

1. 效果示例

 2. 組件封裝

<template>
    <div :style="{height:height + 'px', zIndex: zIndex }">
        <div
            :class="className"
            :style="{
                width: width,
                zIndex: zIndex,
                position: position,
                height: height + 'px',
                top: isSticky ? stickyTop + 'px' : '',
            }">
            <slot>
            </slot>
        </div>
    </div>
</template>
<script>
export default {
    name: "Sticky",
    props: {
        stickyTop: {
            type: Number,
            default: 0,
        },
        zIndex: {
            type: Number,
            default: 1,
        },
        className: {
            type: String,
            default: "",
        },
    },
    data() {
        return {
            position: "",
            active: false,
            isSticky: false,
            width: undefined,
            height: undefined,
        };
    },
    mounted() {
        this.height = this.$el.getBoundingClientRect().height;
        window.addEventListener("scroll", this.handleScroll);
        window.addEventListener("resize", this.handleResize);
    },
    // 組件激活時調用
    activated() {
        this.handleScroll();
    },
    destroyed() {
        window.removeEventListener("scroll", this.handleScroll);
        window.removeEventListener("resize", this.handleResize);
    },
    methods: {
        sticky() {
            if (this.active) {
                return;
            }
            this.active = true;
            this.isSticky = true;
            this.position = "fixed";
            this.width = this.width + "px";
        },
        handleReset() {
            if (!this.active) {
                return;
            }
            this.reset();
        },
        reset() {
            this.position = "";
            this.width = "auto";
            this.active = false;
            this.isSticky = false;
        },
        handleScroll() {
            // 粘性定位區(qū)域的寬度
            const width = this.$el.getBoundingClientRect().width;
            this.width = width || "auto";
            // 粘性定位距屏幕頂部的高度
            const offsetTop = this.$el.getBoundingClientRect().top;
            // 如果滾動高度小于設定的定位高度
            if (offsetTop < this.stickyTop) {
                this.sticky();
                return;
            };
            this.handleReset();
        },
        handleResize() {
            if (this.isSticky) {
                this.width = this.$el.getBoundingClientRect().width + "px";
            }
        },
    },
};
</script>

3. 組件使用

<template>
    <div style="height:2000px;">
        <div style="height:200px;background-color:green"></div>
        <Sticky>
            <div style="height:300px;background-color:red;line-height:300px;text-align:center;font-size:30px;">
                這是定位區(qū)域
            </div>
        </Sticky>
    </div>
</template>
<script>
import Sticky from "@/components/Sticky";
export default {
    components:{
        Sticky:Sticky
    }
};
</script>

到此這篇關于Vue組件設計-Sticky布局的文章就介紹到這了,更多相關Vue Sticky布局內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue mixins詳解與使用技巧

    Vue mixins詳解與使用技巧

    Vue mixins提供了一個非常靈活的方式來分發(fā)Vue組件中的可復用功能,通過全局混入和局部混入,可以將預定義的方法、數(shù)據(jù)等混合到Vue組件中,這種技術可以簡化代碼,提高開發(fā)效率,并允許在不同組件間共享功能
    2024-09-09
  • Vue 刷新當前路由的實現(xiàn)代碼

    Vue 刷新當前路由的實現(xiàn)代碼

    這篇文章主要介紹了Vue 刷新當前路由的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Vue中v-form標簽里的:rules作用及定義方法

    Vue中v-form標簽里的:rules作用及定義方法

    文章介紹了在Vue項目中使用ElementUI或ElementPlus組件庫時,如何通過`el-form`標簽的`:rules`屬性進行表單驗證,`:rules`屬性用于定義表單項的驗證規(guī)則,包括必填項、格式校驗、長度限制等,文章還展示了如何定義基本驗證規(guī)則和自定義驗證函數(shù),感興趣的朋友一起看看吧
    2025-03-03
  • vue3實現(xiàn)無縫滾動列表效果(大屏數(shù)據(jù)輪播場景)

    vue3實現(xiàn)無縫滾動列表效果(大屏數(shù)據(jù)輪播場景)

    vue3-scroll-seamless 是一個用于 Vue 3 的插件,用于實現(xiàn)無縫滾動的組件,它可以讓內容在水平或垂直方向上無縫滾動,適用于展示輪播圖、新聞滾動、圖片展示等場景,本文就給大家介紹了vue3實現(xiàn)無縫滾動列表效果,需要的朋友可以參考下
    2024-07-07
  • vue數(shù)據(jù)響應式原理知識點總結

    vue數(shù)據(jù)響應式原理知識點總結

    在本篇文章里小編給各位整理的是一篇關于vue數(shù)據(jù)響應式原理知識點總結,有興趣的朋友們可以跟著學習下。
    2020-02-02
  • SyntaxError:?/xx.vue:?Unexpected?token,?expected?“,“錯誤解決

    SyntaxError:?/xx.vue:?Unexpected?token,?expected?“,“錯誤解

    這篇文章主要為大家介紹了SyntaxError:?/xx.vue:?Unexpected?token,?expected?“,“錯誤解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • vue檢測對象和數(shù)組的變化分析

    vue檢測對象和數(shù)組的變化分析

    這篇文章給大家分享了vue檢測對象和數(shù)組的變化的相關知識點與實例代碼,有興趣的朋友參考下。
    2018-06-06
  • Vue中列表渲染指令v-for的基本用法詳解

    Vue中列表渲染指令v-for的基本用法詳解

    v-for指令是在模板編譯的代碼生成階段實現(xiàn)的,當遍歷數(shù)組或對象時需要使用列表渲染指令v-for。本文主要為大家介紹了v-for指令的基本用法,希望對大家有所幫助
    2023-04-04
  • vue限制文本輸入框只允許輸入字母、數(shù)字、禁止輸入特殊字符

    vue限制文本輸入框只允許輸入字母、數(shù)字、禁止輸入特殊字符

    這篇文章主要介紹了vue限制文本輸入框只允許輸入字母、數(shù)字、不允許輸入特殊字符,通過監(jiān)聽表單輸入的內容,使用方法的缺陷,本文通過實例代碼介紹的非常詳細,需要的朋友參考下吧
    2023-10-10
  • vue data恢復初始化數(shù)據(jù)的實現(xiàn)方法

    vue data恢復初始化數(shù)據(jù)的實現(xiàn)方法

    今天小編就為大家分享一篇vue data恢復初始化數(shù)據(jù)的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10

最新評論

勐海县| 南安市| 壤塘县| 伊宁市| 德阳市| 若尔盖县| 五家渠市| 淳安县| 兴化市| 侯马市| 友谊县| 永和县| 玉树县| 镇远县| 巴东县| 福鼎市| 治县。| 双城市| 抚松县| 府谷县| 镇远县| 将乐县| 彰武县| 甘泉县| 张家界市| 南汇区| 泸水县| 萍乡市| 莎车县| 麻城市| 台南市| 湖南省| 克拉玛依市| 临潭县| 揭阳市| 米泉市| 本溪市| 岳阳县| 镇原县| 武定县| 西城区|