JavaScirpt/jQuery

jQuery - 8 [이펙트 효과, 요소숨김표시, 페이드, 슬라이드, 이펙트 효과 제어, jQuery.fx 객체, 사용자 정의 이벤트]

Tree_Park 2021. 3. 22. 16:09
728x90

이펙트 효과


코딩의 시작, TCP School


요소의 표시와 숨김


이펙트 (effect) 효과

  • 이러한 이펙트 효과는 기본 설정으로 바로 사용할 수도 있고,
  • animate() 메소드를 통해 설정을 변경해서 사용할 수도 있다.

요소의 표시와 숨김 (.hide(), .show())

.hide() 메소드

  • 선택한 요소를 순간적으로 사라지게 한다.
  • .hide() 메소드를 통해 숨겨진 요소는 CSS display 속성값이 none으로 설정

.show() 메소드

  • 선택한 요소를 순간적으로 나타내게 한다.

$(function() {
    $("#showBtn").on("click",  function() {
        $("#text").show(); // id가 "text"인 요소를 나타나게 함.
    });
    $("#hideBtn").on("click",  function() {
        $("#text").hide(); // id가 "text"인 요소를 숨김.
    });

    // 인수로 밀리초에 해당하는 숫자나 "slow", "fast" 등의 예약어를 전달하여, 이펙트 효과의 속도를 조절 가능
    $("#showBtn").on("click",  function() {
        $("#text").show(2000); // id가 "text"인 요소를 2초에 걸쳐 나타나게 함.
    });

    $("#hideBtn").on("click",  function() {
        $("#text").hide("fast"); // id가 "text"인 요소를 빠르게 숨김.
    });
});

CSS visibility 속성의 값을 hidden으로 설정해도 HTML 요소를 숨길 수 있다.

  • 이때는 보이지만 않을 뿐 여전히 웹 페이지의 레이아웃에 영향을 주게 된다.

See the Pen show and hide by taegeon-park (@taegeon-park23) on CodePen.


요소의 표시 상태 토글

선택한 요소의 현재 표시 상태에 따라 다른 동작을 하는 .toggle() 메소드를 사용할 가능

  • 선택한 요소가 현재 사라진 상태라면 .show() 메소드의 동작을 수행
  • 나타나 있는 상태라면 .hide() 메소드의 동작을 수행.
$(function() {
    $("#toggleBtn").on("click",  function() {
        $("#text").toggle("slow"); // id가 "text"인 요소를 느리게 나타나게 하거나 숨김.
    });
});

See the Pen show hide toggle by taegeon-park (@taegeon-park23) on CodePen.


페이드 효과


페이드(fade) 효과

제이쿼리에서 페이드(fade) 효과는 해당 요소의 CSS opacity 속성값을 빠르게 변경하여 표현.

  1. .fadeIn()
  2. .fadeout()
  3. .fadeTo()
  4. .fadeToggle()

페이드 인(fade in)과 페이드 아웃(fade out)

  • .fadeIn() 메소드는 선택한 요소를 서서히 사라지게 하고,
  • .fadeOut() 메소드는 서서히 나타나게 한다.
$(function() {
    $("#fadeInBtn").on("click",  function() {
        $("#divBox").fadeIn(); // id가 "divBox"인 요소를 점점 나타나게 함.
    });

    $("#fadeOutBtn").on("click",  function() {
        $("#divBox").fadeOut(); // id가 "divBox"인 요소를 점점 사라지게 함.
    });

    // 인수로 밀리초에 해당하는 숫자나 "slow", "fast" 등의 예약어를 전달하여, 페이드 효과의 속도를 조절할 수도 있다.
    $("#fadeInBtn").on("click",  function() {
        $("#divBox").fadeIn("slow"); // id가 "divBox"인 요소를 느리게 점점 나타나게 함.
    });

    $("#fadeOutBtn").on("click",  function() {
        $("#divBox").fadeOut(2000); // id가 "divBox"인 요소를 2초에 걸쳐 점점 사라지게 함.
    });
});

See the Pen fade by taegeon-park (@taegeon-park23) on CodePen.


페이드 효과의 토글

제이쿼리에서는 선택한 요소의 현재 표시 상태에 따라 다른 동작을 하는 .fadeToggle() 메소드를 사용 가능

  • 선택한 요소가 현재 사라진 상태라면 .fadeIn() 메소드의 동작을 수행하고,
  • 나타나 있는 상태라면 .fadeOut() 메소드의 동작을 수행.
$(function() {
    $("#fadeToggleBtn").on("click",  function() {
        // id가 "divBox"인 요소를 1초에 걸쳐 점점 나타나게 하거나 사라지게 함.
        $("#divBox").fadeToggle(1000);
    });
});

See the Pen fade toggle by taegeon-park (@taegeon-park23) on CodePen.


페이드 효과의 투명도 설정

.fadeTo() 메소드를 사용하면

  • 페이드 효과에서 사용하는 최종 opacity 속성값을 직접 설정 가능
$(function() {
    $("#fadeBtn").on("click",  function() {
    // id가 "divBox_01"인 요소를 2초에 걸쳐 opacity 속성값을 0.2까지만 변경시킴.
    $("#divBox_01").fadeTo(2000,  0.2);
    // id가 "divBox_02"인 요소를 2초에 걸쳐 opacity 속성값을 0.5까지만 변경시킴.
    $("#divBox_02").fadeTo(2000,  0.5);
    // id가 "divBox_03"인 요소를 2초에 걸쳐 opacity 속성값을 0.8까지만 변경시킴.
    $("#divBox_03").fadeTo(2000,  0.8);
    });
});

See the Pen fade opacity by taegeon-park (@taegeon-park23) on CodePen.


페이드 효과와 관련된 메소드




|메소드|설명|
|.fadeIn()|선택한 요소의 CSS opacity 속성값을 높여가며 요소를 나타지게 함.|
|.fadeOut()|선택한 요소의 CSS opacity 속성값을 높여가며 요소를 사라지게 함.|
|.fadeTo()|페이드 효과에서 사용하는 opacity 속성값을 직접 설정함.|
|.fadeToggle()|선택한 요소에 fadeIn() 메소드와 fadeOut() 메소드를 번갈아가며 적용함.|




슬라이드 효과

슬라이드(slide) 효과

제이쿼리에서 슬라이드(slide) 효과는 해당 요소의 CSS height 속성값을 빠르게 변경하여 표현

슬라이드 업(slide up)과 슬라이드 다운(slide down)

.slideUp() 메소드는 선택한 요소가 서서히 올라가면서 사라지는 효과를 보여줌

  • 또한 선택한 요소가 서서히 내려오면서 나타나는 효과를 보여줌
$(function() {
    $("#slideUpBtn").on("click",  function() {
        $("#divBox").slideUp(); // id가 "divBox"인 요소를 올라가면서 사라지게 함.
    });

    $("#slideDownBtn").on("click",  function() {
        $("#divBox").slideDown(); // id가 "divBox"인 요소를 내려오면서 나타나게 함.
    });

    // 인수로 밀리초에 해당하는 숫자나 "slow", "fast" 등의 예약어를 전달하여, 슬라이드 효과의 속도를 조절 가능
    $("#slideUpBtn").on("click",  function() {
        $("#divBox").slideUp(500); // id가 "divBox"인 요소를 0.5초에 걸쳐 올라가면서 사라지게 함.
    });

    $("#slideDownBtn").on("click",  function() {
        $("#divBox").slideDown(300); // id가 "divBox"인 요소를 0.3초에 걸쳐 내려오면서 나타나게 함.
    });
});

See the Pen slide by taegeon-park (@taegeon-park23) on CodePen.


슬라이드 효과의 토글

제이쿼리에서는 선택한 요소의 현재 표시 상태에 따라 다른 동작을 하는 .slideToggle() 메소드를 사용 가능

  • 선택한 요소가 현재 사라진 상태라면 .slideDown() 메소드의 동작을 수행하고,
  • 나타나 있는 상태라면 .slideUp() 메소드의 동작을 수행

$(function() {
    $("#slideToggleBtn").on("click",  function() {
        // id가 "divBox"인 요소를 빠르게 올라가면서 사라지거나 내려오면서 나타나게 함.
        $("#divBox").slideToggle("fast");
    });
});

See the Pen slide-toggle by taegeon-park (@taegeon-park23) on CodePen.


슬라이드 효과와 관련된 메소드




메소드 설명
.slideUp() 선택한 요소의 CSS height 속성값을 높여가며 요소를 사라지게 함.
.slideDown() 선택한 요소의 CSS height 속성값을 낮춰가며 요소를 나타나게 함.
.slideToggle() 선택한 요소에 slideUp() 메소드와 slideDown() 메소드를 번갈아가며 적용함.



이펙트 효과의 제어


이펙트 효과의 제어

제이쿼리에서는 다음 메소드를 사용하여 사용자가 직접 이펙트 효과를 제어 가능


1. .delay() 2. .stop() 3. .finish()

이펙트 효과의 지연 설정

.delay() 메소드는 실행 중인 큐 안에서 연속적으로 실행되는 이펙트 효과 사이의 지연 시간을 설정

$(function() {
    $("#startBtn").on("click",  function() {
        // id가 "divBox"인 요소를 0.5초에 걸쳐 사라지게 하고
        // 1초의 지연시간 뒤에 다시 2초에 걸쳐 나타나게 함.
        $("#divBox").fadeOut(500).delay(1000).fadeIn(2000);
    });
});

See the Pen effect by taegeon-park (@taegeon-park23) on CodePen.


이펙트 효과의 중지 (.stop(), .finish())

제이쿼리에서는 .stop() 메소드와 .finish() 메소드를 사용하여 실행 중인 이펙트 효과를 중지 가능

  • .stop() 메소드는 선택한 요소에서 실행 중인 모든 이펙트 효과를 즉시 중지.
  • .finish() 메소드는 거기에 더해서 선택한 요소가 포함된 큐까지 제거하여 모든 이펙트 효과를 전부 종료.
// 요소마다 직정 등록된 이벤트 핸들러는 현재 존재하느 <a> 요소에만 연결되며, 새롭게 추가되는 요소에는 연결되지 않는다.
$(function() {
    $("#toggleBtn").on("click",  function() {
    // id가 "divBox"인 요소를 2초에 걸쳐 올라가면서 사라지거나 내려오면서 나타나게 함.
        $("#divBox").slideToggle(2000);
    });
    $("#stopBtn").on("click",  function() {
    // id가 "divBox"인 요소에서 실행 중인 모든 이펙트 효과를 즉시 중지시킴.
        $("#divBox").stop();
    });
    $("#finishBtn").on("click",  function() {
    // id가 "divBox"인 요소에서 실행 중인 모든 이펙트 효과를 즉시 중지시키고, 그 큐까지 모두 제거함.
    $("#divBox").finish();
    });
});

See the Pen effect stop, finish by taegeon-park (@taegeon-park23) on CodePen.


이펙트 효과의 제어와 관련된 메소드




메소드 설명
.delay() 실행 중인 큐 안에서 연속적으로 실행되는 이펙트 효과 사이의 지연 시간을 설정함.
.stop() 선택한 요소에서 실행 중인 모든 이펙트 효과를 즉시 중지시킴.
.finish() 선택한 요소에서 실행 중인 모든 이펙트 효과를 즉시 중지시키고, 선택한 요소가 포함된 큐까지 제거하여 모든 이펙트 효과를 전부 종료시킴.



jQuery.fx 객체

jQuery.fx 객체

제이쿼리의 jQuery.fx 객체는 이펙트 효과가 구현되는 방법을 제어하는 다양한 프로퍼티를 가지고 있다.


  1. jQeury.fx.speeds
  2. jQeury.fx.interval
  3. jQeury.fx.off

jQuery.fx.speeds 프로퍼티

jQuery.fx 객체의 speeds 프로퍼티는 "slow", "normal", "fast" 값을 가지고 이펙트 효과의 속도를 나타낸다.

프로퍼티 값 밀리초(milisecond)
fast 200
normal 400
slow 600



$(function() {
    $("#toggleBtn").on("click",  function() {
        // id가 "divBox"인 요소를 빠르게(0.2초에 걸쳐) 올라가면서 사라지거나 내려오면서 나타나게 함.
        $("#divBox").slideToggle("fast");
    });
    $("#setBtn").on("click",  function() {
        // jQuery.fx 객체의 speeds 프로퍼티의 fast의 기본값을 1초로 변경함.
        jQuery.fx.speeds.fast  =  1000;
    });
});

See the Pen fx by taegeon-park (@taegeon-park23) on CodePen.


jQuery.fx.interval 프로퍼티

jQuery.fx 객체의 interval 프로퍼티는 이펙트 효과가 보여지는 동안의 초당 프레임 수를 나타낸다.

  • 연속적인 프레임에서의 초당 프레임 수는 13으로 기본 설정
  • 이러한 초당 프레임 수를 interval 프로퍼티를 이용하여 사용 목적에 맞게 변경 가능.

jQuery.fx.off 프로퍼티

jQuery.fx 객체의 off 프로퍼티를 true로 설정하면, 모든 이펙트 효과를 사용할 수 없게된다.

  • 이렇게 이펙트 효과가 비활성화되면,
    • 이펙트 효과는 실행되지 않으며 이펙트 효과의 마지막 상태로 즉시 변경
  • off 프로퍼티는 특히 구형 버전의 브라우저를 다룰 때 유용하게 사용 가능.
$(function() {
    $("#toggleBtn").on("click",  function() {
        // id가 "divBox"인 요소를 1초에 걸쳐 올라가면서 사라지거나 내려오면서 나타나게 함.
        $("#divBox").slideToggle(1000);
    });
    $("#forbidBtn").on("click",  function() {
        // jQuery.fx 객체의 off 프로퍼티를 true로 설정함.
        jQuery.fx.off  =  true;
    });
});

See the Pen jQuery.fx.off by taegeon-park (@taegeon-park23) on CodePen.


jQuery.fx 객체 프로퍼티




프로퍼티 설명
jQeury.fx.speeds 밀리초에 해당하는 "slow", "fast" 등의 값을 가지고 이펙트 효과의 속도를 나타냄.
jQeury.fx.interval 이펙트 효과가 보여지는 동안의 초당 프레임 수를 나타냄.
jQeury.fx.off 모든 이펙트 효과를 사용할 수 없도록 비활성화시킴.



사용자 정의 이펙트


.animate() 메소드

  • 제이쿼리에서는 animate() 메소드를 이용하여 사용자가 직접 원하는 이펙트 효과를 정의가능
  • .animate() 메소드는 여러 CSS 속성을 이용하여 새로운 이펙트 효과를 만들어낸다.

  • .animate() 메소드의 원형

원형

$(선택자).animate(프로퍼티[,지속시간][,시간당속도함수][,콜백함수]);
  • 프로퍼티 파라미터
    • 필수이며, 이펙트 효과를 구성할 CSS 속성을 정의.
  • 지속 시간
    • 이펙트 효과가 지속될 시간을 전달.
  • 시간당 속도 함수(easing function)
    • 이펙트 효과의 시간당 속도를 전달.
  • 콜백 함수
    • 이펙트 효과의 동작이 완료된 후에 실행할 함수를 정의.
$(function() {
    $("#animateBtn").on("click",  function() {
        $("#divBox").animate( // id가 "divBox"인 요소를
            {
                left:  "+=100", // 오른쪽으로 100픽셀 이동하고,
                opacity:  0.2  // 투명도를 0.2로 변경함.
            }, 500, function() { // 0.5초에 걸쳐서 이펙트 효과가 진행됨.
                $("#text").html("사용자 정의 이펙트가 실행됐어요!");
            }
        );
    });
});

See the Pen animate by taegeon-park (@taegeon-park23) on CodePen.


.animate() 메소드 - 사용할 수 있는 CSS 속성

  • .animate() 메소드는 색(color)에 관한 속성을 제외한 거의 모든 CSS 속성을 사용 가능
    • .css() 메소드에서는 하이픈(-)으로 연결된 CSS 속성 명과 camelCase 방식으로 바꾼 속성 명을 둘 다 사용 가능

  • 하지만 .animate() 메소드에서는 camelCase 방식의 속성 명만 사용 가능



.animate() 메소드에서 사용할 수 있는 CSS 속성
backgroundPositionX
backgroundPositionY
borderWidth
borderBottomWidth
borderLeftWidth
borderRightWidth
borderTopWidth
borderSpacing
margin
marginBottom
marginLeft
marginRight
marginTop
outlineWidth
padding
paddingBottom
paddingLeft
paddingRight
paddingTop
height
width
maxHeight
maxWidth
minHeight
minWidth
fontSize
bottom
left
right
top
letterSpacing
wordSpacing
lineHeight
textIndent



.animate() 메소드 - 미리 정의된 값

.animate() 메소드는 CSS 속성값으로 미리 정의된 다음 값을 사용 가능


  1. show
  2. hide
  3. toggle
$(function() {
    $("#animateBtn").on("click",  function() {
        $("#divBox").animate({
            height:  "toggle" // CSS height 속성값을 미리 정의된 "toggle"로 설정함.
        });
    });
});

.animate() 메소드 - 시간당 속도 함수

.animate() 메소드는 시간당 속도 함수(easing function)을 사용하여 이펙트 효과의 시간당 속도를 설정 가능

$(function() {
    $("#divBox").mouseenter(  function() {
        $(this).stop().animate({
            width:  "300px" // CSS width 프로퍼티의 값을 "300px"로 설정함.
        },  1000,  "linear"); // 시간당 속도 함수를 "linear"으로 설정함.
    });

    $("#divBox").mouseleave(  function() {
        $(this).stop().animate({
            width:  "50px" // CSS width 프로퍼티의 값을 "50px"로 설정함.
        },  1000,  "swing"); // 시간당 속도 함수를 "swing"으로 설정함.
    });
});

See the Pen animate2 by taegeon-park (@taegeon-park23) on CodePen.