#
3.EFFECT
#
목차
1. 이펙트 1.1. html 작성 1.2. css 작성 1.3. 제이쿼리로 작성 1.4. 자바스크립트로 작성
2. 애니메이트 2.1. html 2.2. css 2.3. 제이쿼리 2.4. 자바스크립트
3. easing 3.1. 사용법 html 작성 css 작성 jq1 작성 jq2 작성
#
1. 이펙트
#
이펙트를 적용해보자
- 제이쿼리 api 문서의 이펙트 카테고리
-
jQuery-effecthttps://api.jquery.com/category/effects/
-
- 제이쿼리UI api 문서의 이펙트 카테고리
-
jQueryUI-effecthttps://jqueryui.com/effect/
-
#
1.1. html 작성
<div id="wrap">
<h1>제이쿼리 Effect to 바닐라스크립트</h1>
<p>제이쿼리에서는 화면전환, 슬라이드 다운과 업 효과 등<br />다양한 효과 메서드를 제공하며, 바닐라JS로 구현이 가능합니다.</p>
<h2>show/hide 효과</h2>
<p><button id="btn1">hide</button> <button id="btn2">show</button></p>
<p class="box1">선택 요소를 숨기거나 노출하고 싶을 경우에 사용합니다.<br />
hide(시간)/show(시간) 시간은 fast, normal, slow 등으로 입력할 수 있으며, 1000분의 1초 단위의 숫자로 표기할 수도 있습니다.</p>
<h2>toggle 효과</h2>
<p><button id="btn3">toggle</button></p>
<p class="box2">선택 요소가 숨겨져 있다면 보이게 하고,<br />보이고 있다면 숨기는 역할을 합니다.</p>
<h2>slideDown/up 효과</h2>
<p>
<button id="btn4">slideUp</button>
<button id="btn5">slideDown</button>
<button id="btn6">slideToggle</button>
</p>
<p>slideUp은 선택 요소를 위로 미끄러지듯 말아 올리면서 숨깁니다.<br />반면,
slideDown은 선택 요소를 아래로 미끄러지듯 말아 내리면서 노출시킵니다.</p>
<h2>fadeIn/fadOut</h2>
<p>
<button id="btn7">fadeOut</button>
<button id="btn8">fadeIn</button>
<button id="btn9">fadeToggle</button>
</p>
<p>fadeOut은 선택 요소를 천천히 사라지게 만듭니다.<br />fadeIn은 선택 요소를 천천히 나타나게 합니다.</p>
<h2>fadeTo 효과</h2>
<p>
<button id="btn10">fadeTo(0.3)</button>
<button id="btn11">fadeTo(1)</button>
</p>
<p id="box3">fadeTo는 선택 요소를 원하는 만큼만 <br />보이거나 숨길 수 있습니다.</p>
</div>
</body>
#
1.2. css 작성
* {
margin: 0;
padding: 0;
}
li {
list-style-type: none;
}
body {
font: 12px/1.5 '굴림', Gulim;
margin: 10px;
}
h2 {
margin-top: 20px;
}
.box1,
.box2,
h2 + p + p {
overflow: hidden;
max-height: 40px;
}
#
1.3. 제이쿼리로 작성
#
STEP1-show
코어로드 후 작성 숨김 / 표시 / 토글 효과
// <script src='https://code.jquery.com/jquery-3.7.1.min.js'></script>
$(() => {
$('#btn1').on('click', function () {
$('.box1').hide('slow');
});
$('#btn2').on('click', function () {
$('.box1').show(1000);
});
$('#btn3').on('click', function () {
$('.box2').toggle(500);
});
});
#
STEP2-slide
펼침 / 접힘 / 토글
$('#btn4').on('click', function () {
$(this).parent().next().slideUp(1000);
});
$('#btn5').on('click', function () {
$(this).parent('p').next().slideDown('fast');
});
$('#btn6').on('click', function () {
$(this).parent('p').next().slideToggle('fast');
});
#
STEP3-fade
서서히 표시 / 서서히 숨김 / 토글 / 투명도 조정하여 표시
$('#btn7').on('click', function () {
$(this).parent('p').next().fadeOut(1000);
});
$('#btn8').on('click', function () {
$(this).parent('p').next().fadeIn('slow');
});
$('#btn9').on('click', function () {
$(this).parent('p').next().fadeToggle('normal');
});
$('#btn10').on('click', function () {
$(this).parent('P').next().fadeTo('slow', 0.3);
});
$('#btn11').on('click', function () {
$(this).parent('p').next('#box3').fadeTo('slow', 1);
});
#
1.4. 자바스크립트로 작성
#
STEP1-show
head 태그사이에 스크립트 작성 숨김 / 표시 / 토글 효과
// <script src="./effect.js" defer></script>
const box1 = document.querySelector('.box1');
const box2 = document.querySelector('.box2');
document.querySelector('#btn1').addEventListener('click', function () {
box1.style.transition = 'max-height .75s';
box1.style.maxHeight = '0px';
});
document.querySelector('#btn2').addEventListener('click', function () {
box1.style.transition = 'max-height 1s';
box1.style.maxHeight = '40px';
});
document.querySelector('#btn3').addEventListener('click', function () {
box2.style.transition = 'max-height .5s';
if (!(getComputedStyle(box2).maxHeight === '0px')) {
box2.style.maxHeight = '0px';
} else {
box2.style.maxHeight = '40px';
}
});
#
STEP2-slide
펼침 / 접힘 / 토글
document.querySelector('#btn4').addEventListener('click', function () {
this.parentNode.nextElementSibling.style.transition = 'max-height .5s';
this.parentNode.nextElementSibling.style.maxHeight = '0px';
});
document.querySelector('#btn5').addEventListener('click', function () {
this.parentNode.nextElementSibling.style.transition = 'max-height .25s';
this.parentNode.nextElementSibling.style.maxHeight = '40px';
});
document.querySelector('#btn6').addEventListener('click', function () {
var btn6ParentNext = this.parentNode.nextElementSibling; //엄마친구
btn6ParentNext.style.transition = 'max-height .25s';
if (!(getComputedStyle(btn6ParentNext).maxHeight === '0px')) {
btn6ParentNext.style.maxHeight = '0px';
} else {
btn6ParentNext.style.maxHeight = '40px';
}
});
#
STEP3-fade
서서히 표시 / 서서히 숨김 / 토글 / 투명도 조정하여 표시
document.querySelector('#btn7').addEventListener('click', function () {
var btn7ParentNextStyle = this.parentNode.nextElementSibling.style;
btn7ParentNextStyle.transition = 'opacity 1s';
btn7ParentNextStyle.opacity = '0';
setTimeout(function () {
btn7ParentNextStyle.display = 'none';
}, 1000);
});
document.querySelector('#btn8').addEventListener('click', function () {
var btn8ParentNextStyle = this.parentNode.nextElementSibling.style;
btn8ParentNextStyle.display = 'block';
setTimeout(function () {
btn8ParentNextStyle.transition = 'opacity .75s';
btn8ParentNextStyle.opacity = '1';
}, 1);
});
document.querySelector('#btn9').addEventListener('click', function () {
var btn9ParentNext = this.parentNode.nextElementSibling;
btn9ParentNext.style.transition = 'opacity .5s';
if (!(getComputedStyle(btn9ParentNext).opacity === '0')) {
btn9ParentNext.style.opacity = '0';
setTimeout(function () {
btn9ParentNext.style.display = 'none';
}, 500);
} else {
btn9ParentNext.style.display = 'block';
setTimeout(function () {
btn9ParentNext.style.opacity = '1';
});
}
});
document.querySelector('#btn10').addEventListener('click', function () {
this.parentNode.nextElementSibling.style.transition = 'opacity .75s';
this.parentNode.nextElementSibling.style.opacity = '.3';
});
document.querySelector('#btn11').addEventListener('click', function () {
this.parentNode.nextElementSibling.style.transition = 'opacity .75s';
this.parentNode.nextElementSibling.style.opacity = '1';
});
#
2. 애니메이트
제이쿼리에서는 에니메이트를 구현할수 있는 메서드를 제공한다 에니메이트(animate)와 가속도(easing) 옵션을 사용해보자
#
2.1. html
<div class="box box1">상자1</div>
#
2.2. css
.box1 {
position: absolute;
left: 0;
width: 100px;
height: 100px;
background-color: red;
}
#
2.3. 제이쿼리
$(function () {
$('.box1').animate(
{
left: '500px',
width: '200px',
height: '200px',
opacity: 0.5,
},
1000
);
});
#
2.4. 자바스크립트
#
css 추가
추가
.box1 {
transition: all 1s;
}
#
js 작성
window.onload = () => {
var box1 = document.querySelector('.box1');
function box1Animate() {
box1.style.left = 500 + 'px';
box1.style.width = 200 + 'px';
box1.style.height = 200 + 'px';
box1.style.opacity = '0.5';
requestAnimationFrame(box1Animate);
}
requestAnimationFrame(box1Animate);
};
#
3. easing
애니메이션 진행시 가속도 옵션을 지정하여 물체의 운동감을 다양하게 표현 제이쿼리UI를 추가해야 사용할수 있다.
#
3.1. 사용법
jquery 코어파일을 로드 한 다음 ui를 로드 해야 한다.
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script>
#
html 작성
<div class="main">
<h1>Easing Example I</h1>
<div id="animate">
<p>Click on me!</p>
</div>
</div>
#
css 작성
#animate {
width: 200px;
height: 200px;
background-color: tomato;
padding: 20px;
}
#animate p {
color: black;
}
#
jq1 작성
$(function () {
$('#animate').on('click', function () {
$(this).animate({ width: '400px', height: '400px' }, 1000, 'easeInBounce'); // end animate
}); // end click
});
#
jq2 작성
data()
메서드를 사용한 토글애니메이션 구현
$('#animate').on('click', function () {
$this = $(this);
console.log($this.data('click') === 'even');
if ($this.data('click') === 'even') {
$this.data('click', 'odd');
$this.animate({ width: '200px', height: '200px' }, 1000, 'easeInOutSine'); // end animate
} else {
$this.data('click', 'even');
$this.animate({ width: '400px', height: '400px' }, 1000, 'easeInBounce'); // end animate
}
}); // end click
[3] : false 가 반환됨. else 문이 실행. this의 data는 even 이 할당됨