我正在滚动我自己的轮播代码,(模仿位于此处http://www.queness.com/post/923/create-a-simple-infinite-carousel-with-jquery的精彩文章)但我遇到传入“this”选择器上下文时出现问题,但仅限于 slider.animate() 中。最初的 .before() 与 $("ul.slides li:first", this) 和 $("ul.slides li:last", this) 选择器一起使用,因为它在 .animate() 之外。
我有一个这样声明的 jQuery 插件:
$.fn.promoSlider = function(opts) {
$(this).data('initialized', true);
var speed = 400;
var item_width = 274.5;
var left_value = item_width * (-1);
var slider = $("ul.slides", this);
//'this' works
$("ul.slides li:first", this).before($("ul.slides li:last", this));
slider.css({'left' : left_value});
$('.btnprev', this).click(function() {
var left_indent = parseInt(slider.css('left')) + item_width;
slider.animate({'left' : left_indent}, speed, function() {
//'this' does not work
$("ul.slides li:first", this).before($("ul.slides li:last", this));
slider.css({'left' : left_value});
});
return false;
});
$('.btnnext', this).click(function() {
var left_indent = parseInt(slider.css('left')) - item_width;
slider.animate({'left' : left_indent}, speed, function() {
//'this' does not work
$("ul.slides li:last", this).after($("ul.slides li:first", this));
slider.css({'left' : left_value});
});
return false;
});
}
然后我正在初始化我的轮播并将“this”传递给插件,如下所示:
$('.carousel').each(function() {
if($(this).data('initialized') !== true) {
$(this).promoSlider();
}
});
选择器上下文“this”在 .animate() 中丢失,并且不允许将“this”传递给匿名回调函数。因此 $("ul.slides li:first", this).before($("ul.slides li:last", this)); 永远不会得到解决,但只能在 .animate() 事件中解决。
任何帮助将不胜感激。预先感谢您查看此内容。