我有一个功能可以在用户点击链接时推进幻灯片显示图像:
jQuery("a.next").click(function(e) {
return ngg_ajax_navigation(e, this);
});
除了用户点击链接之外,我还希望每3秒自动发生一次。实现这一目标的最佳方法是什么?
更广泛的代码:
function ngg_ajax_browser_navigation(e, obj) {
// try to find gallery number
if ("ngg-prev-" == jQuery(obj).attr("id").substr(0, 9) || "ngg-next-" == jQuery(obj).attr("id").substr(0, 9)) {
// extract the image-id
var imageNumber = jQuery(obj).attr("id").substr(9);
// find the image-browser-container
var currentNode = obj;
while (null != currentNode.parentNode && !jQuery.nodeName(currentNode.parentNode, "body") && !jQuery(currentNode.parentNode).hasClass("ngg-imagebrowser")) {
currentNode = currentNode.parentNode;
}
if (jQuery(currentNode.parentNode).hasClass("ngg-imagebrowser")) {
var gallery = jQuery(currentNode.parentNode);
// let's extract the post id & gallery id
var payload = gallery.attr("id").substring(17);
var separatorPosition = parseInt(payload.indexOf("-"));
var galleryId = payload.substr(0, separatorPosition);
var postId = payload.substr(separatorPosition + 1);
if ( (galleryId.length == 0) || (postId.length == 0) ) {
return true;
}
ngg_show_loading(e);
// get content
jQuery.get(ngg_ajax.callback, {p: postId, galleryid: galleryId, pid: imageNumber, type: "browser"}, function (data, textStatus) {
// delete old content
gallery.children().remove();
// add new content
gallery.replaceWith(data);
// add ajax-navigation, again
jQuery("document").ready(function(){
// remove old listeners to avoid double-clicks
jQuery("a.ngg-browser-next").unbind("click");
jQuery("a.ngg-browser-prev").unbind("click");
// add shutter-listeners again
shutterReloaded.init('sh');
// register ajax browser-navigation listeners
jQuery("a.ngg-browser-next").click(function(e) {
return ngg_ajax_browser_navigation(e, this);
});
jQuery("a.ngg-browser-prev").click(function(e) {
return ngg_ajax_browser_navigation(e, this);
});
setInterval(function(){
jQuery("a.ngg-browser-next").click();
}, 3000);
ngg_remove_loading();
});
});
// deactivate HTML link
return false;
}
}
return true;
}
答案 0 :(得分:1)
放置代码以推进已命名函数中的幻灯片显示(实际上,您大部分已完成此操作),并通过setTimeout
(每次必须重新安排)调用该函数或{{ 1}}(自动重复)。 E.g:
setInterval
在上面,我已经这样做,以便显式点击重置计时器。如果您想提供一种停止幻灯片放映的方法,只需要有(function(element) {
var timer = 0, // Timer handle, 0 = not running
$element = jQuery("a.next"), // jQuery wrapper on element
element = $element[0]; // Raw element
// The click handler
$element.click(function(e) {
startTimer();
return ngg_ajax_navigation(e, element);
});
// Timer
startTimer();
function startTimer() {
if (timer) {
clearInterval(timer);
timer = 0;
}
timer = setInterval(function() {
ngg_ajax_navigation(null, element);
}, 3000);
}
})();
的内容。另请注意,我在函数中包装了所有内容以避免创建全局变量,并且只查看了一次元素。
以上假设只有一个clearInterval(timer); timer = 0;
元素。如果不止一个,它将需要重构。
答案 1 :(得分:1)
试试这个
jQuery("a.next").click(function(e) {
return ngg_ajax_navigation(e, this);
});
setInterval(function(){
jQuery("a.next").click();
}, 3000);