jQuery scrollFix滾動定位插件


【插件功能】

當用戶向上或向下滾動頁面到一定位置時,目標元素開始固定定位(position:fixed),當回滾到原位置時目標元素恢復到原狀態,可以定制觸發滾動相對屏幕位置和觸發滾動方向,兼容IE6

【插件參數】

$(".target_element").scrollFix( [ "top" | "bottom" | length(可以為負,表示相對bottom), [ "top" | "bottom" ] ]);

第一個參數: 可選,默認為"top",當目標元素到了屏幕相對的位置時開始觸發固定,可以填一個數值,如100,-200 ,負值表示相對於屏幕下方

第一個參數: 可選,默認為"top",表示觸發固定的滾動方向,"top"表示從上向下滾動時觸發,"bottom"表示從下向上滾動時觸發

【下載插件】

下載插件(download)

【代碼示例】

$("#a").scrollFix(-200);
滾動到距離下面200px時開始固定,默認從上到下觸發
 
$("#b").scrollFix(200,"bottom");
滾動到距離上面200px時開始固定,指定"bottom"從下到上觸發
 
$("#c").scrollFix("top","top");
滾動到距離上面0時開始固定,指定"top"從上到下觸發
 
$("#d").scrollFix("bottom","top");
滾動到距離下面0時開始固定,指定"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);

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM