国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js頁面滾動時層智能浮動定位實現(jQuery/MooTools)

2019-11-20 23:42:30
字體:
來源:轉載
供稿:網友

一、應用展示
關于層的智能浮動效果早在幾年前我就在國外的一些個人網站的垂直導航上見到了,現在似乎在國內一些商業網站上也屢見此效果,例如淘寶網的搜索結果頁的排序水平條,在默認狀態下,滾動條跟隨頁面滾動,如下:

淘寶網搜索頁排序水平條 張鑫旭-鑫空間-鑫生活

隨著頁面向下滾動,當此水平條接觸瀏覽器的上邊緣時,水平條獨立出來,不跟隨滾動條滾動了,如下圖所示:
淘寶網搜索頁水平條 張鑫旭-鑫空間-鑫生活

類似的效果在新浪微博上也有:
新浪微博上智能定位層 張鑫旭-鑫空間-鑫生活

當頁面滾動,新動態提示開始要淡出瀏覽器窗口的時候,其浮動于瀏覽器窗口的最上沿顯示,如下圖所示:
新浪微博智能浮動層 張鑫旭-鑫空間-鑫生活

此效果實現原理其實很簡單,本文就將展示其實現。 

二、實現原理

默認狀態就是默認狀態,什么事情也不用做,定位是absolute也好,static也好,都ok。關鍵是當瀏覽器滾動的時候,對象(要浮動的層)要移除瀏覽器界面視區的時候,修改其position屬性,讓其浮動在窗口的上沿顯示就可以了。最好的position屬性就是fixed了,可以在IE6+和其他瀏覽器下浮動層平滑固定定位,由于IE6前輩不支持fixed屬性,所以,后退一步,使用absolute屬性代替,但是會有副作用――滾動不平滑。但,這也是沒有辦法的事情了。

現在關鍵就是如何判斷當前層與瀏覽器窗口的上邊緣接觸呢?當浮動層與瀏覽器窗口上邊緣接觸的一瞬間,其頁面垂直偏移值與頁面的滾動高度其實是一致的,所以,用這個進行判斷就OK了,但是,如何獲得頁面上元素距離頁面的垂直距離呢?純粹的js代碼獲得此值還是比較麻煩的,好在JavaScript庫幫我們解決了這些工作,所以,我們的工作其實就很平坦,下面就將展示如何在jQuery庫以及MooTools庫下實現該效果。

三、jQuery下的層的智能浮動

方法代碼如下:

復制代碼 代碼如下:

$.fn.smartFloat = function() {
var position = function(element) {
var top = element.position().top, pos = element.css("position");
$(window).scroll(function() {
var scrolls = $(this).scrollTop();
if (scrolls > top) {
if (window.XMLHttpRequest) {
element.css({
position: "fixed",
top: 0
});
} else {
element.css({
top: scrolls
});
}
}else {
element.css({
position: "absolute",
top: top
});
}
});
};
return $(this).each(function() {
position($(this));
});
};

調用很簡單,直接一行代碼就ok了,例如下面:

$("#float").smartFloat();
妥妥兒的,就一小段綁定就實現了id為float的標簽有了智能浮動功能,效果描述就是:當id為float的元素在滾動的時候與瀏覽器上邊緣接觸時就不會再跟隨滾動條滾動了。

您可以狠狠地點擊這里:jQuery下的層的智能浮動demo

打開demo頁面,您會看到右側自詡羞澀的浮動層了,滾動頁面觀察效果:
jQuery智能浮動demo效果截圖 張鑫旭-鑫空間-鑫生活

四、MooTools下的層的智能浮動

與jQuery實現一樣,MooTools庫下也已經將此方法包裝了起來,代碼如下:

復制代碼 代碼如下:

var $smartFloat = function(elements) {
var position = function(element) {
var top = element.getPosition().y, pos = element.getStyle("position");
window.addEvent("scroll", function() {
var scrolls = this.getScroll().y;
if (scrolls > top) {
if (window.XMLHttpRequest) {
element.setStyles({
position: "fixed",
top: 0
});
} else {
element.setStyles({
top: scrolls
});
}
}else {
element.setStyles({
position: "absolute",
top: top
});
}
});
};
if ($type(elements) === "array") {
return elements.each(function(items) {
position(items);
});
} else if ($type(elements) === "element") {
position(elements);
}
};

使用也是非常的簡單,就一句代碼,同樣以id為float的標簽舉例,代碼如下:

$smartFloat($("float"));
您可以狠狠地點擊這里:MooTools下的層的智能浮動demo

滾動demo頁面的滾動條,當“羞澀”的浮動層與瀏覽器邊緣“接觸”的時候,就不再跟隨滾動條滾動了,如下圖所示:
層的智能浮動demo頁面 張鑫旭-鑫空間-鑫生活
來自張鑫旭

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 棋牌| 潜山县| 大洼县| 吴堡县| 新竹市| 洮南市| 江津市| 桑日县| 商城县| 塔城市| 枣庄市| 宜良县| 平泉县| 呼玛县| 建始县| 茶陵县| 杂多县| 莱州市| 乐清市| 郯城县| 泰安市| 东阳市| 巍山| 九龙县| 淮北市| 溧阳市| 新和县| 鹤峰县| 禄丰县| 遵义市| 鄂伦春自治旗| 阜康市| 凯里市| 大城县| 淮北市| 呼玛县| 乐清市| 平昌县| 宜黄县| 囊谦县| 邵武市|