对于含糊不清的“标题”感到抱歉,但我正在努力想出一个能够简单地捕捉我的问题的标题。
我正在研究R Murphy的JQuery Fundamentals并且在她的解决方案中遇到了一段代码:slideshow.js。
她创建了以下功能(我删除了一些导航代码,以便专注于淡入淡出图像的核心功能):
fadeCallback = function() {
if (manualMode) { return; }
var $this = $(this),
$next = getItem($this, 'next'),
num = $this.prevAll().length + 1;
// set the timeout for showing
// the next item in 5 seconds
timeout = setTimeout(function() {
showItem($this, $next);
}, 5000);
};
在fadeCallback中,她调用getItem()来获取$ this的下一个兄弟:
getItem = function($item, trav) {
var $returnItem = $item[trav]();
return $returnItem.length ?
$returnItem :
$items[(trav == 'next') ? 'first' : 'last']();
},
在我看来,在getItem()里面,在行......
$items[(trav == 'next') ? 'first' : 'last']();
... trav永远不会不成为'下一个'。即在代码中没有其他地方我们将'trav'设置为除了'next'之外的任何东西。然而,由于代码测试trav是否等于'next',它意味着有些情况下trav!='next'。但我无法确定任何此类情况。
我没看到什么?
非常感谢, Ñ
答案 0 :(得分:0)
$prevBtn = $('<input/>', {
type: 'button',
value: 'previous'
}).appendTo($controls),
$nextBtn = $('<input/>', {
type: 'button',
value: 'next'
}).appendTo($controls),
$prevBtn.bind('click', { direction : 'prev' }, handleBtnClick);
$nextBtn.bind('click', { direction : 'next' }, handleBtnClick);
handleBtnClick = function(e) {
clearTimeout(timeout);
manualMode = true;
var $currentItem = $items.filter(':visible'),
$itemToShow = getItem($currentItem, e.data.direction);
showItem($currentItem, $itemToShow);
};
它显然被用于prev
。