全面解析Bootstrap中transition、affix的使用方法
一、Transition(過(guò)濾)
作為一個(gè)基礎(chǔ)支持的組件,被其他組件多次引用。實(shí)現(xiàn)根據(jù)瀏覽器支持transition的能力,然后綁定動(dòng)畫(huà)的結(jié)束事件;
首先:創(chuàng)建一個(gè)Element;
然后:迭代查看此元素支持的transition動(dòng)畫(huà)名稱(chēng)
Transition實(shí)現(xiàn)的技巧,主要是重寫(xiě)了jquery的event對(duì)象,代碼如下:
$(function () { $.support.transition = transitionEnd() if (!$.support.transition) return $.event.special.bsTransitionEnd = { bindType: $.support.transition.end, delegateType: $.support.transition.end, handle: function (e) { if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) } } })
二、Affix(自動(dòng)浮動(dòng)定位)
1、Target:參數(shù)表示其定位參考節(jié)點(diǎn)(應(yīng)該是產(chǎn)生滾動(dòng)條的父容器對(duì)象),默認(rèn)是window
2、Data-offset設(shè)置的top和bottom值,只會(huì)用于計(jì)算表達(dá)式,不會(huì)設(shè)置到css中
3、三種位置定位樣式類(lèi):
3.1、Affix-top:到達(dá)頁(yè)面頂部的時(shí)候會(huì)添加的樣式
3.2、Affix:在頁(yè)面中部的時(shí)候會(huì)添加的樣式
3.3、Affix-bottom:在頁(yè)面底部的時(shí)候會(huì)添加的樣式
4、處理公式:
4.1、Top:traget的滾動(dòng)條高度(scrollTop)< 元素設(shè)定離頂位置的距離(offsetTop)(首次判斷)
4.1.1、scrollTop設(shè)置為:元素本身定位的top(元素當(dāng)前定位離文檔原點(diǎn)的距離)(非首次)
4.2、getPinnedOffset:獲取粘住元素top – target滾動(dòng)條的top
4.3、bottom:如果粘住元素是首次bottom定位的時(shí)候,那么bottom就是 target滾動(dòng)條高度 + target元素的高度 >= 整個(gè)文檔滾動(dòng)條高度 – 粘住元素距離底部的高度
4.3.1、如果是非首次bottom定位
1)、如果offsetTop(元素設(shè)定離頂位置的距離)不為空,target的top ?。etpinnedOffset的值 > 粘住元素當(dāng)前定位到top的值
2)、如果offsetTop為空,target的top ?。?target元素的高度 > 文檔高度 – 粘住元素距離底部的高度
4、能改變粘住元素的只有他的top,top值為:文檔高度 — 粘住元素高度 — 粘住元素距離底部的高度
5、坑之所在:
1)、top和bottom一起使用的時(shí)候,會(huì)出現(xiàn)沖突,原因:
Affix-bottom,也就是到達(dá)頁(yè)面底部的時(shí)候,bootstrap是用offset來(lái)設(shè)置的top值,給元素加了position:relative值,這就導(dǎo)致在回到頁(yè)面頂部后,再次向下滾動(dòng)時(shí)候,沒(méi)有任何效果
原因:行內(nèi)樣式設(shè)置的relative會(huì)覆蓋class中設(shè)置的fixed樣式
6、總結(jié)
1)、在top情況表現(xiàn)良好,在bottom情況下需要自己加入手動(dòng)控制
2)、應(yīng)用affix控件,至少要自己重寫(xiě)affix樣式,用于控制粘住條的定位。
如果大家還想深入學(xué)習(xí),可以點(diǎn)擊這里進(jìn)行學(xué)習(xí),再為大家附一個(gè)精彩的專(zhuān)題:Bootstrap學(xué)習(xí)教程
本文系列教程整理到:Bootstrap基礎(chǔ)教程 專(zhuān)題中,歡迎點(diǎn)擊學(xué)習(xí)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)javascript程序設(shè)計(jì)有所幫助。
相關(guān)文章
JS實(shí)現(xiàn)將數(shù)字金額轉(zhuǎn)換為大寫(xiě)人民幣漢字的方法
這篇文章主要介紹了JS實(shí)現(xiàn)將數(shù)字金額轉(zhuǎn)換為大寫(xiě)人民幣漢字的方法,涉及javascript字符串與數(shù)組操作的相關(guān)技巧,需要的朋友可以參考下2016-08-08JavaScript設(shè)計(jì)模式--簡(jiǎn)單工廠模式實(shí)例分析【XHR工廠案例】
這篇文章主要介紹了JavaScript設(shè)計(jì)模式--簡(jiǎn)單工廠模式,結(jié)合實(shí)例形式分析了JavaScript設(shè)計(jì)模式中簡(jiǎn)單工廠模式原理與XHR工廠應(yīng)用案例,需要的朋友可以參考下2020-05-05JavaScript實(shí)現(xiàn)點(diǎn)擊按鈕切換網(wǎng)頁(yè)背景色的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)點(diǎn)擊按鈕切換網(wǎng)頁(yè)背景色的方法,涉及JavaScript基于鼠標(biāo)事件動(dòng)態(tài)操作頁(yè)面元素樣式的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10js實(shí)現(xiàn)登錄注冊(cè)框手機(jī)號(hào)和驗(yàn)證碼校驗(yàn)(前端部分)
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)登錄注冊(cè)框手機(jī)號(hào)和驗(yàn)證碼校驗(yàn)的前端部分代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09JavaScript插件化開(kāi)發(fā)教程 (三)
前面我們學(xué)習(xí)了jQuery的方式開(kāi)發(fā)插件,講訴的都是些基礎(chǔ)的理論知識(shí),今天開(kāi)始,我們就來(lái)實(shí)戰(zhàn)一下,學(xué)習(xí)開(kāi)發(fā)自己的插件庫(kù)。2015-01-01js中方法重載如何實(shí)現(xiàn)?以及函數(shù)的參數(shù)問(wèn)題
js中沒(méi)有辦法直接實(shí)現(xiàn)方法重載,但每一個(gè)函數(shù)都有一個(gè)特殊的參數(shù)arguments,利用它可以實(shí)現(xiàn)方法的重載,具體示例如下2013-08-08JS監(jiān)聽(tīng)dom高度變化幾種常用方法總結(jié)
我們?cè)陂_(kāi)發(fā)中會(huì)遇到一些需求,需要監(jiān)聽(tīng)元素變化,比如元素屬性變化,元素大小變化,這篇文章主要給大家介紹了關(guān)于JS監(jiān)聽(tīng)dom高度變化幾種常用方法的相關(guān)資料,需要的朋友可以參考下2023-10-10IE7中javascript操作CheckBox的checked=true不打勾的解決方法
在IE7下,生成的Checkbox無(wú)法正確的打上勾。 原因是 chkbox控件還沒(méi)初始化(appendChild),就開(kāi)始操作它的結(jié)果2009-12-12