Таймер мигания глаз
Я создаю этот сайт с несколькими талисманами, и я буду реализовывать "таймер моргания глаз", где я буду моргать каждым талисманом.
Мой вопрос здесь: как мне реализовать (и как долго это?) Задержку между миганиями и самим миганием на любом языке (я, вероятно, буду использовать 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 ответа
Частота мигания варьируется, но в среднем глаз мигает каждые пять секунд. Это
равный 17 000 раз в день или 6,25 млн раз в год.
Если у вас есть функция blink
что делает "мигание", вы можете просто захотеть сделать что-то вроде этого:
setInterval(blink, 5000); // 5000ms i.e. 5s
Если вы хотите немного больше "Случайности" в вашем моргании, вы можете сделать следующее:
function blink() {
[...] // The blinking
setTimeout(blink, 5000 + ((Math.random() - 0.5) * 2000));
}
Который, если мои вычисления верны, вызовет функцию мерцания случайным образом между 4000 и 6000 мс, учитывая, что Math.random()
возвращает значение в диапазоне от 0,0 до 1,0, поэтому "Math.random() - 0,5" будет в диапазоне от -0,5 до 0,5. Это время 2000 приведет к значению от -1000 до 1000.
Мы склонны "гуманизировать" такие вещи, как талисманы, поэтому вы можете использовать частоту мерцания людей, чтобы сделать талисманов естественными.
Люди обычно мигают в среднем 10 раз в минуту, с интервалом 2-10 секунд. [источник]
Сделайте случайную задержку между миганиями от 2 до 10 секунд, и это будет в среднем 10 раз в минуту:
function blink() {
// do the blinking stuff
window.setTimeout(blink, Math.random() * 8000 + 2000);
}
Человеческий мозг очень хорошо умеет распознавать узоры, поэтому, если вы заставите талисманов мигать с заданным интервалом, посетители довольно скоро поймут это и подумают, что мерцание выглядит искусственно.
Проверьте, как это выглядит. Может случиться так, что фактические нормальные интервалы мигания не будут выглядеть нормально, и вам, возможно, придется увеличить интервалы, особенно если вы показываете несколько талисманов рядом друг с другом.
Ваша функция моргания, вероятно, будет перемещать некоторые вещи в DOM или манипулировать изображением
var blink = function () {
// do some work!
}
Тогда вы можете использовать setInterval()
обрабатывать интервал мигания.
setInterval(blink, 3000)
Обратите внимание, что setInterval рассчитывается в миллисекундах, поэтому 3000 - это "каждые 3 секунды". Надеюсь, это поможет. У вас может быть динамическое число, если вы пытаетесь использовать его неправильно каждые три секунды. Например, вы могли бы иметь функцию slowDown() and speedUp()
вызывается случайным образом, который устанавливает фактический интервал setTimeout().
В отношении алгоритма, вот выдержка, которая описывает некоторые трудности.
Процесс моргания человека, выражающего глубокую информацию разума, имеет неопределенность нечеткости и случайности. Предлагается метод, основанный на теории облаков, для контроля неопределенности моргания виртуального человека. Разработано облако с максимальным углом раскрытия глаз и интервалом моргания. Предлагается облачный алгоритм управления мерцанием. Результаты сравнения его с методом достоверности показывают, что предложенный алгоритм может генерировать контрольную кривую моргания с максимальными углами открытия случайных глаз и интервалами моргания, чтобы реализовать контроль неопределенности моргания.