>웹 프론트엔드 >JS 튜토리얼 >jQuery scrollFix 스크롤 위치 지정 플러그인_javascript 기술

jQuery scrollFix 스크롤 위치 지정 플러그인_javascript 기술

WBOY
WBOY원래의
2016-05-16 16:06:261341검색

사용자가 페이지를 특정 위치로 위아래로 스크롤하면 대상 요소가 고정되기 시작합니다(위치: 고정). 사용자가 원래 위치로 다시 스크롤하면 대상 요소가 원래 상태로 돌아갑니다. 트리거 스크롤의 상대적인 화면 위치와 트리거는 IE6과 호환되는 스크롤 방향을 사용자 정의할 수 있습니다

[플러그인 매개변수]

$(".target_element").scrollFix( [ "top" | "bottom" | 길이(음수일 수 있으며 상대 하단을 나타냄), [ "top" | "bottom" ] ]);

첫 번째 매개변수: 선택사항, 기본값은 "top"입니다. 대상 요소가 화면을 기준으로 한 위치에 도달하면 고정이 트리거됩니다. 100,-200과 같은 값을 입력할 수 있습니다. 음수 값은 화면 하단을 기준으로 함을 의미합니다

첫 번째 매개변수: 선택 사항, 기본값은 고정된 스크롤 방향을 트리거하는 "top", 위에서 아래로 스크롤할 때 트리거를 의미하는 "top", 아래에서 위로 스크롤할 때 트리거를 의미하는 "bottom"입니다

【플러그인 다운로드】scrollFix(jb51.net).rar

코드 복사 코드는 다음과 같습니다.

f0ff38f95f97e9adaf2996656fde08962cacc6d41bbb37262a98f745aa00fbf0
4a26ca5b0e654502c38f3e7ca59cf4a42cacc6d41bbb37262a98f745aa00fbf0
e388a4556c0f65e1904146cc1a846bee38de4fc0f1377dbf639abf16409266be【코드 예】54bdf357c58b8a65c66d7c19c8e4d11494b3e26ee717c64999d7867364b1b4a3
712231cdf4e4ac4bb2ff1b81fe71f40e
9a9ea990ed094d520d462813a1ec64e9$("#a").scrollFix(-200);
dc6dce4a544fdca2df29d5ac0ea9906b아래 200px까지 스크롤하면 수정되기 시작하며 기본적으로 위에서 아래로 트리거됩니다16b28748ea4df4d9c2150843fecfba68
16b28748ea4df4d9c2150843fecfba68
16b28748ea4df4d9c2150843fecfba68
712231cdf4e4ac4bb2ff1b81fe71f40e
b72541b518b0a6574abc25acc64fb1b3$("#b").scrollFix(200,"bottom");
dc6dce4a544fdca2df29d5ac0ea9906b200px 이상으로 스크롤할 때 수정 시작, 아래에서 위로 트리거하려면 "bottom"을 지정하세요16b28748ea4df4d9c2150843fecfba68
16b28748ea4df4d9c2150843fecfba68
16b28748ea4df4d9c2150843fecfba68
712231cdf4e4ac4bb2ff1b81fe71f40e
259af074ea388877c34932e19d44846a$("#c").scrollFix("top","top");
dc6dce4a544fdca2df29d5ac0ea9906b위의 0 거리까지 스크롤할 때 수정 시작, 위에서 아래로 트리거하려면 "top"을 지정하세요16b28748ea4df4d9c2150843fecfba68
16b28748ea4df4d9c2150843fecfba68
16b28748ea4df4d9c2150843fecfba68
712231cdf4e4ac4bb2ff1b81fe71f40e
db713c7245e702d694e6f3f98ad034fb$("#d").scrollFix("bottom","top");
dc6dce4a544fdca2df29d5ac0ea9906b아래 0 거리까지 스크롤할 때 수정 시작, 아래에서 위로 트리거하려면 "bottom"을 지정하세요16b28748ea4df4d9c2150843fecfba68
16b28748ea4df4d9c2150843fecfba68
16b28748ea4df4d9c2150843fecfba68

구현 코드:
코드 복사 코드는 다음과 같습니다.

4ec11beb6c39d0703d1751d203c17053// d41da8a09ceffa334c575ce4205f56332cacc6d41bbb37262a98f745aa00fbf0

핵심 코드:

;(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" &#63; 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);
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.