Есть спрайтовая анимация
(function(x, y, el, t) {
setInterval(function() {;
(y > 1) ? (y = 0, (x = (x > 1) ? 0 : x + 1)) : (y += 1);
el.style.backgroundPosition = "-" + x + "00% -" + y + "00%";
}, 100);
})(
0,
0,
document.getElementById("cat"),
);
#cat {
width: 112px;
height: 156px;
background-image: url(https://inter-net.pro/images/css/sprite-marsch.png);
background-position: 0% 0%;
}
<div id="cat"></div>
Кто может помочь объяснить javascript код? И желательно упростить код.
Рассмотрим все по порядку
Здесь объявляется само вызывающаяся лямбда
(function(x,y,el,t) {
Тоже лямбда вызывающаяся с определенным интервалом
setInterval(function() {
Тут тернарный оператор
;(y>1)?(y=0,(x=(x>1)?0:x+1)):(y+=1);
на простой if
можно перевести как
if ( y > 1 )
{
y = 0;
if (x > 1)
{
x = 0
}
else
{
x += 1;
}
}
else
{
y += 1;
}
Тут я думаю объяснять не нужно, идет присвоение стилей.
el.style.backgroundPosition = "-"+x+"00% -"+y+"00%";
Тоже не должно быть вопросов, задается интервал в 100мс.
}, 100);
Закрывается лямбда, и само-вызывается, в нее передаются аргументы x = 0, y = 0, el = document.getElementById("cat")
})(
0,
0,
document.getElementById("cat"),
);
(function(x,y,el,t) {
setInterval(function() { // Обычный вызов функции с интервалом указанным вторым параметром
;(y>1)?(y=0,(x=(x>1)?0:x+1)):(y+=1); // зачем тут нужна ; не знаю, так обычно делают для модулей, тут она не нужна, все остальное это тернарные операции (короткий вариант if() {} else {} в виде - <условие> ? <значение, если условие выполнилось> : <значение, если условие не выполнилось>")
el.style.backgroundPosition = "-"+x+"00% -"+y+"00%"; // простое задание стилей
}, 100); // интервал вызова в миллисекундах
})(0, 0, document.getElementById("cat")); // Эти аргументы передаются в функцию которая тут же вызывается (IIFE), соответственно x = 0, y = 0, el = document.getElementById("cat")
Упрощенный в моем понимании вариант:
var x = 0;
var y = 0;
var el = document.getElementById("cat");
var func = function( x, y , el ) {
setInterval(function() {
if(y > 1) {
y = 0;
if(x > 1) {
x = 0
} else {
x = x + 1;
}
} else {
y = y + 1;
}
var XPercentagePosition = -x * 100 + '%';
var YPercentagePosition = -x * 100 + '%';
el.style.backgroundPosition = XPercentagePosition + ' ' + XPercentagePosition;
}, 100);
}
func(x, y, el);
#cat {
width:112px;
height:156px;
background-image:url(https://inter-net.pro/images/css/sprite-marsch.png);
background-position:0% 0%;
}
<div id="cat"></div>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пожалуйста не предлагайте классы или idНужно сделать так, чтобы каждый новый тэг h3 появлялся с новым размером шрифта
Есть видео уроки по созданию расширения для devtools?
На Angular5 проекте с помощью ng eject был сгенерирован файл webpackconfig
Подскажите что использовать или почитать что бы выполнить задание: