3

我正在用很少的吉祥物创建这个网站,我将实现一个“眨眼计时器”,让每个吉祥物都眨眼。

我的问题是:我如何在任何语言上实现(以及它是多长时间?)闪烁和闪烁本身之间的延迟(我可能会使用 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());
    }
};
4

3 回答 3

5

眨眼的频率各不相同,但平均每五秒眨眼一次。这
相当于每天 17,000 次或每年 625 万次。

资源

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

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

如果您想要在眨眼中多一点“随机性”,您可以执行以下操作:

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

如果我的计算正确,它将在 4000 到 6000 毫秒之间以随机方式调用 blink 函数,因为它Math.random()返回的值介于 0.0 和 1.0 之间,因此“Math.random() - 0.5”将介于 -0.5 和 0.5 之间。乘以 2000 将产生一个介于 -1000 和 1000 之间的值。

于 2012-09-04T16:51:21.863 回答
2

我们倾向于将吉祥物之类的东西“人性化”,因此您可以使用人类的眨眼频率使吉祥物看起来很自然。

人类通常平均每分钟眨眼 10 次,眨眼之间间隔 2-10 秒。[资源]

使眨眼之间的延迟随机在 2 到 10 秒之间,最终平均每分钟 10 次:

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

人脑非常擅长识别模式,所以如果你让吉祥物以固定的间隔眨眼,参观者很快就会明白这一点,并认为眨眼看起来是人为的。

检查它的样子。可能是因为实际正常的闪烁间隔看起来并不正常,您可能必须增加间隔,尤其是当您同时展示几个吉祥物时。

于 2012-09-04T16:56:33.520 回答
0

你的 blink 函数可能会在 DOM 中移动一些东西或像这样操作图像

var blink = function () {

   // do some work!
}

然后你可能想用它setInterval()来处理闪烁间隔。

setInterval(blink, 3000)

请注意, setInterval 以毫秒为单位计时,因此 3000 是“每 3 秒”。希望这会有所帮助。如果您试图每三秒不正确,您可能会有一个动态数字。例如,您可以有一个slowDown() and speedUp()名为 random 的函数来设置实际的 setTimeout() 间隔。

关于算法,这里有一段描述一些困难的摘录。

人类眨眼表达内心深层信息的过程具有模糊性和随机性的不确定性。提出了一种基于云理论的方法来实现虚拟人眨眼的不确定性控制。设计了眼睛的最大张角云和眨眼间隔云。提出了一种基于云的眨眼控制算法。与确定性方法的比较结果表明,该算法可以生成随机眼睛最大张角和眨眼间隔的眨眼控制曲线,实现眨眼的不确定性控制。

于 2012-09-04T16:48:16.580 回答