자, μ΄λ²ˆμ—λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ΄μš©ν•΄μ„œ 화면에 μ• λ‹ˆλ©”μ΄μ…˜μ„ λ³΄μ—¬μ£ΌλŠ” 방법을 ν•œλ²ˆ λ°°μ›Œλ³ΌκΉŒμš”?

 

μ‹œμž‘ν•˜κΈ° 전에 이미 μžλ°”μŠ€ν¬λ¦½νŠΈ 기반의 μ• λ‹ˆλ©”μ΄μ…˜μ„ μœ„ν•œ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ‘΄μž¬ν•œλ‹€λŠ” 것을 μ•Œκ³  λ„˜μ–΄κ°‘μ‹œλ‹€. ( 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