定时器上的呼叫功能

时间:2012-01-13 16:29:08

标签: jquery

我有一个功能可以在用户点击链接时推进幻灯片显示图像:

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;

}

2 个答案:

答案 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);