這篇文章主要介紹了jQuery scrollFix滾動定位插件,當用戶向上或向下滾動頁面到一定位置時,目標元素開始固定定位(position:fixed),當回滾到原位置時目標元素恢復到原狀態,需要的朋友可以參考下
當用戶向上或向下滾動頁面到一定位置時,目標元素開始固定定位(position:fixed),當回滾到原位置時目標元素恢復到原狀態,可以定制觸發滾動相對屏幕位置和觸發滾動方向,兼容IE6
【插件參數】
$(".target_element").scrollFix( [ "top" | "bottom" | length(可以為負,表示相對bottom), [ "top" | "bottom" ] ]);
第一個參數: 可選,默認為"top",當目標元素到了屏幕相對的位置時開始觸發固定,可以填一個數值,如100,-200 ,負值表示相對于屏幕下方
第一個參數: 可選,默認為"top",表示觸發固定的滾動方向,"top"表示從上向下滾動時觸發,"bottom"表示從下向上滾動時觸發
實現代碼:
核心代碼:
- ;(function($) {
- jQuery.fn.scrollFix = function(height, dir) {
- height = height || 0;
- height = height == "top" ? 0 : height;
- return this.each(function() {
- if (height == "bottom") {
- height = document.documentElement.clientHeight - this.scrollHeight;
- } else if (height < 0) {
- height = document.documentElement.clientHeight - this.scrollHeight + height;
- }
- var that = $(this),
- oldHeight = false,
- p, r, l = that.offset().left;
- dir = dir == "bottom" ? dir : "top"; //默認滾動方向向下
- if (window.XMLHttpRequest) { //非ie6用fixed
- function getHeight() { //>=0表示上面的滾動高度大于等于目標高度
- return (document.documentElement.scrollTop || document.body.scrollTop) + height - that.offset().top;
- }
- $(window).scroll(function() {
- if (oldHeight === false) {
- if ((getHeight() >= 0 && dir == "top") || (getHeight() <= 0 && dir == "bottom")) {
- oldHeight = that.offset().top - height;
- that.css({
- position: "fixed",
- top: height,
- left: l
- });
- }
- } else {
- if (dir == "top" && (document.documentElement.scrollTop || document.body.scrollTop) < oldHeight) {
- that.css({
- position: "static"
- });
- oldHeight = false;
- } else if (dir == "bottom" && (document.documentElement.scrollTop || document.body.scrollTop) > oldHeight) {
- that.css({
- position: "static"
- });
- oldHeight = false;
- }
- }
- });
- } else { //for ie6
- $(window).scroll(function() {
- if (oldHeight === false) { //恢復前只執行一次,減少reflow
- if ((getHeight() >= 0 && dir == "top") || (getHeight() <= 0 && dir == "bottom")) {
- oldHeight = that.offset().top - height;
- r = document.createElement("span");
- p = that[0].parentNode;
- p.replaceChild(r, that[0]);
- document.body.appendChild(that[0]);
- that[0].style.position = "absolute";
- }
- } else if ((dir == "top" && (document.documentElement.scrollTop || document.body.scrollTop) < oldHeight) || (dir == "bottom" && (document.documentElement.scrollTop || document.body.scrollTop) > oldHeight)) { //結束
- that[0].style.position = "static";
- p.replaceChild(that[0], r);
- r = null;
- oldHeight = false;
- } else { //滾動
- that.css({
- left: l,
- top: height + document.documentElement.scrollTop
- })
- }
- });
- }
- });
- };
- })(jQuery);
新聞熱點
疑難解答
圖片精選