当前位置: 代码迷 >> JavaScript >> 防止功能运行两次
  详细解决方案

防止功能运行两次

热度:46   发布时间:2023-06-05 14:15:45.0

我有一个自动运行的幻灯片,您可以通过单击按钮跳到图像。

如果在图像静止时单击其中一个按钮,则效果很好,但如果在淡入淡出功能运行时单击,它将使功能运行两次,从而产生某种循环,最终使浏览器停滞不前!

我知道我需要添加某种“ isRunning”标志,但是我不知道在哪里。

这是jsfiddle的链接-http:

还有下面的代码...

javascript:

$(document).ready(function() {

var images=new Array();
var locationToRevealCount=6;
var nextimage=2;
var t;
var doubleclick;

addIcons();

function addIcons() {
    while (locationToRevealCount>0) {
        $("#extraImageButtons").append('<img class="galleryButtons" src="http://www.steveszone.co.uk/images/button_sets/pink_square_button1n.png" alt="'+locationToRevealCount+'" />');
        images[locationToRevealCount]='http://www.tombrennand.net/'+locationToRevealCount+'a.jpg';
        locationToRevealCount--;
    };
    $('.homeLeadContent').prepend('<img class="backgroundImage" src="http://www.tombrennand.net/1a.jpg" />');
    $("#extraImageButtons img.galleryButtons[alt*='1']").attr("src","http://www.steveszone.co.uk/images/button_sets/black_square_button1n.png");
    runSlides();
}

function runSlides() {
    clearTimeout(t);
    t = setTimeout(doSlideshow,3000);
}

function doSlideshow() {
    if($('.backgroundImage').length!=0)
        $('.backgroundImage').fadeOut(500,function() {
            $('.backgroundImage').remove();
            slideshowFadeIn();
        });
    else
        slideshowFadeIn();
}

function slideshowFadeIn() {
    if(nextimage>=images.length) 
        nextimage=1;

    $("#extraImageButtons img.galleryButtons").attr("src","http://www.steveszone.co.uk/images/button_sets/pink_square_button1n.png");
    $("#extraImageButtons img.galleryButtons[alt*='"+nextimage+"']").attr("src","http://www.steveszone.co.uk/images/button_sets/black_square_button1n.png");

    $('.homeLeadContent').prepend($('<img class="backgroundImage" src="'+images[nextimage]+'" style="display:none;">').fadeIn(500,function() {
        nextimage++;
        runSlides();

    }));
}

$("#extraImageButtons img.galleryButtons").live('click', function() {
    nextimage=$(this).attr("alt");
    $("#extraImageButtons img.galleryButtons").attr("src","http://www.steveszone.co.uk/images/button_sets/pink_square_button1n.png");
    $(this).attr("src","http://www.steveszone.co.uk/images/button_sets/black_square_button1n.png");
    clearTimeout(t);
    doSlideshow();
});
});

的HTML:

<div class="homeLeadContent" style="width:965px;">

</div>
<div id="extraImageButtons"></div>

两项更改使其更适合我:

  1. 在“额外图像按钮”处理程序中,您调用“ clearInterval()”,但应将其更改为“ clearTimeout()”。
  2. 在设置另一个超时之前,我在“ runSlides()”函数中向“ clearTimeout(t)”添加了另一个调用。

单击大的“单击我”按钮可能仍然会做一些奇怪的事情。

编辑 -好吧, ,我认为它做对了。 除了正确调用“ clearTimeout()”之外,我还更改了“ doSlideshow()”中的代码,以便它在添加另一个图像之前清空内容<div>

  相关解决方案