vue吸頂效果

關(guān)于吸頂

吸頂效果在使得用戶在滑動(dòng)讀取數(shù)據(jù)的時(shí)候把產(chǎn)品需要持續(xù)展示的控件及信息一直固定在屏幕上方,以便用戶操作和交互。

產(chǎn)生背景

??隨著技術(shù)不斷更新與用戶審美不斷提升,一些App中/瀏覽器中的常用交互也在對(duì)用戶更加友好,在某些數(shù)據(jù)展示較多頁面或者導(dǎo)航欄頁面,為了將欄目劃分,使得視圖模塊更加明顯,吸頂效果便在此背景下孕育而生。
??那么,我們?nèi)绾卧趙eb端來做一個(gè)吸頂效果呢?


切入正題——吸頂

簡單效果展示
吸頂.gif

上方數(shù)據(jù)
- 需要吸頂?shù)脑?br> - 吸頂下方數(shù)據(jù)

  1. 接著我們邏輯走一下:(我們?cè)O(shè)吸頂元素為X)
    • 在頁面滑動(dòng)距離 <= 吸頂元素距離頂端距離時(shí),不吸頂
    • 否則,吸頂
  2. 有了這個(gè)大前提,繼續(xù)考慮,如何做到吸頂呢?
    • 設(shè)置該元素的position為fixed屬性
    • 動(dòng)態(tài)控制是否展示該樣式
    • 擴(kuò)展:加點(diǎn)動(dòng)畫效果(這里以漸變?yōu)槭纠?
代碼及注釋
// html
<template>
    <div class="scrollFixed">
        <!-- 上方數(shù)據(jù) -->
        <div class="sTop">
            <ul>
                <li v-for="(ietm, index) in 10">這是吸頂上方的第{{index + 1}}條數(shù)據(jù)</li>
            </ul>
        </div>
        <!-- 吸頂元素 -->
        <nav class="nav" id="searchBar" :class="scrollFixed === true ? 'isFixed' :''">{{ text }}</nav>
        <!-- 下方數(shù)據(jù) -->
        <div class="sBottom">
            <ul>
                <li v-for="(ietm, index) in 30">這是吸頂下方的第{{index + 1}}條數(shù)據(jù)</li>
            </ul>
        </div>
    </div>
</template>

// js
<script>
    export default {
        data() {
            return {
                text: '需要吸頂',
                scrollFixed: false,
                offsetTop: 0
            }
        },
        methods: {
            windowScroll () {
                // 滾動(dòng)條頂部 距 滾動(dòng)原點(diǎn)的高度
                let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
                /**
                 * 三目運(yùn)算
                 * 兩個(gè)高度比較 
                 * 如果滑動(dòng)距離 > 吸頂元素到頁面頂端距離  動(dòng)態(tài)添加
                 */
                scrollTop >= this.offsetTop ? (this.scrollFixed = true, this.text = '已吸頂') : (this.scrollFixed = false, this.text = '需要吸頂');
            }
        },
        mounted() {
            // 需吸頂元素 距 離瀏覽器頂端的高度
            this.offsetTop = document.querySelector('#searchBar').offsetTop;
            // 滾動(dòng)監(jiān)聽
            window.addEventListener('scroll', this.windowScroll);
        },
        destroyed () {
            // 關(guān)閉 銷毀監(jiān)聽
            window.removeEventListener('scroll', this.windowScroll);
        }
    }
</script>

<style scoped type="text/scss" lang="scss">
.isFixed{
    position:fixed;
    top:0;
    left: 0;
    z-index:999;
    background: #12d168;
    transition: all 1s;
    color: #7511ff;
}
// 基本樣式略
// ......
</style>

備注

??此demo在流行瀏覽器中運(yùn)行問題不大,但是沒有詳測(cè)兼容性。如果要在生產(chǎn)上運(yùn)用,務(wù)必做好各端兼容。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一直很好奇吸頂效果,今天自己來實(shí)現(xiàn)一波,話不多說,先上代碼為敬。 鼓搗一波才發(fā)現(xiàn),原來原理非常簡單,只用通過一個(gè)滾...
    RDbaby閱讀 1,007評(píng)論 1 0
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,171評(píng)論 1 92
  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的。 ??事件,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,703評(píng)論 1 11
  • 我內(nèi)心戲?qū)I(yè)八級(jí)哦我跟你講! 從小到大,別人家的孩子對(duì)于我來說就是最大的階級(jí)敵人,管他見過沒見過,總之一提起就恨得...
    阿基里斯追不上龜閱讀 392評(píng)論 1 0
  • 吹著風(fēng),聽著曲,我閉著眼躺在秋千上養(yǎng)著神~ 突然,幾欲停下的秋千又恢復(fù)了幅度。我笑了,又不知是哪個(gè)小可愛跑來獻(xiàn)殷勤...
    磨嘰Lady閱讀 211評(píng)論 0 0

友情鏈接更多精彩內(nèi)容