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

js實(shí)現(xiàn)多個(gè)標(biāo)題吸頂效果

 更新時(shí)間:2020年01月08日 10:16:58   作者:扇子shanzi  
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)多個(gè)標(biāo)題吸頂效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

對(duì)于導(dǎo)航的吸頂效果,pc端和移動(dòng)端的需求可能有些差異。在pc端,我們通常只需要一個(gè)頂部導(dǎo)航;在移動(dòng)端,在滑動(dòng)頁(yè)面的時(shí)候,更需要多個(gè)標(biāo)題的吸頂(例如地區(qū)的選擇,需要將省份吸頂)。

單個(gè)標(biāo)題吸頂和多個(gè)標(biāo)題吸頂?shù)膮^(qū)別在于:多個(gè)標(biāo)題吸頂需要確定一個(gè)高度范圍,在這個(gè)范圍中只能有一個(gè)標(biāo)題吸頂,其他都是固定效果。

一、頁(yè)面布局及樣式

此處為了測(cè)試效果,用了幾個(gè)重復(fù)的section標(biāo)簽,大家根據(jù)實(shí)際需求編寫(xiě)布局和樣式。

<body>
 <ul id="container">
 <h1>實(shí)現(xiàn)多個(gè)標(biāo)題的吸頂</h1>
 <section>
  <div class="box">header1</div>
  <li>1</li>
  <li>1</li>
  <li>1</li>
  <li>1</li>
  <li>1</li>
  <li>1</li>
 </section>
 
 <!--設(shè)置多個(gè)如header1的子列表,窗口可以進(jìn)行滾動(dòng),此處省略-->
 
 <section>
  <div class="box">header5</div>
  <li>1</li>
  <li>1</li>
  <li>1</li>
  <li>1</li>
  <li>1</li>
  <li>1</li>
 </section>
 
 </ul>
</body>
<style type="text/css">
 * {
 padding: 0;
 margin: 0;
 }
 ul {
 width: 100%;
 }
 li {
 width: 200px;
 color: white;
 margin: 10px;
 list-style: none;
 border-radius: 5px;
 border: 1px solid #191970;
 background: #4169E1;
 text-align: center;
 }
 div {
 width: 100%;
 height: 30px;
 color: white;
 padding-left: 20px;
 background: #DC143C;
 }
 .box1 {
 position: fixed;
 top: 0;
 }
</style>

二、js的編寫(xiě)

1、獲取所有需要吸頂效果的標(biāo)題。這里的標(biāo)題最好用相同的布局和樣式,獲取時(shí)能夠更快捷和統(tǒng)一。

var box = document.getElementsByClassName('box'), //獲取所有需要吸頂效果的標(biāo)題
  section = document.getElementsByTagName('section'); //獲取所有子列表,后面有用

2、獲取標(biāo)題個(gè)數(shù)和定義一個(gè)數(shù)組,用來(lái)存放每個(gè)標(biāo)題到父元素的距離(offsetTop)。

var ot = [],  //存儲(chǔ)每個(gè)標(biāo)題的offsetTop
  len = box.length;   //標(biāo)題的個(gè)數(shù)

3、遍歷所有標(biāo)題,獲取offsetTop,并存入ot數(shù)組中。

for(let i=0; i<len; i++) {
 ot.push(box[i].offsetTop);  //獲取每個(gè)標(biāo)題的offsetTop
}

4、監(jiān)聽(tīng)window的滾動(dòng)事件,獲取scrollTop;如果滾動(dòng)高度位于第i個(gè)標(biāo)題的offsetTop和第i+1個(gè)標(biāo)題的offsetTop之間(例如滾動(dòng)的高度位于header1和header2的offsetTop之間,heade1吸頂),則第i個(gè)標(biāo)題添加box1樣式,實(shí)現(xiàn)吸頂。

window.onscroll = function () {
 //獲取滾動(dòng)的高度
 var st = document.documentElement.scrollTop || document.body.scrollTop;
 
 for(let i=0; i<len; i++) {
 if(st>ot[i] && st<ot[i+1]) { //滾動(dòng)時(shí)監(jiān)聽(tīng)位置,為標(biāo)題的吸頂設(shè)置一個(gè)現(xiàn)實(shí)范圍
  box[i].className = 'box box1';
 } else {
  box[i].className = 'box';
 }
 
 }
}

5、第四步中,有個(gè)問(wèn)題:當(dāng)滾動(dòng)道最后一個(gè)標(biāo)題(i)時(shí),無(wú)法獲取(i+1)。

解決方法:從第一步中獲得的section標(biāo)簽集合中拿出最后一個(gè)子列表(section[0]),然后獲取最后一個(gè)子列表的高度,計(jì)算出最后一個(gè)標(biāo)題的顯示高度范圍,并存入ot數(shù)組中。

//獲取最后一個(gè)子列表的高度,為了設(shè)置最后一個(gè)吸頂標(biāo)題的位置
//section[len-1].getBoundingClientRect().height
//此方法返回一個(gè)number
 
ot.push(box[len-1].offsetTop + section[len-1].getBoundingClientRect().height);

三、最后效果

完整js代碼

var box = document.getElementsByClassName('box'), //獲取所有需要吸頂效果的標(biāo)題
 section = document.getElementsByTagName('section'); //獲取所有子列表
 
var ot = [],       //存儲(chǔ)每個(gè)標(biāo)題的offsetTop
 len = box.length;   //標(biāo)題的個(gè)數(shù)
 
for(let i=0; i<len; i++) {
 ot.push(box[i].offsetTop);  //獲取每個(gè)標(biāo)題的offsetTop
}
 
//獲取最后一個(gè)子列表的高度,為了設(shè)置最后一個(gè)吸頂標(biāo)題的位置
//section[len-1].getBoundingClientRect().height
//此方法返回一個(gè)number
 
ot.push(box[len-1].offsetTop + section[len-1].getBoundingClientRect().height);
 
window.onscroll = function () {
 //獲取滾動(dòng)的高度
 var st = document.documentElement.scrollTop || document.body.scrollTop;
 
 for(let i=0; i<len; i++) {
 if(st>ot[i] && st<ot[i+1]) { //滾動(dòng)時(shí)監(jiān)聽(tīng)位置,為標(biāo)題的吸頂設(shè)置一個(gè)現(xiàn)實(shí)范圍
  box[i].className = 'box box1';
 } else {
  box[i].className = 'box';
 }
 
 }
}

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

相關(guān)文章

  • JavaScript游戲之是男人就下100層代碼打包

    JavaScript游戲之是男人就下100層代碼打包

    不知不覺(jué),就到了11月份了,其實(shí)我為啥要寫(xiě)js游戲,覺(jué)得游戲更能引起共鳴。11月份開(kāi)篇之作:是男人就下100層,相信大家都玩過(guò)。
    2010-11-11
  • 清除div下面的所有標(biāo)簽的方法

    清除div下面的所有標(biāo)簽的方法

    清除標(biāo)簽的方法有很多,下面有個(gè)不錯(cuò)的示例可以清楚div下面的所有標(biāo)簽,需要的朋友可以參考下
    2014-02-02
  • JS裝飾者模式和TypeScript裝飾器

    JS裝飾者模式和TypeScript裝飾器

    學(xué)習(xí)的目的是對(duì)裝飾者模式模式有進(jìn)一步的理解,并運(yùn)用在自己的項(xiàng)目中;對(duì)TypeScript裝飾器的理解,更好的使用裝飾器,例如在nodejsweb框架中、vue-property-decorator中,或者是自定義裝飾器,能熟練運(yùn)用并掌握其基本的實(shí)現(xiàn)原理。
    2021-04-04
  • js 獲取(接收)地址欄參數(shù)值的方法

    js 獲取(接收)地址欄參數(shù)值的方法

    當(dāng)?shù)刂窓诤袇?shù),我們可以再目標(biāo)頁(yè)面通過(guò)window.location.search來(lái)獲取我們需要的參數(shù)及其值,接下來(lái)為大家介紹下詳細(xì)獲取方法,感興趣的朋友可以參考下哈
    2013-04-04
  • jQuery中deferred對(duì)象使用方法詳解

    jQuery中deferred對(duì)象使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了jQuery中deferred對(duì)象使用方法,也就是延遲對(duì)象的使用方法,感興趣的小伙伴們可以參考一下
    2016-07-07
  • js中的屏蔽的使用示例

    js中的屏蔽的使用示例

    本文為大家介紹下js中的屏蔽的應(yīng)用;屏蔽網(wǎng)頁(yè)內(nèi)容選中、剪切、復(fù)制及拷屏總之你能想象的應(yīng)該都有,感興趣的朋友可以參考下,希望對(duì)大家學(xué)習(xí)js有所幫助
    2013-07-07
  • javascript發(fā)表評(píng)論或者留言時(shí)的展開(kāi)效果

    javascript發(fā)表評(píng)論或者留言時(shí)的展開(kāi)效果

    javascript發(fā)表評(píng)論或者留言時(shí)的展開(kāi)效果...
    2007-07-07
  • 利用原生JavaScript獲取元素樣式只是獲取而已

    利用原生JavaScript獲取元素樣式只是獲取而已

    原生JavaScript獲取樣式,是獲取樣式,不是設(shè)置樣式。若沒(méi)有給元素設(shè)置樣式值,則返回瀏覽器給予的默認(rèn)值
    2014-10-10
  • 理解Javascript文件動(dòng)態(tài)加載

    理解Javascript文件動(dòng)態(tài)加載

    這篇文章主要幫助大家理解Javascript文件動(dòng)態(tài)加載,解決了Javascript文件動(dòng)態(tài)加載時(shí)出現(xiàn)的錯(cuò)誤,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 用js限制網(wǎng)頁(yè)只在微信瀏覽器中打開(kāi)(或者只能手機(jī)端訪問(wèn))

    用js限制網(wǎng)頁(yè)只在微信瀏覽器中打開(kāi)(或者只能手機(jī)端訪問(wèn))

    這篇文章主要介紹了用js限制網(wǎng)頁(yè)只在微信瀏覽器中打開(kāi),很多電影站也是這么限制的,原因你懂的,需要的朋友可以參考下
    2020-01-01

最新評(píng)論

兴国县| 静宁县| 南京市| 格尔木市| 准格尔旗| 自贡市| 晋宁县| 邵阳市| 鄱阳县| 都兰县| 谢通门县| 陵水| 方山县| 灵山县| 治县。| 呼玛县| 平利县| 高州市| 香河县| 湖北省| 庄浪县| 鄂伦春自治旗| 南召县| 武冈市| 绥德县| 富裕县| 汕头市| 海伦市| 七台河市| 江西省| 民县| 聂荣县| 军事| 临城县| 岢岚县| 兴和县| 石柱| 夏河县| 应用必备| 唐山市| 海晏县|