使用CSS樣式"position:fixed"可以使div塊固定在一個固定位置,即使有捲軸也不會改變其位置。 position:fixed為許多開發者帶來了驚人的效果,然而當出現水平捲軸時,效果就不那麼容易接受了。有時候我們希望當出現水平捲軸時,div塊可以隨捲軸左右移動,實現垂直固定定位(fixed),水平相對定位(absolute)。本文提供一個解決方法,附jquery擴展源碼。
本文的實作方式是使用js來控制div塊隨捲軸水平滾動,原理就是當window物件發生scroll事件和resize事件使,更新div塊的left或right的值,使其相對瀏覽器左邊或右邊的位置即時改變。 div塊需要時position:fixed樣式修飾。
當div區塊在水平方向上是相對瀏覽器右邊固定的,那麼當window物件發生scroll或resize事件時,就更新其right樣式值,其值應該是:
var new_right = ($(window).scrollLeft() $(window).width () - $(document).width() original_right) 'px'
當div塊在水平方向上是相對瀏覽器左邊固定的,那麼當window對象發生scroll或resize事件時,就更新其left樣式值,其值應該是:
var new_left = (original_left - $(window).scrollLeft()) 'px'
上面程式碼中出現的original_left和original_right是最初div區塊的left和right值。完整的jquery擴充程式碼如下:
(function($) {
$.ScrollFixed = function(el, options){
var base = this;
base.$el = $(el);
base.el = el;
var target = base.$el;
var original_left = parseInt(target.css('left'));
var original_right = parseInt(target.css('right'));
var _fix_position = function(){
if(base.options.fixed == 'right'){
target.css('right', ($(window).scrollLeft() $(window).width() - $(document).width() original_right) 'px');
} else if(base.options.fixed == 'left'){
target.css('left', (original_left - $ (window).scrollLeft()) 'px');
}
};
var windowResize = function(){
_fix_position();
};
};
};
var windowScroll = function(){
_fix_position();
};
base.init = function(){
base.options = $.extend({}, $.ScrollFixed.defaultOptions, options);
$(window).resize(windowResize);
$(window).scroll(windowScroll);
_fix_position();
condowScroll);
_fix_position();
console.log( .options.fixed);
};
base.init();
};
$.ScrollFixed.defaultOptions = {
fixed:'left'
};
$.fn.scrollFixed = function(options){
return this.each(function(){
(new $.ScrollFixed(this, options));
(new $.ScrollFixed(this, options));
});
};
})(jQuery);
複製程式碼
複製程式碼複製程式碼複製程式碼 程式碼如下: $('#leftsider').scrollFixed({fixed:'left'}); $('#rightsider').scrollFixed( {fixed:'right'});