์ž, ์ด๋ฒˆ์—๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ํ™”๋ฉด์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ํ•œ๋ฒˆ ๋ฐฐ์›Œ๋ณผ๊นŒ์š”?

 

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ด๋ฏธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ๋„˜์–ด๊ฐ‘์‹œ๋‹ค. ( Script.Aculo.us. )

์ด๋Ÿฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ๊ทธ๋ž˜๋„ ์–ด๋–ค์‹์œผ๋กœ ๋™์ž‘์„ ํ•˜๋Š”์ง€๋Š” ์•Œ๊ณ ๋„˜์–ด๊ฐ€์•ผ ๋‚˜์ค‘์— ๋ณธ์ธ์ด ์ด๋Ÿฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•ด์„œ ๋” ์ข‹๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋Ÿผ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”? ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃฐ ๊ฒ๋‹ˆ๋‹ค. ์–ด๋–ค ์‹์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์™„์„ฑ์ด ๋˜๋Š”์ง€ ๋ง์ด์ฃ . 

๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ํ•จ์ˆ˜๋ถ€ํ„ฐ ํ™•์ธ์„ ํ•ด๋ณผ๊นŒ์š”?  

  • setTimeout( ํ•จ์ˆ˜๋ช…, ๋ฐ€๋ฆฌ์ดˆ) - ์ง€์ •ํ•œ ๋ฐ€๋ฆฌ์ดˆ ํ›„์— ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค. ( ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋œ ๋’ค์— ํŠน์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋‹ค์‹œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค. ) 

  • setInterval( ํ•จ์ˆ˜๋ช…, ๋ฐ€๋ฆฌ์ดˆ) - ์ง€์ •ํ•œ ๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ์ง€๋‚  ๋•Œ๋งˆ๋‹ค ํ•œ๋ฒˆ์”ฉ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค. ( ์‹คํ–‰์‹œํ‚จ ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜์ง€ ์•Š์•„๋„ ํŠน์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋˜ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค. ) 

  • clearTimeout( setTimeout() ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜ ) - setTimeout() ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜์˜ ํƒ€์ด๋จธ๋ฅผ ํด๋ฆฌ์–ด์‹œํ‚ต๋‹ˆ๋‹ค. ( ๋ฌด์Šจ ๋ง์ธ์ง€๋Š” ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด ์ดํ•ด๊ฐ€ ๊ฐ€์‹ค๊ฒ๋‹ˆ๋‹ค. ) 

๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— DOM ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ด์šฉํ•ด์„œ ํŠน์ • ๊ฐ์ฒด์˜ ์œ„์น˜๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ ๋„˜์–ด๊ฐ€์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. top ์ด๋‚˜ left ๊ฐ™์€ ์†์„ฑ์„ ์ค„ ์ˆ˜ ์žˆ๋Š”๊ฑฐ์ฃ . ๊ฐ„๋‹จํ•œ ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// Set distance from left edge of the screen.
object.style.left = distance in pixels or points; 

or
// Set distance from top edge of the screen.
object.style.top = distance in pixels or points; 

์ˆ˜๋™์  ์• ๋‹ˆ๋ฉ”์ด์…˜

์ด๋ฒˆ ์˜ˆ์ œ๋Š” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ด๋ฏธ์ง€๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 10ํ”ฝ์…€์”ฉ ์›€์ง์—ฌ์ฃผ๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด moveRight()ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ์„ ํ•˜๋Š”๋ฐ ์ด ํ•จ์ˆ˜๋Š” imgObj.style.left๋ฅผ ์ด์šฉํ•ด์„œ ์™ผ์ชฝ์—์„œ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€๋ฅผ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค. init()์—์„œ๋Š” left์˜ ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •ํ•ด์ฃผ๋Š”๋ฐ ์ด ์ดˆ๊ธฐ๊ฐ’์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค์Œ 10์„ ๋”ํ•œ๊ฐ’์„ ๋‹ค์‹œ left์— ๋„ฃ์–ด์ฃผ๊ณ  ์žˆ๋„ค์š”. ์ฆ‰, ์ดˆ๊ธฐ์œ„์น˜์—์„œ ๊ณ„์† 10์”ฉ ๋”ํ•ด์ง€๋Š” ํ•จ์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ดํ•ด๊ฐ€ ์•ˆ๋˜์‹œ๋ฉด init()์—์„œ left์˜ ์ˆซ์ž๋ฅผ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค์Œ moveRight()์—์„œ parseInt(...)๋ถ€๋ถ„์„ ๋นผ๊ณ  ๊ทธ๋ƒฅ 10 + 'px'๋งŒ left์— ํ• ๋‹นํ•ด์ค˜ ๋ณด์„ธ์š”. 

<html>
<head>
<title>JavaScript Animation</title>
<script type="text/javascript">

var imgObj = null;
function init(){
   imgObj = document.getElementById('myImage');
   imgObj.style.position= 'relative'; 
   imgObj.style.left = '0px'; 
}
function moveRight(){
   imgObj.style.left = parseInt(imgObj.style.left) + 10 + 'px';
}
window.onload =init; 

</script>
</head>
<body>
<form>
<img id="myImage" src="/images/html.gif" />
<p>Click button below to move the image to right</p>
<input type="button" value="Click Me" onclick="moveRight();" />
</form>
</body>
</html>

์œ„ ์˜ˆ์ œ์— ๋Œ€ํ•œ ๋‹จ๊ณ„์  ์‹คํ–‰์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ getElementById() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ DOM ๊ฐ์ฒด๋ฅผ ์–ป์–ด์˜ต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๋˜๊ฒ ์ฃ . ๊ทธ๋ ‡๊ฒŒ ์–ป์–ด์˜จ ๊ฐ์ฒด๋ฅผ imgObj ๋ณ€์ˆ˜์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.  

  • Window๊ฐ€ ๋กœ๋“œ๋  ๋•Œ init() ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์ด ๋˜๋ฉด์„œ imgObj ๊ฐ์ฒด์˜ position ๊ณผ left ์†์„ฑ์„ ์ดˆ๊ธฐํ™” ํ•ด์ค๋‹ˆ๋‹ค. 

  • ๊ทธ๋ฆฌ๊ณ  ๋ฒ„ํŠผ์ด ํ™”๋ฉด์— ์ƒ์„ฑ์ด ๋˜๊ณ , ์ด ๋ฒ„ํŠผ์ด ํด๋ฆญ์ด ๋˜๋Š” ์ˆœ๊ฐ„ moveRight() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด์„œ left ๊ฑฐ๋ฆฌ๊ฐ€ 10 ํ”ฝ์…€ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ์ˆซ์ž์— ๋งˆ์ด๋„ˆ์Šค ๋ถ€ํ˜ธ๋ฅผ ๋ถ™์ด๋ฉด ๋ฐ˜๋Œ€์ชฝ์œผ๋กœ ์›€์ง์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ž๋™ ์• ๋‹ˆ๋ฉ”์ด์…˜

์œ„์—์„œ๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์›€์ง์ด๋„๋ก ํ–ˆ์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ์‹œ๊ฐ„์— ๋”ฐ๋ผ์„œ ์›€์ง์ด๋„๋ก ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ œ์ผ ์ฒ˜์Œ์— ์„ค๋ช…๋“œ๋ฆฐ ์„ธ๊ฐ€์ง€ ํ•จ์ˆ˜๋“ค ์ค‘์—์„œ setTimeout() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

<html>
<head>
<title>JavaScript Animation</title>
<script type="text/javascript">

var imgObj = null;
var animate ;
function init(){
   imgObj = document.getElementById('myImage');
   imgObj.style.position= 'relative'; 
   imgObj.style.left = '0px'; 
}
function moveRight(){
   imgObj.style.left = parseInt(imgObj.style.left) + 10 + 'px';
   animate = setTimeout(moveRight,20); // 20 ๋ฐ€๋ฆฌ์ดˆ ๋งˆ๋‹ค moveRight ํ•จ์ˆ˜ ํ˜ธ์ถœ
}
function stop(){
   clearTimeout(animate);
   imgObj.style.left = '0px'; 
}
window.onload =init;

</script>
</head>
<body>
<form>
<img id="myImage" src="/images/html.gif" />
<p>Click the buttons below to handle animation</p>
<input type="button" value="Start" onclick="moveRight();" />
<input type="button" value="Stop" onclick="stop();" />
</form>
</body>
</html>

์ด๋ฒˆ์—๋Š” ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ๋ฒ„ํŠผ ๋‘๊ฐœ๊ฐ€ ์ƒ๊ฒผ๊ณ  ์‹œ์ž‘๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด moveRight()ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ์ด ๋˜๋Š”๋ฐ ์ฒซ๋ฒˆ์งธ ์˜ˆ์ œ์—์„œ ์“ฐ์˜€๋˜ moveRight()๊ณผ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅด๋„ค์š” ๊ทธ์ตธ? ํ•œ์ค„์ด ๋” ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. animate๋ณ€์ˆ˜์— setTimeout(moveRight, 20)์„ ํ• ๋‹นํ•ด์ฃผ์—ˆ๋„ค์š”. setTimeout ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ moveRightํ•จ์ˆ˜๋ฅผ 20๋ฐ€๋ฆฌ์ดˆ ๋งˆ๋‹ค ์‹คํ–‰์„ ์‹œํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋ฅผ ์ด์šฉํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜

์•„๋ž˜ ์˜ˆ์ œ๋Š” ๋งˆ์šฐ์Šค๊ฐ€ ํŠน์ • ์ด๋ฏธ์ง€ ์œ„์— ์˜ฌ๋ผ๊ฐ”์„ ๋•Œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

<html>
<head>
<title>Rollover with a Mouse Events</title>
<script type="text/javascript">

if(document.images){
    var image1 = new Image();      // Preload an image
    image1.src = "/images/html.gif";
    var image2 = new Image();      // Preload second image
    image2.src = "/images/http.gif";
}

</script>
</head>
<body>
<p>Move your mouse over the image to see the result</p>
<a href="#" onMouseOver="document.myImage.src=image2.src;"
            onMouseOut="document.myImage.src=image1.src;">
<img name="myImage" src="/images/html.gif" />
</a>
</body>
</html>

์œ„ ์†Œ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ์„œ๋ฅผ ํ•œ๋ฒˆ ๋ณผ๊นŒ์š”? 

  • ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋”ฉ๋  ๋•Œ if ๋ฌธ์—์„œ ์ด๋ฏธ์ง€ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋ธ”๋ฝ๋‚ด์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์ง€๋งŒ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • Image() ์ƒ์„œ์ž๋ฅผ ์ด์šฉํ•ด์„œ 2๊ฐœ์˜ ์ด๋ฏธ์ง€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ๊ฐ์˜ ์ด๋ฏธ์ง€ ์†Œ์Šค๋ฅผ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค.

  • <a>์—์„œ # (hash mark) ๋Š” ๋งํฌ๋ฅผ ์—†์• ์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ž™ํ–ˆ์„ ๋•Œ ํŠน์ • URL๋กœ ๊ฐ€๋ ค๋Š” ์‹œ๋„๋ฅผ ์•ˆํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • onMouseOver ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ๋งˆ์šฐ์Šค๊ฐ€ ๋งํฌ(์ด๋ฏธ์ง€) ์œ„์— ์˜ฌ๋ผ์˜ฌ ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋Œ€๋กœ  onMouseOut ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ๋งˆ์šฐ์Šค๊ฐ€ ๋งํฌ(์ด๋ฏธ์ง€)๋ฐ–์œผ๋กœ ๋‚˜๊ฐˆ ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

 

์ง์ ‘ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ณ  ์ด๊ฒƒ์ €๊ฒƒ ๋ฐ”๊ฟ”์„œ๋„ ํ•ด๋ณด์„ธ์š”. ๊ทธ๋ž˜์•ผ ์‹ค๋ ฅ์ด ์ƒ๊น๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋กœ์„œ์˜ ํž˜์ด ์ƒ๊ธฐ๋Š” ๊ฑฐ์ฃ .

๊ฒŒ์ž„์ผ€๋ฆญํ„ฐํ•œํ…Œ ์•„์ดํ…œ๋งŒ ์‚ฌ์ฃผ์ง€ ๋ง๊ณ  ์—ฌ๋Ÿฌ๋ถ„์˜ ํž˜์„ ๊ธธ๋Ÿฌ๋ณด์„ธ์š”. 

 

 

Reference : http://www.tutorialspoint.com/javascript/javascript_animation.htm