我有一個運行在www.blisshair.com.au上的JQUERY腳本。小Jquery問題
該腳本將3個左側div設置爲粘滯狀態,即當用戶滾動div後面時。 我一直在試圖讓jquery在名爲wholewrap的div上找到高度(顧名思義就是整個站點的包裝)。 一旦我得到了這個值,我想看看它是否小於某個值(目前我正在嘗試1500px - 試驗和錯誤以查看哪個工作正常)。 如果wholewrap的高度小於我的預定大小,那麼我希望setting2變量反映一個尺寸,否則反映另一個尺寸。
這是我的代碼。我想要做的就是將setting2的高度設置爲div wholewrap的高度(以阻止www.blisshair.com.au上的溢出問題)我已經添加了整個JS文件,因爲我不確定它在哪裏腳麻:
function StickyScroller(obj, options)
{
//Store function scope
var $this = this;
//Store initial top and left/right values
var top = $(obj).css('top');
var left = $(obj).css('left');
var right = $(obj).css('right');
var scroll = 0;
var tempScroll = 0;
//------------------------------------------------------------
// Set default property values
//------------------------------------------------------------
var defaults = {
start: 0,
end: 1000,
interval: 400,
margin: parseInt(top, 10),
range: 400
}, settings = jQuery.extend(defaults,options);
obj = $(obj);
settings.index = 0;
settings.oldIndex = 0;
//Accessors for settings
GetSet.getters({scope: $this, obj: settings});
//------------------------------------------------------------//
// Callback Functions //
//------------------------------------------------------------//
var Callback = {};
Callback.newIndex = function(){}; //When the index changes
Callback.limbo = function(){}; //When scroller not in range
Callback.scroll = function(){}; //On window scroll
//Get setters for Callback functions
GetSet.setters({scope: this, prefix: "on", obj: Callback});
//=========================================================//
//Public distanceFrom
//Purpose: Determines the distance in pixels between
// the scroller and an index
//Parameters:
// index: The index whose distance from scroller will be calculated
//Postcondition: Returns an integer
//=========================================================//
this.distanceFrom = function(index)
{
tempScroll = $(window).scrollTop();
//Check for both references: "Top" of the range and "bottom"
var top = index*settings.interval;
var bottom = index*settings.interval + settings.range;
var distanceFromTop = Math.abs(tempScroll-top);
var distanceFromBottom = Math.abs(tempScroll-bottom);
//Return the smallest distance
if(distanceFromTop < distanceFromBottom)
{
return distanceFromTop;
}
else
{
return distanceFromBottom;
}
};
var whwrap = $("#wholewrap").height();
var wrap2 = $("#wrap2").height();
var mwrapEDIT = $("#middlewrap").height();
var mwrap = (mwrapEDIT * .8);
if(whwrap < 1500)
{
var setting2 = wrap2;
}
else
{
var setting2 = mwrap;
}
//=========================================================//
//Public closestIndex
//Purpose: Determines the closest index
//Postcondition: Returns the closest index as an integer
//=========================================================//
this.closestIndex = function()
{
//If index is 0, automatically return 1
if(settings.index === 0)
{
return 1;
}
//Distance from next/previous index
var dPrev = this.distanceFrom(settings.index-1);
var dNext = this.distanceFrom(settings.index+1);
//Return the index associated with the smallest distance
if(dPrev <= dNext)
{
return settings.index-1;
}
else
{
return settings.index+1;
}
};
//=========================================================//
//Private getIndex
//Purpose: returns index
//=========================================================//
var getIndex = function()
{
tempScroll = $(window).scrollTop() + settings.margin;
//Make sure movement would be in the bounds
if(tempScroll > settings.start && tempScroll < setting2)
{
//Possible new index
tempIndex = Math.floor((tempScroll-settings.start)/settings.interval);
//Make sure the index is different before reassigning
//or executing the callback
if(tempIndex !== settings.index)
{
//Store old index
settings.oldIndex = settings.index;
//Assign new index
settings.index = tempIndex;
}
}
//If tempScroll goes beyond end mark, set distance at end mark
else if(tempScroll >= setting2)
{
settings.oldIndex = settings.index;
settings.index = Math.floor((setting2-settings.start)/settings.interval);
}
//If tempScroll goes beyond beginning mark, set distance at start
else
{
settings.oldIndex = settings.index;
settings.index = 0;
}
};
//=========================================================//
//Public firstIndex
//Purpose: Returns first index
//Postcondition: Returns an integer
//=========================================================//
this.firstIndex = function()
{
return 0;
};
//=========================================================//
//Public lastIndex
//Purpose: Returns last index
//Postcondition: Returns an integer
//=========================================================//
this.lastIndex = function()
{
return Math.floor((setting2-settings.start)/settings.interval);
};
//=========================================================//
//Public inRange
//Purpose: Determines if the scroller is in interval range
//Postcondition: Returns boolean
//=========================================================//
this.inRange = function()
{
var scroll = $(window).scrollTop() - settings.start + settings.margin;
var inRange = (scroll >= settings.index * settings.interval) &&
(scroll <= (settings.index*settings.interval + settings.range));
return inRange;
};
//------------------------------------------------------------//
// On Browser Scroll //
//------------------------------------------------------------//
var wrap = $('<div id="scrollcontainer">').css(
{
width: obj.width(),
height: obj.height(),
position: "absolute"
});
obj.wrap(wrap);
$(window).scroll(function()
{
scroll = $(window).scrollTop() + settings.margin;
//Get the current index
getIndex();
//If scroll less than beginning, set back to beginning
if(scroll < settings.start)
{
$(obj).css({
position : 'absolute',
top: 0,
left: 0,
right: 0});
$("#scrollcontainer").css({
position : 'absolute',
top: settings.start,
left: left,
right: right});
}
//If scroll greater than ending position, set to end
else if(scroll > setting2)
{
$(obj).css({
position : 'absolute',
top: 0,
left: 0,
right: 0});
$("#scrollcontainer").css({
position : 'absolute',
top: setting2,
left: left,
right: right});
}
//Make sure we stay in the specified boundaries
else
{
//Put back to fixed
$(obj).css({
position : 'fixed',
top: settings.margin,
left: left,
right: right});
}
//If in the specified range and a new index, do the callback
if(settings.oldIndex !== settings.index)
{
Callback.newIndex(settings.index);
}
//Do the "limbo" call back, which is a callback that executes when
//the scroller is not in the range, but still between start and end
if(!$this.inRange() && scroll > settings.start && scroll < setting2)
{
Callback.limbo(settings.index);
}
//Do the scroll callback regardless of what happens
Callback.scroll(settings.index);
});
}
我在正確的軌道上?
謝謝。
它在Google Chrome上對我來說工作得很好。 – 2012-02-29 17:56:58
剛下載的Chrome瀏覽器,它有相同的問題。當滾動到頁面的最底部時,第三個左div與頁腳重疊。我的屏幕分辨率是1280 * 1024 – Nik 2012-02-29 18:11:14
它在http://blisshair.com.au/bookonline.php – Nik 2012-02-29 18:32:26