사용자가 페이지를 특정 위치로 위아래로 스크롤하면 대상 요소가 고정되기 시작합니다(위치: 고정). 사용자가 원래 위치로 다시 스크롤하면 대상 요소가 원래 상태로 돌아갑니다. 트리거 스크롤의 상대적인 화면 위치와 트리거는 IE6과 호환되는 스크롤 방향을 사용자 정의할 수 있습니다
[플러그인 매개변수]
$(".target_element").scrollFix( [ "top" | "bottom" | 길이(음수일 수 있으며 상대 하단을 나타냄), [ "top" | "bottom" ] ]);
첫 번째 매개변수: 선택사항, 기본값은 "top"입니다. 대상 요소가 화면을 기준으로 한 위치에 도달하면 고정이 트리거됩니다. 100,-200과 같은 값을 입력할 수 있습니다. 음수 값은 화면 하단을 기준으로 함을 의미합니다
첫 번째 매개변수: 선택 사항, 기본값은 고정된 스크롤 방향을 트리거하는 "top", 위에서 아래로 스크롤할 때 트리거를 의미하는 "top", 아래에서 위로 스크롤할 때 트리거를 의미하는 "bottom"입니다
【플러그인 다운로드】scrollFix(jb51.net).rar
핵심 코드:
;(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);