Pierwszym przykładem jest wyrazem Natychmiast-Wykonano Funkcja (IIFE). Jest to funkcja, która natychmiast wykonuje się po stworzeniu. IIFE to popularny wzorzec projektowania JavaScript używany przez większość popularnych bibliotek (jQuery, Backbone.js, Modernizr, itp.) W celu umieszczenia całego kodu biblioteki w zasięgu lokalnym.
W ES6 to może być zapisane za pomocą Arrow function jeśli chcesz .blinkMe
migać tylko raz:
(() => $('.blinkMe').fadeOut(500).fadeIn(500))();
Można łańcuchowe tyle fadeIn
i fadeOut
funkcje jak chcesz oczywiście. Jeśli chcesz, aby pętla była nieskończona, sugerowałbym sposób IIFE.
Więcej informacji o IIFE here.
O twoim drugim przykładzie. Wywołujesz funkcję wewnątrz swojej własnej funkcji (zwanej również pętlą rekursywną). W twoim przypadku tworzy to nieskończoną pętlę, dlatego nie działa. Wyjąć blink();
wewnątrz funkcji i będzie działać:
function blink() {
$('.blinkMe').fadeOut(500).fadeIn(500, blink);
}
blink();
Poza tym z javascript można również rozwiązać ten problem z animacjami CCS3. Animacje CSS3 są uruchamiane w osobnym wątku. Jest to rozwiązanie bez jQuery:
(function blink() {
document.getElementsByClassName('blinkMe')[0].className += ' blinkActive';
})();
// Arrow function:
//(() => document.getElementsByClassName('blinkMe')[0].className += ' blinkActive')();
.blinkMe {
width: 80px;
height: 80px;
background: deepskyblue;
}
.blinkActive {
-webkit-animation: blink 1s infinite;
animation: blink 1s infinite;
}
@-webkit-keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
<div class="blinkMe"></div>
nie wiem ile elementy chcesz migać na swojej stronie, jeśli jest to tylko jeden z elementów można użyć zamiast identyfikatorów klas. Należy pamiętać, że reguła @keyframes
nie jest obsługiwana w IE9 lub wcześniejszych wersjach i Opera Mini: Link.
Drugi rzuca stackoverflow wyjątek. Nie powinien sam siebie nazywać. – Bergi