删除 DOM 操作只是为了跟踪当前可见元素。
我认为它们是不必要的。我的 2 美分。
也使它像某人实际使用的东西。
HTML:
<div id='Test'>
<ul class="ticker">
<li>Boo1</li>
<li>More boo1</li>
<li>Even more boo</li>
</ul>
<a class="prev" href="#">previous</a>
<a class="next" href="#">next</a>
</div>
JS:
jQuery.fn.Custom_cycler = function(Options){
var Options = jQuery.extend({'Next': 'a.next', 'Previous': 'a.prev', 'List': 'ul.ticker'},Options||{});
var List = jQuery(Options.List, this);
var Index = 0;
var Size = List.children().size();
List.children().hide().first().show();
var Move = function(Event){
Event.preventDefault();
if(Event.data)
{
Index++;
}
else
{
Index--;
}
Index=(Index+Size)%Size;
jQuery(List.children().hide().get(Index)).show();
};
jQuery(Options.Next, this).bind('click', true, Move);
jQuery(Options.Previous, this).bind('click', false, Move);
return(this);
};
你像这样使用它:
jQuery('div#Test').Custom_cycler();
编辑:在事件处理程序中使用 data 参数仅对两个事件使用一个函数,这允许我对 Index/Size 使用闭包而不是 jQuery(...).data。
还从闭包中删除了一些不必要的变量。
最后缩小了选择的上下文,以避免在调用函数时错误地操作外部 DOM 标签。它还执行得更快,因为 jQuery 不必查找整个 DOM。
可以通过仅在先前显示的元素而不是所有元素上调用 hide() 来进一步优化(很容易从 Index 的值推断)。