眨眼计时器

时间:2012-09-04 16:42:58

标签: javascript jquery animation blink

我正在创建这个网站,只有很少的吉祥物,我将实施一个“眨眼计时器”,我会让每个吉祥物都闪烁。

我的问题是:我如何实现(以及它有多长?)闪烁和眨眼之间的延迟,在任何语言上(我可能会使用Javascript,但现在无关紧要)。

是否有关于“闪烁算法”或类似内容的资源?

编辑:我知道如何使用setTimeout和setInterval,我的问题更多的是关于算法而不是实现本身。


最终结果:

var blink = {
    delay: function() {
        return Math.random() * 8000 + 2000;
    },
    duration: function() {
        return 100 + Math.floor(Math.random() * 100);
    },
    blinkAgain: function() {
        return (Math.random() < .2);
    },
    betweenBliks: function() {
        return blink.duration() / 2;
    }
};

$.fn.blink = function(continueBlinking) {
    var $element = $(this);

    // Star the blink
    $element.addClass('blink');

    // Finish the blink
    setTimeout(function() {
        $element.removeClass('blink');

        // Change of blinking again
        if (blink.blinkAgain()) {
            setTimeout(function() {
                $element.blink(false);
            }, blink.betweenBliks());
        }
    }, blink.duration());

    // Continue blinking?
    if (continueBlinking) {
        setTimeout(function() {
            $element.blink(true);
        }, blink.delay());
    }
};

3 个答案:

答案 0 :(得分:5)

  

眨眼率变化,但平均每五秒眨眼一次。这是
  每天相当于17,000次,每年625万次。

     

Source

假设你有一个功能blink执行“闪烁”,你可能只想做这样的事情:

setInterval(blink, 5000); // 5000ms i.e. 5s

如果你想要在闪烁中多一点“随机性”,你可以做以下事情:

function blink() {
    [...] // The blinking
    setTimeout(blink, 5000 + ((Math.random() - 0.5) * 2000));
}

如果我的计算正确,那将在4000到6000ms之间以随机方式调用blink函数,假设Math.random()返回介于0.0和1.0之间的值,因此“Math.random() - 0.5”将介于-0.5和0.5之间。那个时间2000将导致-1000到1000之间的值。

答案 1 :(得分:2)

我们倾向于“人性化”吉祥物这样的东西,所以你可以用人类的眨眼率让吉祥物看起来很自然。

人类通常每分钟眨眼10次,眨眼间间隔2-10秒。 [source]

使闪烁之间的延迟在2到10秒之间随机变化,最终平均每分钟变为10次:

function blink() {
  // do the blinking stuff
  window.setTimeout(blink, Math.random() * 8000 + 2000);
}

人类的大脑非常擅长拾取模式,所以如果你让吉祥物以一定的间隔闪烁,游客很快就会接受,并认为眨眼看起来是人为的。

检查一下它的样子。实际上正常的闪烁间隔可能看起来不正常,你可能不得不增加间隔,特别是如果你在彼此旁边显示几个吉祥物。

答案 2 :(得分:0)

你的眨眼功能可能会在DOM中移动一些东西或操纵像这样的图像

var blink = function () {

   // do some work!
}

然后您可能希望使用setInterval()来处理闪烁间隔。

setInterval(blink, 3000)

请注意,setInterval的时间以毫秒为单位,因此3000是“每3秒”。希望这会有所帮助。如果你想要每三秒钟没有正确的话,你可以拥有一个动态数字。例如,您可以使用一个随机调用的函数slowDown() and speedUp()来设置实际的setTimeout()间隔。

在参考算法时,这里有一段摘录,描述了一些困难。

  

人类眨眼表达心灵深层信息的过程   模糊性和随机性的不确定性。基于云理论的方法   提出实现虚拟人眨眼的不确定性控制。   设计了眼睛的最大开角云和眨眼间隔云。   提出了一种基于云的眨眼控制算法。结果   将其与确定性方法进行比较表明该算法   随机眼睛最大开放可以产生眨眼控制曲线   角度和闪烁间隔,实现眨眼的不确定性控制。