我做了一個jQuery插件,適用於單個元素時工作正常。
當我將它應用到另一個元素時,以前的停止行爲應該如此。
這樣,只有應用的最後一個元素正在工作。
當開發插件創建用於所有元素的前提時,我會考慮什麼?如何將自定義jQuery插件應用於多個元素?
這是我做插件的方式:
(function($) {
$.fn.scrollabix = function(params) {
return this.each(function(){
// my code
});
};
})(jQuery);
這是整個代碼:
(function($) {
// jQuery plugin definition
$.fn.scrollabix = function(params) {
return this.each(function(){
// OPTIONS/Config
$defaultOptions =
{
direction: 'vertical'
};
$.extend($defaultOptions, params);
// LOCAL PARAMETERS
$self = $(this);
$scrolled = $("> div", this);
// GET INFO
$selfHeight = parseInt($self.css("height"));
$scrolledHeight = parseInt($('> div', $self).css("height"));
$selfWidth = parseInt($self.css("width"));
$scrolledWidth = parseInt($('> div', $self).css("width"));
$leftOutside = ($scrolledHeight) - parseInt($selfHeight) /*+ 50*/; // user for Vertivcal only
// PLUGIN ACTIONS
actions = {
continous : 0,
slideUp : function(q)
{
if($leftOutside > 0)
{
slideBy =(120 * 20)/q;
currTop = parseInt($scrolled.css("top"));
absCurrTop = Math.abs(currTop);
if(absCurrTop + slideBy > ($leftOutside))
{
$scrolled.stop().animate({top : '-' + $leftOutside + 'px'}, 250);
}
else
{
if(absCurrTop < ($leftOutside))
{
$scrolled.stop().animate({top : '-=' + slideBy}, 250, 'linear', function(){
if(actions.continous == 1)
{
actions.slideUp(q);
}
});
}
}
}
},
slideDown : function(q)
{
if($leftOutside > 0)
{
slideBy =(120 * 20)/q;
currTop = parseInt($scrolled.css("top"));
absCurrTop = Math.abs(currTop);
if(absCurrTop - slideBy < 0)
{
slideBy = absCurrTop;
}
if(currTop < 0)
{
$scrolled.stop().animate({top : '+=' + slideBy}, 250, 'linear', function(){
if(actions.continous == 1)
{
actions.slideDown(q);
}
});
}
}
},
slideLeft : function(q)
{
if($leftOutside > 0)
{
consolex('slideLeft');
}
},
slideRight : function(q)
{
if($leftOutside > 0)
{
consolex('slideRight');
}
}
}
// CREATE INFRASTRUCTURE
$self.css({
overflow : 'hidden',
position : 'relative'
});
$scrolled.css({
position : 'absolute',
top : '0px',
left : '0px'
});
if($defaultOptions.direction == 'vertical')
{
$self.mousemove(function(e){
var x = parseInt(e.pageX - this.offsetLeft);
var y = parseInt(e.pageY - this.offsetTop);
if(y > ($selfHeight - 120) && y < $selfHeight)
{
actions.continous = 1;
actions.slideUp($selfHeight - y);
}
else if(y < 120 && y >= 1)
{
actions.continous = 1;
actions.slideDown(y);
}
else
{
actions.continous = 0;
}
}).mouseout(function(){
actions.continous = 0;
});
}
else if ($defaultOptions.direction == 'horizontal')
{
$leftOutside = $scrolledWidth - $selfWidth;
$self.mousemove(function(e){
$scrolledWidth = parseInt($scrolled.css('width'));
var x = parseInt(e.pageX - this.offsetLeft);
$selfWidth = parseInt($self.css("width"));
$leftOutside = ($scrolledWidth) - parseInt($selfWidth);
consolex($leftOutside);
if(x < 300 && x >= 1)
{
actions.continous = 1;
actions.slideRight(x);
}
else if(x > $selfWidth - 300)
{
actions.continous = 1;
actions.slideLeft(x);
}
}).mouseout(function(){
actions.continous = 0;
});
}
//return this;
});
};
})(jQuery);
你可能在'//我code'只考慮一個單一的元素..一些假設 – PatrikAkerstrand
你能否提供更多的代碼?插件的基本結構看起來是正確的,我沒有足夠的細節來處理。 – frm
在我看來,與你的問題相關的最重要的代碼將是你已經省略的代碼,你擁有'//我的代碼'的地方。發佈後,我們可能會幫助你弄清楚。 –