[jQuery] stop() & clearQueue() & delay()
animate stop() & Queue() & delay()
[μΆμ²]https://webclub.tistory.com/461
1. μ λλ©μ΄μ ν
- νλ νΉμ ν μ¨λ¦¬λ¨ΌνΈμμ λ°μλ μ λλ©μ΄μ λͺ©λ‘μ΄λ€.
- μ μ΄μΏΌλ¦¬λ₯Ό μ¬μ©ν΄ μ리먼νΈμμ μ λλ©μ΄μ μ μ€νμν¬ λλ§λ€ μ λλ©μ΄μ νμ μ μ₯λλ€.
- μ리먼νΈλ νμ λͺ¨λ μ λλ©μ΄μ μ΄ μλ£λ λκΉμ§ νμ μ μ₯λ μ λλ©μ΄μ μ νλ²μ νλμ© μ€νμν¨λ€.
νλ λ¨Όμ λ€μ΄κ° κ²μ΄ λ¨Όμ λμ€λ 곡κ°μ λ§νλ€.
jQueryμ ν¨κ³Ό λ©μλλ₯Ό μ¬μ©νλ©΄ ν¨κ³Ό λͺ λ Ήμ΄ μ°¨λ‘λλ‘ νμλ€μ΄κ°κ³ , λ€μ΄κ° μμλλ‘ μ€νλλ€.
$('.queue-box').on('click', function(){
$(this)
.aniamte({
left : '+=60'
}, 2000)
.animate({
width : '+=60'
}, 2000)
.animate({
height : '+=60'
}, 2000)
});
μμ μ½λλ₯Ό μ€ννλ©΄ λμ(νκΊΌλ²)μ μ λλ©μ΄μ μ΄ μ€νλλ κ²μ΄ μλλΌ μ°¨λ‘λλ‘ μ€νλλ€.
κ° μ λλ©μ΄μ μ durationμ 2000(2μ΄)μΌλ‘ μ€μ νμΌλ―λ‘ κ° 2μ΄μ© λ±μ₯νμ¬ 6μ΄λμ μ λλ©μ΄μ μ΄ λμνκ² λλ€.
μ λλ©μ΄μ
νμλ animate()
λ©μλμ λ΄μ©μ΄ νλνλ λ€μ΄κ°κ³ νλνλ λμ€λ©΄μ μ€νλλ―λ‘ μ λλ©μ΄μ
μ΄ μμλλ‘ λμνκ² λλ€.
λ¨Όμ λ€μ΄κ° λͺ λ Ήμ μ°¨λ‘λλ‘ μ€ννκ² λλ€.
μ¦, λ¨Όμ λ€μ΄κ° κ²μ΄ λ¨Όμ λμ€κ² λλ κ²μ΄ "ν"λ 곡κ°μ΄λ€.
2. clearQueue()
clearQueue()
λ©μλλ νμ μλ λ΄μ©μ μ κ±°νκ³ μΆμ κ²½μ°μ μ¬μ©νλ€.
// μ λλ©μ΄μ
μ μ°¨λ‘λλ‘ μ€ννλλ‘ νλ€.
$('.queue-box').animate({ left : '+=60'}, 2000);
$('.queue-box').animate({ width : '+=60'}, 2000);
$('.queue-box').animate({ height : '+=60'}, 2000);
// 3μ΄νμ ν¨μλ₯Ό μ€ννλ€.
setTimeout(function(){
// μ λλ©μ΄μ
μ νλ₯Ό μ κ±°νλ€.
$('.queue-box').clearQueue();
}, 3000);
clearQueue()
λ©μλλ νκ° λΉμμ§ μμ μ μ λλ©μ΄μ
μ΄ μ§νμ€μΈ κ²μ΄ μλ€λ©΄ ν΄λΉ μ λλ©μ΄μ
κΉμ§λ λμνκ³ κ·Έ μ΄νμ μ λλ©μ΄μ
νλ₯Ό λΉμ°κ² λλ―λ‘ μ΄νμ μΆκ°λλ μ λλ©μ΄μ
ν¨κ³Όλ λμνμ§ μκ² λλ€.
κ·Έλ¦¬κ³ μ΄νμ μΆκ°νλ ν¨κ³Όλ μ€νλμ§ μμ§λ§ μ€νλλ μ λλ©μ΄μ μ μ μ§νλ κΈ°λ₯μ μλ€.
clearQueue()
:: μ¬λ¬κ°μ μ λλ©μ΄μ μΌ κ²½μ° ν΄λΉ μ λλ©μ΄μ λμνκ³ , κ·Έ μ΄νμ μ λλ©μ΄μ νλ₯Ό λΉμ°κ² λλ€.
μ΄νμ μΆκ°λλ μ λλ©μ΄μ ν¨κ³Όλ λμνμ§ μλλ€.
μ΄νμ μΆκ°νλ ν¨κ³Όλ μ€νλμ§ μμ§λ§ μ€νλλ μ λλ©μ΄μ μ μ μ§νλ κΈ°λ₯μ μλ€. ->
stop()
μ¬μ©
Q. μμ μμ μ clearQueue()
κ° μλ stop()
μ ν κ²½μ°,
A. left, width, height μ λλ©μ΄μ μ΄ λͺ¨λ μ€νλλ€.
3. stop()
μμμ clearQueue()
λ©μλλ νλ₯Ό μ κ±°ν λΏ ν¨κ³Ό μ€κ°μ μ λλ©μ΄μ
μ μ μ§νλ κΈ°λ₯μ ν¬ν¨νκ³ μμ§ μλ€.
- μ λλ©μ΄μ
μ μ μ§νλΌλ©΄
stop()
λ©μλλ₯Ό μ¬μ©ν΄μΌ νλ€.
$(selector).stop();
$(selector).stop(clrearQueue);
$(selector).stop(clearQueue, gotoEnd);
맀κ°λ³μ clearQueue
μ gotoEnd
λ λΆλ¦¬μΈκ°μΌμΈ true, falseλ₯Ό μ
λ ₯νλ€.
κΈ°λ³Έκ°(default) μ stop(false, false)
첫 λ²μ§Έ 맀κ°λ³μμΈ clearQueue
λ₯Ό trueλ‘ μ€μ νλ©΄ clearQueue()
λ©μλλ₯Ό μ€ννλ κ²κ³Ό κ°μ ν¨κ³Όλ₯Ό λΈλ€.
λ λ²μ§Έ 맀κ°λ³μμΈ gotoEnd
λ₯Ό trueλ‘ μ€μ νλ©΄ μ μ리μμ λ©μΆλ κ²μ΄ μλ ν¨κ³Όλ₯Ό μ§μ ν μ΅μ’
ννμμ λ©μΆκ² λλ€.
clearQueue : true :: ν¨κ³Ό μ λλ©μ΄μ νμ λ΄μ©μ μ κ±°
goToEnd : true :: μ€νμ€μΈ μ λλ©μ΄μ μ΅μ’ μμΉλ‘ λ°λ‘ μ΄λ
<button>stop(false, false)</button>
<button>stop(true,false)</button>
<button>stop(false, true)</button>
<button>stop(true, true)</button>
<div class="box1"></div>
$('button').on('click', function(){
var $html = $(this).html();
var evalText = '$(".box1").' + $html;
// λ©μλμ€ν
eval(evalText);
});
setInterval(function(){
$('.box1')
.animate({
left: '500'
}, 1000)
.animate({
left: 0
}, 1000)
}, 3000);
μ ν¨κ³Όλ setInterval
λ‘ μΈν΄ 3μ΄λ§λ€ μ λλ©μ΄μ
μ΄ λμνλλ‘ μ μλμ΄ μλ€.
1μ΄κ° μ€λ₯Έμͺ½μΌλ‘ 500pxμ μ΄λνκ³ 1μ΄κ° left: 0
μΌλ‘ μΈν΄ μ μλ¦¬λ‘ λμμ€λ ν¨κ³Όμ΄λ€. κ·Έλ¦¬κ³ 3μ΄κ°μ μΈν°λ²λ‘ μΈν΄ 2μ΄κ°μ μ λλ©μ΄μ
ν¨κ³Όκ° λλ ν 1μ΄κ° μ λλ©μ΄μ
μ΄ μ μ§ν κ²κ³Ό κ°μ ν¨κ³Όλ₯Ό λ΄κ³ μλ€.
μμ κ° λ²νΌμ ν΄λ¦ν ν¨κ³Όλ λ€μκ³Ό κ°λ€.
1) stop(false, false)
-
μ°μΈ‘μΌλ‘ 500pxμ΄λνλ μ€μ ν΄λ¦ -> μ€λ₯Έμͺ½μΌλ‘ μ΄λνλ κ²μ λ©μΆκ³ μ μ리μμ λ°λ‘ μΌμͺ½μΌλ‘ λλμκ°λ€.
stop()
λ©μλλ κΈ°λ³Έμ μΌλ‘ μ λλ©μ΄μ μ μ μ§νλ κΈ°λ₯μΌλ‘,μ°μΈ‘ μ΄λμ€μ stop() λ²νΌ ν΄λ¦νλ€λ©΄ 첫 λ²μ§Έ μ λλ©μ΄νΈ λ©μλμμ μ μ©λ
left: 500
μ΄ λ°λ‘ μ μ§νκ³ λ€μ μ λλ©μ΄νΈκ° μ μ©λleft: 0
μ ν¨κ³Όκ° λμ μ μλ¦¬λ‘ λμκ°λ,μ μλ¦¬λ‘ λμκ°λ λμ€μ stop()λ²νΌμ ν΄λ¦νλ€λ©΄ λ°λ‘ μ λλ©μ΄μ μ΄ μ μ§νκ² λλ€.
μμ μ λλ©μ΄μ μΈ μ°μΈ‘μΌλ‘ μ΄λνλ ν¨κ³Όλ μλ£λ μνμ΄κ³ λ§μ§λ§ μ λλ©μ΄μ μ΄ μ€ννλ μ€μ stop()ν΄λ¦ν κ²½μ°λΌλ©΄ μ μλ¦¬λ‘ λμμ€λ μ€μ λ©μΆλ κ²μ΄ λΉμ°νλ€.
2) stop(true, false)
-
clearQueue
κ° μ μ©λ λ²νΌμΌλ‘ μ°μΈ‘, μ’μΈ‘μΌλ‘ μ΄λνλ κ²μ λ©μΆκ³setInterval()
ν¨μκ° μ€νλ λκΉμ§ λκΈ°νλ€.λ€μ λ§ν΄, μ λλ©μ΄μ μ μ μ§νλ©΄μ νλ₯Ό μ κ±°νλ€.
μ°μΈ‘μΌλ‘ μ΄λμμ λ²νΌμ λλ₯΄λ©΄ μ λλ©μ΄μ μ΄ ν¨κ³Όκ° μ μ§νλ©΄μ λ λ²μ§Έ λκΈ° μ€μΈ νμΈ μ λλ©μ΄νΈ νκ° μ κ±°λ κ²μ΄κ³ ,
μ μλ¦¬λ‘ λμμ€λ λμ€μ ν΄λ¦νλ€λ©΄ μ λλ©μ΄μ ν¨κ³Όκ° μ μ§νκ³ λκΈ°μ€μΈ νκ° μμΌλ―λ‘
setInterval()
ν¨μκ° μ€νλ λκΉμ§ λκΈ°νκ² λλ€.
3) stop(false, true)
-
goToEndλ₯Ό trueλ‘ μ§μ ν μ μ΅μ’ μνμμ λ©μΆλ€.
μ°μΈ‘λ²νΌ ν΄λ¦ μ
left: 500
ν¨κ³Όκ° μ€ν μ€μ΄κ³ μ΄ ν¨κ³Όμ μ΅μ’ μνμμ λ©μΆκ² λλ€. κ·Έλμ μ°μΈ‘μΌλ‘ μ΄λμ€μ λ²νΌμ λλ₯΄λ©΄ λΉ λ₯΄κ² μκ°μ΄λν κ²μ²λΌ μ΄λ ν λ€μ μ λλ©μ΄νΈκ° μ€ννλ€.κ·Έλ¦¬κ³ μ’μΈ‘μΌλ‘ λλμμ€λ μ€μ λ²νΌμ λλ λ€λ©΄
left: 0
μ μ΅μ’ μνλ‘ λΉ λ₯΄κ² ν¨κ³Όκ° μμ±λ ν λ©μΆλ€.λ€μ λ§ν΄,
goToEnd
μtrue
κ°μ ν΄λΉ μ λλ©μ΄μ ν¨κ³Όλ₯Ό μ΅μ’ μνλ‘ μ μ§μν€λ ν¨κ³Όμ΄λ€.
4) stop(true, true)
-
νλ₯Ό μ κ±°νλ λμμ μ λλ©μ΄μ ν¨κ³Όλ μ΅μ’ μνλ‘ μ μν¨λ€.
μ°μΈ‘λ²νΌ ν΄λ¦ μ μκ° λ°μ€λ μ°μΈ‘ μ΄λμ€μΈ ν¨κ³Όλ₯Ό μ΅μ’ μνλ‘ μ μ§μν€λ©΄μ λκΈ° μ€μΈ νλ₯Ό μ κ±°νλ€.
νΉμ μ’μΈ‘μΌλ‘ λμμ€κ³ μκΈ° λλ¬Έμ νκ° μ κ±°λμ§ μμκ±°λΌ μκ°νμ§λ§ setInterval()λ©μλ μ€ν ν λ€μ μ°μΈ‘μΌλ‘ μ΄λν ν μ’μΈ‘μΌλ‘ λμμ€κΈ° λλ¬Έμ κ·Έλ κ² λ³΄μ΄λ κ²μ΄λ€.
[μΆκ°]μλ³΄λ€ μλ μμ κ° μ΄ν΄μλ¨
<div class="box"></div>
body { width: 500px; margin: 40px auto; }
.box { position: relative; width: 50px; height: 50px; background-color: #444; }
$('.box')
.animate({left: '+=60'}, 2000)
.aniamte({width: '+=60'}, 2000)
.animate({height: '+=60'}, 2000)
// 3μ΄νμ ν¨μ μ€ν.
setTimeout(function(){
$('.box').stop(false, false); // (1)
$('.box').stop(true, false); // (2)
$('.box').stop(false, true); // (3)
$('.box').stop(false, false); // (4)
}, 3000);
(1) stop(false, false)
3μ΄ νμ stop()
μ΄ μ€νλλ―λ‘ left μ΄λ(2μ΄) -> width λμ΄μ§λ€ λ©μΆλ€.(3μ΄ λ!) -> height += 60 μ€ν
(2) stop(true, false)
3μ΄ νμ stop(true)
μ΄ μ€νλλ―λ‘ left μ΄λ(2μ΄) -> width λμ΄μ§λ€κ° λ©μΆλ€.(3μ΄ λ!) -> νκ° λΉμμ§
(3) stop(false, true)
3μ΄ νμ stop(false, true)
μ΄ μ€νλλ―λ‘ left μ΄λ(2μ΄) -> width λμ΄μ§λ€κ°(3μ΄ λ!) animate μ΄(ms)λ μ€μ§λκ³ μ€νμΌ μ€ν(width += 60) -> μ΄μ΄μ height +=60 μ€ν
(4) stop(true, true)
3μ΄ νμ stop(true, true)
μ΄ μ€νλλ―λ‘ left μ΄λ(2μ΄) -> width λμ΄μ§λ€κ°(3μ΄ λ) animate μ΄(ms) μ€μ§, μ€νμΌ μ€ν(width += 60)
goToEnd :: μ λλ©μ΄μ μ€νμΌλ§ μ μ©. msμ μ©μλ¨.
4. delay()
delay()
λ μ€νμ€μΈ ν¨μλ₯Ό μ ν΄μ§ μκ°λ§νΌ μ€μ§(μ°κΈ°)μν¨λ€.
.delay( duration, [, queueName] )
durationμλ μ€μ§ν μκ°μ΄ λ€μ΄κ°λ€. μ«μλ‘ μ ν λλ λ¨μμ 1/1000μ΄μ΄κ³ , slow(600) λλ fast(200)λ‘ μ ν μ μλ€.
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<button>μ λλ©μ΄μ
delay μ€ννκΈ°</button>
.box { margin-top: 20px; width: 50px; height: 50px; background-color: blue; position: relative; }
button { margin-top: 20px; }
$('button').on('click', function(){
$('.box').each(function(index){
$(this)
.delay(index*500)
.animate({
left: '300'
}, 'slow')
.delay((index+500)*500)
.aniamte({
left: 0
}, 'slow')
})
});
κ° λ°μ€λ delay() λ©μλλ‘ μΈν΄ 0.5μ΄ μ§μ° νμ μ λλ©μ΄μ ν¨κ³Όκ° λνλλ€.