jquery實(shí)現(xiàn)的讓超出顯示范圍外的導(dǎo)航自動固定屏幕最頂上
更新時間:2011年09月22日 19:38:25 作者:
經(jīng)常會遇到這樣的情況,當(dāng)頁面展示內(nèi)容過長時,想點(diǎn)導(dǎo)航切換欄目,就得把滾動條拉回到頂上,這樣操作總不太人性化,能不能讓導(dǎo)航超出顯示范圍外時自動貼在屏幕最頂上呢?答案肯定是能的。如果不太明白,把滾動條拉到下面點(diǎn),看下我博客是效果就明白了。
其實(shí)實(shí)現(xiàn)起來并不難,我們先把實(shí)現(xiàn)流程大致想一下,首先,如果導(dǎo)航在顯示范圍內(nèi),就不用做修改。當(dāng)導(dǎo)航超出顯示范圍,也就是導(dǎo)航距離屏幕頂部的距離小于0的時候,我們要讓它浮動在屏幕頂上,然后大于0的時候,進(jìn)行一個復(fù)原操作,原理就是這么簡單,大致看下效果圖吧

$().ready(function(){
//導(dǎo)航距離屏幕頂部距離
var _defautlTop = $("#navigator").offset().top - $(window).scrollTop();
//導(dǎo)航距離屏幕左側(cè)距離
var _defautlLeft = $("#navigator").offset().left - $(window).scrollLeft();
//導(dǎo)航默認(rèn)樣式記錄,還原初始樣式時候需要
var _position = $("#navigator").css('position');
var _top = $("#navigator").css('top');
var _left = $("#navigator").css('left');
var _zIndex = $("#navigator").css('z-index');
//鼠標(biāo)滾動事件
$(window).scroll(function(){
if($(this).scrollTop() > _defautlTop){
//IE6不認(rèn)識position:fixed,單獨(dú)用position:absolute模擬
if($.browser.msie && $.browser.version=="6.0"){
$("#top").css({'position':'absolute','top':eval(document.documentElement.scrollTop),'left':_defautlLeft,'z-index':99999});
//防止出現(xiàn)抖動
$("html,body").css({'background-image':'url(about:blank)','background-attachment':'fixed'});
}else{
$("#navigator").css({'position':'fixed','top':0,'left':_defautlLeft,'z-index':99999});
}
}else{
$("#navigator").css({'position':_position,'top':_top,'left':_left,'z-index':_zIndex});
}
});
});
沒有太多好講的,需要注意的一點(diǎn)就是,IE6不認(rèn)識position:fixed,需要用position:absolute去模擬,然后實(shí)時計算出top的值,另外需要給html和body加兩個樣式,防止?jié)L動的時候出現(xiàn)抖動,具體可以了解《完美解決IE6不支持position:fixed的bug》。
另外需要注意的一點(diǎn)就是,導(dǎo)航的寬度必須是固定值,不能是auto或者100%因?yàn)閒ixed和absolute都不認(rèn)識,當(dāng)然你也可以手動獲取到導(dǎo)航的寬度,然后寫到浮動導(dǎo)航樣式里,不過有個前提,導(dǎo)航原先樣式里不能有:position:relative,情況可能比較多,最簡單的方法還是把導(dǎo)航寬度定死。
以上代碼可以復(fù)制復(fù)制到后臺設(shè)置的HTML頁腳代碼里,如果遇到浮動導(dǎo)航寬度出問題了,就參考我剛才做的處理辦法解決吧。

復(fù)制代碼 代碼如下:
$().ready(function(){
//導(dǎo)航距離屏幕頂部距離
var _defautlTop = $("#navigator").offset().top - $(window).scrollTop();
//導(dǎo)航距離屏幕左側(cè)距離
var _defautlLeft = $("#navigator").offset().left - $(window).scrollLeft();
//導(dǎo)航默認(rèn)樣式記錄,還原初始樣式時候需要
var _position = $("#navigator").css('position');
var _top = $("#navigator").css('top');
var _left = $("#navigator").css('left');
var _zIndex = $("#navigator").css('z-index');
//鼠標(biāo)滾動事件
$(window).scroll(function(){
if($(this).scrollTop() > _defautlTop){
//IE6不認(rèn)識position:fixed,單獨(dú)用position:absolute模擬
if($.browser.msie && $.browser.version=="6.0"){
$("#top").css({'position':'absolute','top':eval(document.documentElement.scrollTop),'left':_defautlLeft,'z-index':99999});
//防止出現(xiàn)抖動
$("html,body").css({'background-image':'url(about:blank)','background-attachment':'fixed'});
}else{
$("#navigator").css({'position':'fixed','top':0,'left':_defautlLeft,'z-index':99999});
}
}else{
$("#navigator").css({'position':_position,'top':_top,'left':_left,'z-index':_zIndex});
}
});
});
沒有太多好講的,需要注意的一點(diǎn)就是,IE6不認(rèn)識position:fixed,需要用position:absolute去模擬,然后實(shí)時計算出top的值,另外需要給html和body加兩個樣式,防止?jié)L動的時候出現(xiàn)抖動,具體可以了解《完美解決IE6不支持position:fixed的bug》。
另外需要注意的一點(diǎn)就是,導(dǎo)航的寬度必須是固定值,不能是auto或者100%因?yàn)閒ixed和absolute都不認(rèn)識,當(dāng)然你也可以手動獲取到導(dǎo)航的寬度,然后寫到浮動導(dǎo)航樣式里,不過有個前提,導(dǎo)航原先樣式里不能有:position:relative,情況可能比較多,最簡單的方法還是把導(dǎo)航寬度定死。
以上代碼可以復(fù)制復(fù)制到后臺設(shè)置的HTML頁腳代碼里,如果遇到浮動導(dǎo)航寬度出問題了,就參考我剛才做的處理辦法解決吧。
您可能感興趣的文章:
- jQuery實(shí)現(xiàn)的導(dǎo)航條切換可顯示隱藏
- 用jQuery實(shí)現(xiàn)一些導(dǎo)航條切換,顯示隱藏的實(shí)例代碼
- jquery scrollTop方法根據(jù)滾動像素顯示隱藏頂部導(dǎo)航條
- JQuery實(shí)現(xiàn)鼠標(biāo)滑過顯示導(dǎo)航下拉列表
- 基于jquery實(shí)現(xiàn)導(dǎo)航菜單高亮顯示(兩種方法)
- 基于jquery實(shí)現(xiàn)頁面滾動時頂部導(dǎo)航顯示隱藏
- jQuery實(shí)現(xiàn)左側(cè)導(dǎo)航模塊的顯示與隱藏效果
- jquery實(shí)現(xiàn)隱藏與顯示動畫效果/輸入框字符動態(tài)遞減/導(dǎo)航按鈕切換
- php+jQuery實(shí)現(xiàn)的三級導(dǎo)航欄下拉菜單顯示效果
- jQuery實(shí)現(xiàn)的導(dǎo)航條點(diǎn)擊后高亮顯示功能示例
相關(guān)文章
jquery入門—選擇器實(shí)現(xiàn)隔行變色實(shí)例代碼
JQuery入門—選擇器實(shí)現(xiàn)隔行變色如何實(shí)現(xiàn)呢?JQuery選擇器繼承了CSS、path語音的部分語法,允許通過標(biāo)簽名、屬性名、內(nèi)容對DOM元素進(jìn)行快速、準(zhǔn)確的選擇,接下來詳細(xì)介紹,需要的朋友可以參考下2013-01-01探討JQUERY JSON的反序列化類 using問題的解決方法
本篇文章是對JQUERY JSON的反序列化類 using問題的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12jQuery選擇器源碼解讀(六):Sizzle選擇器匹配邏輯分析
這篇文章主要介紹了jQuery選擇器源碼解讀(六):Sizzle選擇器匹配邏輯分析,,需要的朋友可以參考下2015-03-03JQuery使用index方法獲取Jquery對象數(shù)組下標(biāo)的方法
這篇文章主要介紹了JQuery使用index方法獲取Jquery對象數(shù)組下標(biāo)的方法,涉及jQuery中index方法的使用技巧,需要的朋友可以參考下2015-05-05jQuery實(shí)現(xiàn)自動調(diào)用和觸發(fā)某個事件的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)自動調(diào)用和觸發(fā)某個事件的方法,結(jié)合實(shí)例形式列舉分析了jQuery事件觸發(fā)的常見操作技巧,需要的朋友可以參考下2016-11-11JQueryMiniUI按照時間進(jìn)行查詢的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狫QueryMiniUI按照時間進(jìn)行查詢的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06