jQuery 효과

jQuery 라이브러리를 사용하면 손쉽게 문서 객체에 효과를 줄 수 있습니다. 최근에는 CSS3를 사용해 애니메이션을 구현하는 방법도 등장했습니다. CSS3로 애니메이션 효과를 적용하면 성능은 좋지만 구 버전의 인터넷 익스플로러에서는 작동하지 않습니다. 여기에서는 jQuery 라이브러리를 사용해 문서 객체에 효과를 줍니다.


5.1 효과 메소드 소개


jQuery 라이브러리는 [표11-9]처럼 문서 객체를 보여 주거나 보이지 않게 만드는 간단한 효과 메소드를 제공합니다. slideDown()과 slideUp()은 메소드 이름에 사라지거나 사라지지 않는다는 의미가 잘 드러나지 않으므로 주의하기 바랍니다.


[표 11-9] jQuery 라이브러리의 간단한 효과 메소드


메소드 

설명 

show(속도) 

문서 객체를 크게 하면서 표시 

hide(속도) 

문서 객체를 작게 하면서 사라짐 

toggle(속도) 

show() 메소드와 hide() 메소드를 번갈아 실행 

slideDown(속도) 

문서 객체를 슬라이드 효과와 함께 보여 표시 

slideUp(속도) 

문서 객체를 슬라이드 효과와 함께 사라지게 함 

slideToggle(속도) 

slideDown() 메소드와 slideUp() 메소드를 번갈아 실행 

fadeln(속도) 

문서 객체를 선명하게 하면서 표시 

fadeOut(속도) 

문서 객체를 흐리게 하면서 사라지게 함 

fadeToggle(속도) 

fadeln() 메소드와 fadeOut() 메소드를 번갈아 실행 


모든 간단한 효과 메소드에는 속도를 매개 변수로 입력할 수 있습니다. 속도를 입력하지 않으면 기본 값인 500밀리초가 적용됩니다. 속도에는 밀리초 숫자나 [표 11-10]의 문자열을 입력할 수 있습니다.


[표 11-10] 속도 문자열


속도 문자열 

속도 

slow 

600밀리초 

normal 

500밀리초 

fast 

400밀리초 


기본 예제 11-12 태그가 사라지고 나타나는 효과 구현


간단하게 다음 코드처럼 fadeToggle() 메소드를 사용해 봅시다. 코드를 실행하고 버튼을 클리갛면 div 태그에 해당하는 내용이 서서히 사라집니다. 사라진 이후에 버튼을 클릭하면 다시 나타납니다.


[코드 11-20] 사라지고 나타나는 효과


<!DOCTYPE html>

<html>

<head>

<title></title>

<script src="https://code.jquery.com/jquery-3.1.1.js"></script>

<script>

// 이벤트를 연결합니다.

$(document).ready(function () {

// 이벤트를 연결합니다.

$('button').click(function () {

// 간단한 효과를 적용합니다.

$('page').fadeToggle('slow');

});

});

</script>

</head>

<body>

<button>Toggle Show</button>

<div class="page">

<h1>Lorem ipsum dolor sit amet</h1>

<p>Lorem ipsum dolor sit amet, consectetur adipiscding elit. </p>

</div>

</body>

</html>


5.2 애니메이션 기본


문서 객체에 애니메이션을 부여할 때는 animate() 메소드를 사용합니다.


표 11-11 jQuery 라이브러리의 사용자 지정 효과 메소드


메소드 

설명 

animate() 

사용자 지정 효과 생성 


animate() 메소드는 다음 세 가지 형태로 사용합니다. Easing Function 속성가지 포함하면 더욱 다양한 형태로 사용할 수 있습니다. 하지만 기본적인 jQuery 라이브러리로는 거의 사용하지 않으므로 생략합니다.


① $(selector).animate(속성 객체);

② $(selector).animate(속성 객체, 시간);

③ $(selector),animate(속성 객체, 시간, 콜백 함수);


TIP_ Easing Function 속성은 jQuery UI 플러그인에서 사용합니다.


기본 예제 11-13 애니메이션 효과


사각형의 크기를 변경하는 간단한 예제를 만들면서 메소드를 익혀보겠습니다. 다음 코드는 animate() 메소드를 사용해 div 태그의 width 속성과 height 속성을 변경합니다. 코드를 실행하면 사각형이 부드럽게 변형됩니다.


[코드 11-21] 애니메이션 사용


<!DOCTYPE html>

<html>

<head>

<title></title>

<script src="https://code.jquery.com/jquery-3.1.1.js"></script>

<script>

$(document).ready(function () {

// 스타일을 변경합니다.

$('#box').css({

width: 100,

height: 100,

background: 'red'

}).animate){

width: 300,

opacity: 0.5,

}, 500);

});

</script>

</head>

<body>

<div id="box"></div>

</body>

</html>


left, top 속성과 같은 위치 속성을 사용하려면 position 속성을 absolute 똔은 relative로 지정해야 합니다.


TIP_ 기억이 잘 나지 않는다면 6장을 참고하세요.


NOTE_ 메소드 체이닝을 사용한 애니메이션 실행


animate() 메소드는 메소드 체이닝을 사용하면 애니메이션이 종료된 후에도 새로운 애니메이션을 연속해서 실행할 수 있습니다.


[코드 11-22] animate() 메소드 연속 사용


<!DOCTYPE html>

<html>

<head>

<title></title>

<script src="https://code.jquery.com/jquery-3.1.1.js"></script>

<script>

$(document).ready(function () {

// 스타일을 변경합니다.

$('#box').css({

width: 100,

height: 100,

background: 'absolute',

left: 10,

top: 10

})animte({

width: 300,

opacity: 0.5

}, 500)animate({

opacity: 1,

left: 100,

top: 200

}, 500);

});

</script>

</head>

<body>

<div id="box"></div>

</body>

</html>


빨간색 직사각형을 만드는 첫 번째 animate() 메소드가 500밀리초 동안 실행됩니다. 이어서 도형을 이동 시키는 두 번째 animate() 메소드가 500밀리초 동안 실행됩니다. 따라서 최종적으로 1초(1000밀리초)동안 애니메이션이 실행됩니다. 인쇄 매체의 특성상 움직이는 동작을 표현하기가 어려우므로 코드를 직접 실행해 결과를 확인하기 바랍니다.


NOTE_ 상대적 증가


jQuery 라이브러리의 animate() 메소드에는 조금 재미있는 기능이 있습니다. 정확한 숫자가 아니라 [코드 11-23]처럼 '+=숫자' 형태의 문자열을 입력하면 현재 속성에서 위치 또는 크기를 상대적으로 변환합니다. 실행해서 확인해 보세요.


[코드 11-23] animate() 메소드 상대 적용


<script>

$(document).ready(function () {

// 스타일을 변경합니다.

$('#box').css({

width: 100,

height: 100,

background: 'red',

position: 'absolute',

left: 10,

top: 10

}).animate({

height: '+=300',

width: '-=50',

left: '+=300',

opacity: 0.5

}, 500);

});

</script>


5.3 애니메이션 정지


jQuery 라이브러리는 animate() 메소드 또는 delay() 메소드를 사용해 [그림 11-6]처럼 애니메이션을 예약합니다. 차곡차곡 들어간 애니메이션은 동시에 실행된은 것이 아니라 차례대로 실행됩니다.


[표 11-12]의 애니메이션 정지 메소드를 사용하면 애니메이션을 잠시 멈추거나 중지시킬 수 있습니다.


[표 11-12] 애니메이션 정지 메소드


메소드 

설명 

delay() 

애니메이션을 특정 시간만큼 정지 

stop()

애니메이션을 완전히 정지 


우선 delay() 메소드를 살펴보겠습니다. delay() 메소드를 사용하면 animate() 메소드 사이에 간격을 줄 수 있습니다. 다음 코드처럼 animate() 메소드 사이에 입력합니다. 다른 곳에도 입력할 수 있지만 효과가 없습니다.


$('h1').animate({ }).delay(1000).animate({ });


이번에는 stop() 메소드를 살펴보겠습니다. delay() 메소드에는 매개 변수로 숫자를 입력했지만 stop() 메소드에는 불을 입력합니다.


$('h1').stop(clearQueue, goToEnd);


매개 변수 clearQueue의 기본 값은 false로 현재 실행 중인 애니메이션만 멈추지만, true를 입력하면 예약된 모든 애니메이션을 제거합니다. 매개 변수 goToEnd는 애니메이션을 중지할 때 어떠한 상태로 종료할지를 지정합니다. 예를 들어 다음 코드처럼 애니메이션을 만들었다고 가정합시다.


$('#box').css({

width: 100,

}).animate({

width: 200

});


매개 변수 goToEnd를 사용하지 않고애니메이션 진행 중에 stop() 메소드를 사용하면 그 시점에서 애니메이션이 멈춥니다. 코드에서는 width 속성을 200px까지 증가시키라고 했지만, 현재 상태에서 멈추기 때문에 100px과 200px 사이에 있습니다.


하지만 매개 변수 goToEnd를 사용하면 애니메이션이 멈추었을 때 animate() 메소드에서 지정한 최종 수치로 변경해서 정지합니다. 말이 조금 어려우므로 예제를 살펴보겠습니다.


기본 예제 11-14 애니메이션 효과 정지


다음 코드는 간단한 입력 양식을 사용해 각 매개 변수를 조절할 수 있게 합니다. 코드를 실행하면 빨간색 상자의 길이가 변하는 애니메이션을 3초 주기로 반복합니다. 애니메이션이 시행되는 동안 매개 변수 clearQueue와 goToEnd를 조절하고 버튼을 클릭해서 어떤 방식으로 작동하는지 직접 확인합니다.


[코드 11-24] 애니메이션 효과 컨트롤


<!DOCTYPE html>

<html>

<head>

<title>Animation Basic</title>

<script src="https://code.jquery.com/jquery-3.1.1.js"></script>

<script>

$(document).ready(function () {

// 변수를 선언합니다.


var clearQueue = false;

var goToEnd = false;


// 이벤트를 연결합니다.

$('#clearQueue').change(function () {

clearQueue = $(this).prop('checked')

});


$(#goToEnd').change(function () {

goToEnd = $(this).prop('checked');

});


$(#stopButton').click(function () {

$('#box').stop(clearQueue, goToEnd);

});


// 스타일을 변경합니다.

$('box').css({

width: 100,

height: 100,

background: 'red'

})


// 타이머를 연결합니다.

setInterval(function () {

$('#box').animate({

width: 200

}, 1000).delay(1000).animate({

width: 100,

height: 100

}, 1000);

}, 3000);

});

</script>

</head>

<body>

<!-- 입력 양식 -->

<label>clearQueue</label>

<input id="clearQueue" type="checkbox" />

<br />

<label>goToEnd</label>

<input id="goToEnd" type="checkbox" />

<br />

<button id="stopButton">stop</button>

<!-- 애니메이션 -->

<div id="box"></div>

</body>

</html>



'프로그래밍 > Javascript' 카테고리의 다른 글

자바스크립트와 jQuery 라이브러리 응용  (0) 2017.08.18
jQuery 이벤트  (0) 2017.08.16
jQuery 문서 객체 조작  (0) 2017.08.14
jQuery 문서 객체 선택  (0) 2017.08.14
jQuery 라이브러리 설정  (0) 2017.08.14
TAGS.

Comments