Javascript 创建随机图像闪烁

Javascript 创建随机图像闪烁,javascript,jquery,animation,Javascript,Jquery,Animation,基本上,我试图让一个人的头骨在脸上闪烁,我已经实现了它闪烁一次。但我试图达到的效果是,它看起来更有机和随机。以下是基本结构: function flicker() { var maxFlick = 6, amount = Math.round(Math.random() * maxFlick), running = false; function showHide() { $fl

基本上,我试图让一个人的头骨在脸上闪烁,我已经实现了它闪烁一次。但我试图达到的效果是,它看起来更有机和随机。以下是基本结构:

    function flicker() {

        var maxFlick = 6,
            amount = Math.round(Math.random() * maxFlick),
            running = false;

        function showHide() {

            $flicker.show();

            running = true;

            setTimeout(function() {
                $flicker.hide();

                running = false;

            }, 100)
        }
        for (i = 0; i < amount; i++) {
            if(!running) {
                showHide();
            }
        }           
    }

    setInterval(flicker, 4000);
函数闪烁(){
var maxFlick=6,
amount=Math.round(Math.random()*maxFlick),
运行=错误;
函数showHide(){
$flicker.show();
运行=真;
setTimeout(函数(){
$flicker.hide();
运行=错误;
}, 100)
}
对于(i=0;i

我曾假设使用随机数量语句运行for循环会产生所需的效果,但它仍然像以前一样每4000毫秒只闪烁一次。有什么建议吗?

在丽晶的帮助下,我找到了答案:

    function flicker() {

        var maxFlick = 6,
            amount = Math.round(Math.random() * maxFlick),
            delta = 2,
            timer;

        var doneFlicks = 0;

        var flickInterval = setInterval(showHide, timer);

        function showHide() {
            timer = Math.round((Math.random() + delta) * 100)

            $flicker.show();

            var hide = setTimeout(function() {
                $flicker.hide();
                doneFlicks++
            }, 20)

            if (doneFlicks == amount) {
                clearInterval(flickInterval);
            }
        }       
    }

    setInterval(flicker, 3000);
这会产生一种随机的闪烁效果,称为每3秒一次-完美的恐怖电影效果


再次感谢Regent提供的所有帮助

一,。您为第一次迭代运行
运行
。2.由于
running
false
,因此调用了
showHide
函数。3. <在
showHide
功能中,code>running
设置为
true
。4.您可以在几毫秒内运行所有其他
迭代,使
在所有这些迭代中都以
true
的方式运行
。听起来你的代码并不是你想的那样,“running”变量是为了阻止for循环如此快速地迭代。因此,一旦running设置为false,它就可以再次运行循环。尽管我现在意识到,当它迭代时,如果running=true,它将返回到没有运行任何东西的循环语句。我认为解决方案必须是在循环内产生一个与showHide()内的setTimeout delay相匹配的延迟?是的,例如,可以。做点类似的事情。谢谢你,这足够让我继续下去了!不客气。嗯,SO中的每个已解决问题都应该接受答案,所以您可以删除您的问题,或者我可以将此代码作为答案发布(如果它看起来像是您的答案)。