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

JS實(shí)現(xiàn)網(wǎng)站樓層導(dǎo)航效果代碼實(shí)例

 更新時間:2020年06月16日 15:47:00   作者:聽風(fēng)是風(fēng)  
這篇文章主要介紹了JS實(shí)現(xiàn)網(wǎng)站樓層導(dǎo)航效果代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

壹 ❀ 引言

對于樓層導(dǎo)航而言,還有個重要的功能就是,隨著滾動條滾動,達(dá)到某層時得同步點(diǎn)亮樓層導(dǎo)航的小圖片。

由于我前面也說了不打算使用JQ,所以想著用JS去實(shí)現(xiàn)它,實(shí)現(xiàn)并不難,主要得弄清滾動滿足怎樣的條件才應(yīng)該點(diǎn)亮對應(yīng)樓層,我們先看看實(shí)現(xiàn)效果:

貳 ❀ 實(shí)現(xiàn)思路

第一點(diǎn),因?yàn)槭怯蓾L動觸發(fā)的樓層判斷,所以肯定離不開onscroll事件。

第二點(diǎn),我們貌似要獲取每個樓層頂端距離視窗頂部的距離,隨著滾動條往下滾動,此距離會不斷縮小,當(dāng)接近到某個距離時我們判定此樓層入畫,當(dāng)然其它樓層都滿足此判定。

而JQ提供了一個offset().top方法能獲取這個值,js中只有一個offsetTop屬性,獲取的是距離自己最近position屬性為非static的祖先元素的距離,此距離不隨滾動條滾動而縮小。

當(dāng)然我們有方法模擬計算出offset().top的值,但沒必要

這里我直接引用了我之前博客得到的結(jié)論:offset().top =offsetTop -scrollTop(offsetTop參考對象為根元素)。

為了方便理解,我們假設(shè)樓層壹頂端距離視窗頂端為0時,此時判定樓層壹入畫,即樓層導(dǎo)航中第一個按鈕應(yīng)該被點(diǎn)亮。

由于offset().top = offsetTop - scrollTop,此時樓層壹距離頂端已經(jīng)為0,我們可以得出當(dāng)樓層壹的offsetTop = scrollTop時,我們認(rèn)定樓層壹入畫。

而當(dāng)樓層貳入畫時,樓層貳的offsetTop也等于滾動條的距離,此時樓層壹自然會出畫:

那么現(xiàn)在我們得到了判斷樓層入畫的條件,如果某個樓層的offsetTop屬性的值小于等于滾動條距離時(如果用等于條件過于苛刻,很難剛好滾動到這個距離點(diǎn)上),我們點(diǎn)亮對應(yīng)樓層的導(dǎo)航logo。

為了讓效果更加自然,我們肯定不會真的讓某個樓層緊貼頂部時才判定它滿足條件,肯定是提前某個距離就判定滿足,所以真正的條件應(yīng)該是offsetTop - 100(這個數(shù)字看自己感覺) <= scrollTop

你是否會有,樓層貳入畫時樓層壹依然滿足offsetTop<=scrollTop條件的疑惑?在JQ里面,我們給某個元素添加點(diǎn)亮class的同時,還會清除掉兄弟元素的該class。

所以在JS里面也是如此,我們利用滿足樓層的索引來控制樣式,而后者滿足條件的索引始終會覆蓋前面的索引,所以被點(diǎn)亮的永遠(yuǎn)只有一個。

現(xiàn)在弄懂了思路,代碼就好些了,下面直接貼上了實(shí)現(xiàn)代碼:

叁 ❀ 實(shí)現(xiàn)代碼

HTML部分:

<div class="floor">
  <div style="background: #ffb6b9">壹</div>
  <div style="background: #fae3d9">貳</div>
  <div style="background: #bbded6">叁</div>
  <div style="background: #8ac6d1">肆</div>
  <div style="background: #fff1ac">伍</div>
</div>
<ul class="floorNav">
  <li>壹</li>
  <li>貳</li>
  <li>叁</li>
  <li>肆</li>
  <li>伍</li>
</ul>

CSS部分:

* {
  padding: 0;
  margin: 0;
  list-style: none;
}

.floor>div {
  height: 900px;
  line-height: 900px;
  text-align: center;
  color: #fff;
  font-size: 40px;
}

.floorNav {
  width: 40px;
  height: 200px;
  position: fixed;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  background: #ddd;
}

.floorNav>li {
  height: 40px;
  line-height: 40px;
  text-align: center;
  color: #fff;
}

.active {
  background: #e4393c;
  color: #fff;
}

JS部分:

//獲取樓層
let floors = document.querySelectorAll(".floor>div");
//獲取樓層導(dǎo)航
let floorNavs = document.querySelectorAll(".floorNav>li");
//滾動監(jiān)聽
window.onscroll = function () {
  //獲取滾動條高度,兼容ie
  let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
  //符合點(diǎn)亮條件的樓層索引
  let activeIndex;
  //樓層導(dǎo)航圖標(biāo)點(diǎn)亮控制
  floors.forEach((floor, index) => {
    //檢查各樓層頂端距離視窗頂端距離,如果滿足條件則修改樓層圖標(biāo)
    floor.offsetTop - 100 <= scrollTop ? activeIndex = index : null;
  });
  //根據(jù)索引數(shù)設(shè)置樓層樣式
  floorNavs.forEach((nav, index) => {
    index === activeIndex ? nav.classList.add('active') : nav.classList.remove('active');
  });
};

需要注意的是,這里我使用了js中操作classList對象的add方法與remove方法,這兩個方法IE并不支持,因?yàn)槲疫@邊是不需要考慮IE的,所以就任性了。

本文只是提供了一個樓層導(dǎo)航的思路,實(shí)現(xiàn)肯定不是很好,若有更佳的做法,歡迎留言討論,那么本文結(jié)束。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • js實(shí)現(xiàn)星星打分效果

    js實(shí)現(xiàn)星星打分效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)星星打分效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 淺談javascript語法和定時函數(shù)

    淺談javascript語法和定時函數(shù)

    初學(xué)者可能對Javascript的定時器有誤解,認(rèn)為它們是線程,其實(shí)Javascript是運(yùn)行于單線程中的,而定時器僅僅是計劃在未來的某個時間執(zhí)行,而具體的執(zhí)行時間是不能保證的,因?yàn)樵陧撁娴纳芷谥?,不同的時間可能有其它代碼在控制Javascript的里進(jìn)程。
    2015-05-05
  • JS獲得一個對象的所有屬性和方法實(shí)例

    JS獲得一個對象的所有屬性和方法實(shí)例

    下面小編就為大家?guī)硪黄狫S獲得一個對象的所有屬性和方法實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • JS實(shí)現(xiàn)點(diǎn)擊網(wǎng)頁判斷是否安裝app并打開否則跳轉(zhuǎn)app store

    JS實(shí)現(xiàn)點(diǎn)擊網(wǎng)頁判斷是否安裝app并打開否則跳轉(zhuǎn)app store

    這篇文章主要介紹了JS實(shí)現(xiàn)點(diǎn)擊網(wǎng)頁判斷是否安裝app并打開否則跳轉(zhuǎn)app store的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • 用VsCode編輯TypeScript的實(shí)現(xiàn)方法

    用VsCode編輯TypeScript的實(shí)現(xiàn)方法

    這篇文章主要介紹了用VsCode編輯TypeScript的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 屏蔽script注入小例子

    屏蔽script注入小例子

    有關(guān)script注入想必大家也有所了解,在本文將為大家介紹下如何屏蔽script注入,下面有個不錯的示例大家可以感受下
    2013-11-11
  • 教你巧用?import.meta?實(shí)現(xiàn)熱更新的問題

    教你巧用?import.meta?實(shí)現(xiàn)熱更新的問題

    import.meta?是一個給?JavaScript?模塊暴露特定上下文的元數(shù)據(jù)屬性的對象,它包含了這個模塊的信息,這篇文章主要介紹了巧用?import.meta?實(shí)現(xiàn)熱更新的問題,需要的朋友可以參考下
    2022-04-04
  • 標(biāo)準(zhǔn)的js無縫滾動效果

    標(biāo)準(zhǔn)的js無縫滾動效果

    這篇文章主要為大家詳細(xì)介紹了標(biāo)準(zhǔn)的js無縫滾動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • js和jquery使按鈕失效為不可用狀態(tài)的方法

    js和jquery使按鈕失效為不可用狀態(tài)的方法

    js和jquery如何使按鈕失效,很簡單,只要設(shè)置disabled屬性為true即為不可用狀態(tài)即可,下面有個簡單的示例,大家可以參考下
    2014-01-01
  • javascript之鼠標(biāo)拖動位置互換效果代碼

    javascript之鼠標(biāo)拖動位置互換效果代碼

    javascript之鼠標(biāo)拖動位置互換效果代碼...
    2007-11-11

最新評論

达拉特旗| 沾益县| 营口市| 沿河| 泌阳县| 长白| 南陵县| 抚宁县| 肥西县| 道真| 山阴县| 那坡县| 湾仔区| 竹溪县| 九寨沟县| 务川| 泰宁县| 武汉市| 阳东县| 大城县| 昔阳县| 当涂县| 吴江市| 固镇县| 鄂伦春自治旗| 云和县| 休宁县| 石台县| 河津市| 涞源县| 万山特区| 武清区| 晋宁县| 嘉鱼县| 永新县| 金溪县| 页游| 邢台县| 巴塘县| 安顺市| 禹州市|