jQuery scrollFix滾動定位插件
當用戶向上或向下滾動頁面到一定位置時,目標元素開始固定定位(position:fixed),當回滾到原位置時目標元素恢復到原狀態(tài),可以定制觸發(fā)滾動相對屏幕位置和觸發(fā)滾動方向,兼容IE6
【插件參數(shù)】
$(".target_element").scrollFix( [ "top" | "bottom" | length(可以為負,表示相對bottom), [ "top" | "bottom" ] ]);
第一個參數(shù): 可選,默認為"top",當目標元素到了屏幕相對的位置時開始觸發(fā)固定,可以填一個數(shù)值,如100,-200 ,負值表示相對于屏幕下方
第一個參數(shù): 可選,默認為"top",表示觸發(fā)固定的滾動方向,"top"表示從上向下滾動時觸發(fā),"bottom"表示從下向上滾動時觸發(fā)
【下載插件】scrollFix(jb51.net).rar
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="scrollFix.js"></script>
<p><span style="color: #808000;">【代碼示例】</span></p>
<div class="d">
<div class="demo" style="background: #ff6000;">$("#a").scrollFix(-200);
<div>滾動到距離下面200px時開始固定,默認從上到下觸發(fā)</div>
</div>
</div>
<div class="d">
<div class="demo" style="background: #82BF00;">$("#b").scrollFix(200,"bottom");
<div>滾動到距離上面200px時開始固定,指定"bottom"從下到上觸發(fā)</div>
</div>
</div>
<div class="d">
<div class="demo" style="background: #0C9CAE;">$("#c").scrollFix("top","top");
<div>滾動到距離上面0時開始固定,指定"top"從上到下觸發(fā)</div>
</div>
</div>
<div class="d">
<div class="demo" style="background: #478FCE;">$("#d").scrollFix("bottom","top");
<div>滾動到距離下面0時開始固定,指定"bottom"從下到上觸發(fā)</div>
</div>
</div>
實現(xiàn)代碼:
<script type="text/javascript">// <![CDATA[
window.onload=function(){
$(".demo:eq(0)").scrollFix(-200);
$(".demo:eq(1)").scrollFix(200,"bottom");
$(".demo:eq(2)").scrollFix("top","top");
$(".demo:eq(3)").scrollFix("bottom","bottom");
}
// ]]></script>
核心代碼:
;(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) { //恢復前只執(zhí)行一次,減少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);
相關文章
jQuery.extend()的實現(xiàn)方式詳解及實例
extend()函數(shù)是jQuery的基礎函數(shù)之一,作用是擴展現(xiàn)有的對象2013-06-06JavaScript裝箱及拆箱boxing及unBoxing用法解析
這篇文章主要介紹了JavaScript裝箱及拆箱boxing及unBoxing用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06JavaScript實現(xiàn)鼠標滑過圖片變換效果的方法
這篇文章主要介紹了JavaScript實現(xiàn)鼠標滑過圖片變換效果的方法,涉及javascript控制鼠標事件及樣式變換的技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04Extjs4實現(xiàn)兩個GridPanel之間數(shù)據(jù)拖拽功能具體方法
這篇文章主要介紹了Extjs4實現(xiàn)兩個GridPanel之間數(shù)據(jù)拖拽功能具體方法,有需要的朋友可以參考一下2013-11-11