ÙÛÙ ÛØ´ÙâÙØ§Û CSS Ø§Ù Ú©Ø§Ù Ø§ÙØ¬Ø§Ù اÙÛÙ ÛØ´ÙâÙØ§Û ساد٠را بدÙÙ Ø¬Ø§ÙØ§ اسکرÛپت ÙØ±Ø§ÙÙ Ù ÛâÚ©ÙÙØ¯.
Ø¬Ø§ÙØ§ اسکرÛپت Ù Û ØªÙØ§Ùد Ø¨Ø±Ø§Û Ú©ÙØªØ±Ù اÙÛÙ ÛØ´Ù ÙØ§Û CSS Ù ØØªÛ Ø¨ÙØªØ± کرد٠آÙÙØ§ با کد Ú©Ù Û Ø§Ø³ØªÙØ§Ø¯Ù Ø´ÙØ¯.
Ø§ÙØªÙا٠CSS transitions
Ø§ÛØ¯Ù Ø§ÙØªÙا٠CSS ساد٠است. ٠ا ÛÚ© ÙÛÚÚ¯Û Ø±Ø§ ØªÙØ¶ÛØ Ù Û Ø¯ÙÛÙ Ù ÚÚ¯ÙÙ٠تغÛÛØ±Ø§Øª Ø¢Ù Ø¨Ø§ÛØ¯ Ù ØªØØ±Ú© Ø´ÙØ¯. ÙÙÚ¯Ø§Ù Û Ú©Ù ÙÛÚÚ¯Û ØªØºÛÛØ± Ù Û Ú©ÙØ¯Ø Ù Ø±ÙØ±Ú¯Ø± اÙÛÙ ÛØ´Ù را رÙÚ¯ Ù Û Ú©ÙØ¯.
ÛØ¹ÙÛ ØªÙÙØ§ ÚÛØ²Û Ú©Ù ÙÛØ§Ø² دارÛ٠تغÛÛØ± ÙÛÚÚ¯Û Ø§Ø³Øª Ù Ø§ÙØªÙØ§Ù Ø³ÛØ§Ù ØªÙØ³Ø· Ù Ø±ÙØ±Ú¯Ø± Ø§ÙØ¬Ø§Ù Ù Û Ø´ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ CSS Ø²ÛØ± تغÛÛØ±Ø§Øª âØ±ÙÚ¯ Ù¾Ø³âØ²Ù ÛÙÙâ Ø±Ø§ ب٠٠دت Û³ ثاÙÛÙ Ù ØªØØ±Ú© Ù ÛâÚ©ÙØ¯:
.animated {
transition-property: background-color;
transition-duration: 3s;
}
ØØ§Ù اگر Ø¹ÙØµØ±Û Ø¯Ø§Ø±Ø§Û Ú©ÙØ§Ø³ â.animatedâ Ø¨Ø§Ø´Ø¯Ø ÙØ± تغÛÛØ±Û در âØ±ÙÚ¯ Ù¾Ø³âØ²Ù ÛÙÙâ Ø¯Ø± Ø·ÙÙ 3 ثاÙÛÙ Ù ØªØØ±Ú© Ù ÛâØ´ÙØ¯.
Ø¨Ø±Ø§Û Ù ØªØØ±Ú© Ø³Ø§Ø²Û Ù¾Ø³ ز٠ÛÙ٠رÙÛ Ø¯Ú©Ù Ù Ø²ÛØ± Ú©ÙÛÚ© Ú©ÙÛØ¯:
<button id="color">Click me</button>
<style>
#color {
transition-property: background-color;
transition-duration: 3s;
}
</style>
<script>
color.onclick = function() {
this.style.backgroundColor = 'red';
};
</script>
4 ÙÛÚÚ¯Û Ø¨Ø±Ø§Û ØªÙØµÛÙ Ø§ÙØªÙا٠CSS ÙØ¬Ùد دارد:
transition-propertytransition-durationtransition-timing-functiontransition-delay
٠ا Ø¢ÙÙØ§ را در ÛÚ© ÙØØ¸Ù Ù¾ÙØ´Ø´ Ø®ÙØ§ÙÛÙ Ø¯Ø§Ø¯Ø ÙØ¹ÙØ§Ù ØªÙØ¬Ù داشت٠باشÛÙ Ú©Ù ÙÛÚÚ¯Û Ù Ø´ØªØ±Ú© âtransitionâ Ø§Ø¬Ø§Ø²Ù Ù Û Ø¯ÙØ¯ تا Ø¢ÙÙØ§ را با ÙÙ Ø¨Ù ØªØ±ØªÛØ¨ Ø§Ø¹ÙØ§Ù Ú©ÙÛÙ : âØªØ£Ø®ÛØ± Ø²Ù Ø§Ù Ø¨ÙØ¯Û-ع٠Ùکرد ٠دت ز٠اÙâ Ù ÙÙ ÚÙÛÙ Ù ØªØØ±Ú© Ø³Ø§Ø²Û ÚÙØ¯ÛÙ ÙÛÚÚ¯Û Ø¨Ù Ø·ÙØ± Ù٠ز٠اÙ.
ب٠عÙÙØ§Ù Ù
Ø«Ø§ÙØ اÛ٠دکÙ
Ù ÙÙ
color Ù ÙÙ
font-size را Ù
ØªØØ±Ú© Ù
Û Ú©ÙØ¯:
<button id="growing">Click me</button>
<style>
#growing {
transition: font-size 3s, color 2s;
}
</style>
<script>
growing.onclick = function() {
this.style.fontSize = '36px';
this.style.color = 'red';
};
</script>
ØØ§Ùا Ø¨ÛØ§ÛÛØ¯ ÙÛÚÚ¯Û ÙØ§Û اÙÛÙ ÛØ´Ù را ÛÚ©Û ÛÚ©Û Ù¾ÙØ´Ø´ دÙÛÙ .
transition-property
در «transition-propertyÂ»Ø Ù
ا ÙÙØ±Ø³ØªÛ از ÙÛÚÚ¯ÛâÙØ§ را Ø¨Ø±Ø§Û Ù
ØªØØ±Ú© کرد٠Ù
ÛâÙÙÛØ³ÛÙ
Ø Ø¨ÙâØ¹ÙÙØ§Ù Ù
ثاÙ: left, margin-left, height, color. ÛØ§ Ù
ÛâØªÙØ§ÙÛÙ
all را بÙÙÛØ³ÛÙ
ک٠ب٠Ù
Ø¹ÙØ§Û «animate ب٠ÙÙ
Ù ÙÛÚÚ¯ÛâÙØ§Â» است.
ØªÙØ¬Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯ Ú©Ù ÙÛÚÚ¯Û ÙØ§ÛÛ ÙØ¬Ùد دارد Ú©Ù ÙÙ Û ØªÙØ§Ù Ø¢ÙÙØ§ را Ù ØªØØ±Ú© کرد. با اÛÙ ØØ§ÙØ Ø¨ÛØ´ØªØ± ÙÛÚÚ¯ÛâÙØ§ÛÛ Ú©Ù Ù Ø¹Ù ÙÙØ§Ù Ù ÙØ±Ø¯ Ø§Ø³ØªÙØ§Ø¯Ù ÙØ±Ø§Ø± Ù ÛâÚ¯ÛØ±Ùد Ù ØªØØ±Ú© ÙØ³ØªÙد.
٠دت Ø²Ù Ø§Ù Ø§ÙØªÙاÙ
در âtransition-durationâ Ù ÛâØªÙØ§ÙÛ٠٠شخص Ú©ÙÛ٠ک٠اÙÛÙ ÛØ´Ù ÚÙØ¯Ø± Ø·ÙÙ Ù Ûâکشد. Ø²Ù Ø§Ù Ø¨Ø§ÛØ¯ در ÙØ§Ùب ز٠ا٠CSS: بر ØØ³Ø¨ ثاÙÛÙ ÛØ§ Ù ÛÙÛ Ø«Ø§ÙÛ٠«ms» باشد.
transition-delay
در transition-delay Ù
ÛâØªÙØ§ÙÛÙ
ØªØ§Ø®ÛØ± ÙØ¨Ù از اÙÛÙ
ÛØ´Ù را Ù
شخص Ú©ÙÛÙ
. Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ اگر ØªØ§Ø®ÛØ± Ø§ÙØªÙا٠1 ثاÙÛÙ Ù Ù
دت Ø§ÙØªÙا٠2 ثاÙÛÙ Ø¨Ø§Ø´Ø¯Ø Ø§ÙÛÙ
ÛØ´Ù 1 ثاÙÛ٠پس از تغÛÛØ± ÙÛÚÚ¯Û Ø´Ø±ÙØ¹ Ù
ÛâØ´ÙØ¯ Ù Ù
دت زÙ
ا٠ک٠2 ثاÙÛÙ Ø®ÙØ§Ùد Ø¨ÙØ¯.
Ù
ÙØ§Ø¯Ûر Ù
ÙÙÛ ÙÛØ² Ù
Ù
ک٠است. سپس اÙÛÙ
ÛØ´Ù Ø¨ÙØ§ÙاصÙÙ ÙØ´Ø§Ù داد٠Ù
Û Ø´ÙØ¯Ø اÙ
ا ÙÙØ·Ù Ø´Ø±ÙØ¹ اÙÛÙ
ÛØ´Ù پس از Ù
ÙØ¯Ø§Ø± داد٠شد٠(زÙ
اÙ) Ø®ÙØ§Ùد Ø¨ÙØ¯. ب٠عÙÙØ§Ù Ù
Ø«Ø§ÙØ اگر ØªØ§Ø®ÛØ± Ø§ÙØªÙا٠-Û± ثاÙÛÙ Ù Ù
دت Ø§ÙØªÙا٠۲ ثاÙÛÙ Ø¨Ø§Ø´Ø¯Ø Ø§ÙÛÙ
ÛØ´Ù از ÙÛÙ
Ù Ø´Ø±ÙØ¹ Ù
ÛâØ´ÙØ¯ Ù Ù
دت زÙ
ا٠ک٠۱ ثاÙÛÙ Ø®ÙØ§Ùد Ø¨ÙØ¯.
در اÛÙØ¬Ø§ اÙÛÙ
ÛØ´Ù با Ø§Ø³ØªÙØ§Ø¯Ù از ÙÛÚÚ¯Û translate CSS اعداد را از 0 ب٠9 تغÛÛØ± Ù
ÛâØ¯ÙØ¯:
stripe.onclick = function() {
stripe.classList.add('animate');
};#digit {
width: .5em;
overflow: hidden;
font: 32px monospace;
cursor: pointer;
}
#stripe {
display: inline-block
}
#stripe.animate {
transform: translate(-90%);
transition-property: transform;
transition-duration: 9s;
transition-timing-function: linear;
}<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
Click below to animate:
<div id="digit"><div id="stripe">0123456789</div></div>
<script src="script.js"></script>
</body>
</html>ÙÛÚÚ¯Û transform Ø¨Ù Ø´Ú©Ù Ø²ÛØ± Ù
ØªØØ±Ú© است:
#stripe.animate {
transform: translate(-90%);
transition-property: transform;
transition-duration: 9s;
}
در Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§ Ø¬Ø§ÙØ§ اسکرÛپت Ú©ÙØ§Ø³ .animate را Ø¨Ù Ø¹ÙØµØ± اضاÙÙ Ù
Û Ú©ÙØ¯ â ٠اÙÛÙ
ÛØ´Ù Ø´Ø±ÙØ¹ Ù
Û Ø´ÙØ¯:
stripe.classList.add('animate');
Ù
ا ÙÙ
ÚÙÛÙ Ù
ÛâØªÙØ§ÙÛÙ
آ٠را از جاÛÛ Ø¯Ø± Ù
ÛØ§ÙÙ Ø§ÙØªÙØ§ÙØ از ÛÚ© عدد دÙÛÙ Ø´Ø±ÙØ¹ Ú©ÙÛÙ
Ø Ø¨Ù Ø¹ÙÙØ§Ù Ù
ثاÙ. Ù
ØªÙØ§Ø¸Ø± با ثاÙÛÙ ÙØ¹ÙÛØ با Ø§Ø³ØªÙØ§Ø¯Ù از transition-delay Ù
ÙÙÛ.
در اÛÙØ¬Ø§ اگر رÙÛ Ø±ÙÙ Ú©ÙÛÚ© Ú©ÙÛØ¯ â Ø§ÙÛÙ ÛØ´Ù را از ثاÙÛÙ ÙØ¹ÙÛ Ø´Ø±ÙØ¹ Ù Û Ú©ÙØ¯:
stripe.onclick = function() {
let sec = new Date().getSeconds() % 10;
stripe.style.transitionDelay = '-' + sec + 's';
stripe.classList.add('animate');
};#digit {
width: .5em;
overflow: hidden;
font: 32px monospace;
cursor: pointer;
}
#stripe {
display: inline-block
}
#stripe.animate {
transform: translate(-90%);
transition-property: transform;
transition-duration: 9s;
transition-timing-function: linear;
}<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
Click below to animate:
<div id="digit"><div id="stripe">0123456789</div></div>
<script src="script.js"></script>
</body>
</html>Ø¬Ø§ÙØ§ اسکرÛپت اÛ٠کار را با ÛÚ© خط اضاÙÛ Ø§ÙØ¬Ø§Ù Ù Û Ø¯ÙØ¯:
stripe.onclick = function() {
let sec = new Date().getSeconds() % 10;
// for instance, -3s here starts the animation from the 3rd second
stripe.style.transitionDelay = '-' + sec + 's';
stripe.classList.add('animate');
};
تابع Ø§ÙØªÙاÙ-ز٠اÙ
تابع Ø²Ù Ø§Ù Ø¨ÙØ¯Û ÙØÙÙ ØªÙØ²Ûع ÙØ±Ø¢ÛÙØ¯ اÙÛÙ ÛØ´Ù در Ø·Ù٠جدÙ٠ز٠اÙÛ Ø¢Ù Ø±Ø§ ØªÙØµÛÙ Ù Û Ú©ÙØ¯. Ø¢ÛØ§ Ø¨Ù Ø¢Ø±Ø§Ù Û Ø´Ø±ÙØ¹ Ù Û Ø´ÙØ¯ ٠سپس Ø³Ø±ÛØ¹ Ù Û Ø±ÙØ¯ ÛØ§ برعکس.
Ø¨Ù ÙØ¸Ø± Ù Û Ø±Ø³Ø¯ در ابتدا Ù¾ÛÚÛØ¯Ù ترÛÙ ÙÛÚÚ¯Û Ø¨Ø§Ø´Ø¯. ا٠ا اگر Ú©Ù Û Ø²Ù Ø§Ù Ø±Ø§ ب٠آ٠اختصاص دÙÛÙ Ø¨Ø³ÛØ§Ø± Ø³Ø§Ø¯Ù Ù Û Ø´ÙØ¯.
اÛÙ ÙÛÚÚ¯Û Ø¯Ù ÙÙØ¹ Ù ÙØ¯Ø§Ø± را Ù Û Ù¾Ø°ÛØ±Ø¯: Ù ÙØÙÛ Bezier ÛØ§ ٠راØÙ. Ø¨ÛØ§ÛÛØ¯ با Ù ÙØÙÛ Ø´Ø±ÙØ¹ Ú©ÙÛÙ Ø Ø²ÛØ±Ø§ Ø¨ÛØ´ØªØ± Ø§Ø³ØªÙØ§Ø¯Ù Ù Û Ø´ÙØ¯.
Bezier Ù ÙØÙÛ
تابع Ø²Ù Ø§Ù Ø¨ÙØ¯Û را Ù Û ØªÙØ§Ù ب٠عÙÙØ§Ù ÛÚ© Ù ÙØÙÛ Bezier با 4 ÙÙØ·Ù Ú©ÙØªØ±Ù Ú©Ù Ø´Ø±Ø§ÛØ· را Ø¨Ø±Ø¢ÙØ±Ø¯Ù Ù Û Ú©ÙØ¯ ØªÙØ¸Û٠کرد:
- اÙÙÛÙ ÙÙØ·Ù Ú©ÙØªØ±Ù:
(0,0). - آخرÛÙ ÙÙØ·Ù Ú©ÙØªØ±Ù:
(1,1). - Ø¨Ø±Ø§Û ÙÙØ§Ø· Ù
ÛØ§ÙÛØ Ù
ÙØ§Ø¯Ûر
xØ¨Ø§ÛØ¯ در بازÙ0..1باشدØyÙ Û ØªÙØ§Ùد ÙØ± ÚÛØ²Û باشد.
ÙØÙ Ø¨Ø±Ø§Û Ù
ÙØÙÛ Bezier در CSS: cubic-bezier(x2Ø y2Ø x3Ø y3). در اÛÙØ¬Ø§ Ø¨Ø§ÛØ¯ ÙÙØ· ÙÙØ§Ø· Ú©ÙØªØ±Ù 2 Ù 3 را Ù
شخص Ú©ÙÛÙ
Ø Ø²ÛØ±Ø§ اÙÙÛÙ ÙÙØ·Ù رÙÛ (0,0) ثابت شد٠است Ù ÙÙØ·Ù ÚÙØ§Ø±Ù
(1Ø1) است.
تابع Ø²Ù Ø§Ù Ø¨ÙØ¯Û سرعت ÙØ±Ø¢ÛÙØ¯ اÙÛÙ ÛØ´Ù را ØªÙØµÛÙ Ù Û Ú©ÙØ¯.
- Ù
ØÙر
xز٠ا٠است:0â Ø´Ø±ÙعØ1â Ù¾Ø§ÛØ§Ùtransition-duration. - Ù
ØÙر
yتک٠ÛÙ ÙØ±Ø¢ÛÙØ¯ را ٠شخص Ù Û Ú©ÙØ¯:0â Ù ÙØ¯Ø§Ø± Ø´Ø±ÙØ¹ ÙÛÚÚ¯ÛØ1â Ù ÙØ¯Ø§Ø± ÙÙØ§ÛÛ.
ساد٠ترÛÙ ØØ§Ùت زÙ
اÙÛ Ø§Ø³Øª ک٠اÙÛÙ
ÛØ´Ù Ø¨Ù Ø·ÙØ± ÛÚ©ÙÙØ§Ø®Øª ٠با ÙÙ
ا٠سرعت Ø®Ø·Û Ù¾ÛØ´ Ù
Û Ø±ÙØ¯. اÛ٠را Ù
Û ØªÙØ§Ù با Ù
ÙØÙÛ cubic-bezier(0Ø 0Ø 1Ø 1) Ù
شخص کرد.
در اÛÙØ¬Ø§ اÛÙ Ù ÙØÙÛ Ø¨Ù ÙØ¸Ø± Ù Û Ø±Ø³Ø¯:
⦠ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
Û Ø¨ÛÙÛÙ
Ø ÙÙØ· ÛÚ© خط Ù
ستÙÛÙ
است. با گذشت زÙ
ا٠(x)Ø ØªÚ©Ù
ÛÙ (y) اÙÛÙ
ÛØ´Ù Ø¨Ù Ø·ÙØ± Ù¾ÛÙØ³ØªÙ از 0 ب٠1 Ù
Û Ø±ÙØ¯.
ÙØ·Ø§Ø± در Ù Ø«Ø§Ù Ø²ÛØ± از ÚÙ¾ ب٠راست با سرعت Ø¯Ø§Ø¦Ù Û ØØ±Ú©Øª Ù Û Ú©ÙØ¯ (رÙÛ Ø¢Ù Ú©ÙÛÚ© Ú©ÙÛØ¯):
.train {
position: relative;
cursor: pointer;
width: 177px;
height: 160px;
left: 0;
transition: left 5s cubic-bezier(0, 0, 1, 1);
}<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
<img class="train" src="https://js.cx/clipart/train.gif" onclick="this.style.left='450px'">
</body>
</html>Ø§ÙØªÙا٠CSS بر اساس Ø¢Ù Ù
ÙØÙÛ Ø§Ø³Øª:
.train {
left: 0;
transition: left 5s cubic-bezier(0, 0, 1, 1);
/* click on a train sets left to 450px, thus triggering the animation */
}
⦠٠ÚÚ¯ÙÙÙ Ù Û ØªÙØ§ÙÛÙ ÙØ·Ø§Ø±Û را در ØØ§Ù Ú©Ø§ÙØ´ سرعت ÙØ´Ø§Ù دÙÛÙ Ø
Ù
ÛâØªÙØ§ÙÛÙ
از Ù
ÙØÙÛ Ø¯Ûگر Bezier Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
: cubic-bezier(0.0Ø 0.5Ø 0.5Ø 1.0).
ÙÙ ÙØ¯Ø§Ø±:
ÙÙ Ø§ÙØ·Ùر Ú©Ù Ù Û Ø¨ÛÙÛÙ Ø Ø§Û٠رÙÙØ¯ Ø³Ø±ÛØ¹ Ø´Ø±ÙØ¹ Ù Û Ø´ÙØ¯: Ù ÙØÙÛ Ø¨Ù Ø§ÙØ¬ Ù Û Ø±Ø³Ø¯ ٠سپس Ú©ÙØ¯ØªØ± Ù Ú©ÙØ¯ØªØ± Ù Û Ø´ÙØ¯.
در اÛÙØ¬Ø§ تابع Ø²Ù Ø§Ù Ø¨ÙØ¯Û در ع٠٠آ٠د٠است (رÙÛ train Ú©ÙÛÚ© Ú©ÙÛØ¯):
.train {
position: relative;
cursor: pointer;
width: 177px;
height: 160px;
left: 0px;
transition: left 5s cubic-bezier(0.0, 0.5, 0.5, 1.0);
}<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
<img class="train" src="https://js.cx/clipart/train.gif" onclick="this.style.left='450px'">
</body>
</html>CSS:
.train {
left: 0;
transition: left 5s cubic-bezier(0, .5, .5, 1);
/* click on a train sets left to 450px, thus triggering the animation */
}
ÚÙØ¯ÛÙ Ù
ÙØÙÛ Ø¯Ø§Ø®ÙÛ ÙØ¬Ùد دارد: linear, ease, ease-in, ease-out Ù ease-in-out.
linear Ù
Ø®ÙÙ cubic-bezier(0Ø 0Ø 1Ø 1) است â ÛÚ© خط Ù
ستÙÛÙ
Ø Ú©Ù Ø¯Ø± Ø¨Ø§ÙØ§ ØªÙØ¶ÛØ Ø¯Ø§Ø¯ÛÙ
.
ÙØ§Ù
âÙØ§Û دÛگر Ù
Ø®Ù٠عبارت cubic-bezier Ø²ÛØ± ÙØ³ØªÙد:
ease* |
ease-in |
ease-out |
ease-in-out |
|---|---|---|---|
(0.25, 0.1, 0.25, 1.0) |
(0.42, 0, 1.0, 1.0) |
(0, 0, 0.58, 1.0) |
(0.42, 0, 0.58, 1.0) |
* â Ø¨ÙâØ·ÙØ± Ù¾ÛØ´âÙØ±Ø¶Ø اگر تابع زÙ
اÙâØ¨ÙØ¯Û ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø ease Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâØ´ÙØ¯.
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ù
ÛâØªÙØ§ÙÛÙ
از ease-out Ø¨Ø±Ø§Û Ú©Ø§ÙØ´ سرعت ÙØ·Ø§Ø± Ø®ÙØ¯ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
:
.train {
left: 0;
transition: left 5s ease-out;
/* same as transition: left 5s cubic-bezier(0, .5, .5, 1); */
}
ا٠ا Ú©Ù Û Ù ØªÙØ§Ùت Ø¨Ù ÙØ¸Ø± Ù Û Ø±Ø³Ø¯.
ÛÚ© Ù ÙØÙÛ Bezier Ù Û ØªÙØ§Ùد باعث Ø´ÙØ¯ ک٠اÙÛÙ ÛØ´Ù از Ù ØØ¯ÙØ¯Ù Ø®ÙØ¯ ÙØ±Ø§ØªØ± Ø±ÙØ¯.
ÙÙØ§Ø· Ú©ÙØªØ±Ù رÙÛ Ù
ÙØÙÛ Ù
Û ØªÙØ§ÙÙØ¯ ÙØ± Ù
ختصات y Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯: ØØªÛ Ù
ÙÙÛ ÛØ§ بزرگ. سپس Ù
ÙØÙÛ Bezier ÙÛØ² Ø¨Ø³ÛØ§Ø± Ú©Ù
ÛØ§ Ø²ÛØ§Ø¯ Ù
Û Ø´ÙØ¯ ٠باعث Ù
Û Ø´ÙØ¯ اÙÛÙ
ÛØ´Ù از Ù
ØØ¯ÙØ¯Ù Ø·Ø¨ÛØ¹Û Ø®ÙØ¯ ÙØ±Ø§ØªØ± Ø±ÙØ¯.
در Ù Ø«Ø§Ù Ø²ÛØ± کد اÙÛÙ ÛØ´Ù Ø¨Ù Ø´Ø±Ø Ø²ÛØ± است:
.train {
left: 100px;
transition: left 5s cubic-bezier(.5, -1, .5, 2);
/* click on a train sets left to 450px */
}
ÙÛÚÚ¯Û âÚÙ¾â Ø¨Ø§Ûد از 100px تا 400px Ù
ØªØØ±Ú© Ø´ÙØ¯.
ا٠ا اگر رÙÛ ÙØ·Ø§Ø± Ú©ÙÛÚ© Ú©ÙÛØ¯Ø Ø®ÙØ§ÙÛØ¯ Ø¯ÛØ¯ Ú©Ù:
- Ø§Ø¨ØªØ¯Ø§Ø ÙØ·Ø§Ø± Ø¨Ù Ø¹ÙØ¨ Ù
Û Ø±ÙØ¯: «Úپ» Ú©Ù
تر از
100pxÙ Û Ø´ÙØ¯. - سپس ب٠جÙÙ Ù
Û Ø±ÙØ¯Ø Ú©Ù
Û Ø¯ÙØ±ØªØ± از
400px. - ٠سپس Ø¯ÙØ¨Ø§Ø±Ù â Ø¨Ù
400px.
.train {
position: relative;
cursor: pointer;
width: 177px;
height: 160px;
left: 100px;
transition: left 5s cubic-bezier(.5, -1, .5, 2);
}<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
<img class="train" src="https://js.cx/clipart/train.gif" onclick="this.style.left='400px'">
</body>
</html>اگر ب٠ÙÙ ÙØ¯Ø§Ø± Ù ÙØÙÛ Bezier داد٠شد٠Ùگا٠کÙÛÙ Ø ÚØ±Ø§ اÛÙ Ø§ØªÙØ§Ù Ù Û Ø§ÙØªØ¯ Ú©Ø§Ù ÙØ§Ù ÙØ§Ø¶Ø است:
Ù
ختصات y ÙÙØ·Ù دÙÙ
را Ø¨Ù Ø²ÛØ± ØµÙØ± Ø±Ø³Ø§ÙØ¯ÛÙ
Ù Ø¨Ø±Ø§Û ÙÙØ·Ù سÙÙ
آ٠را رÙÛ 1 ÙØ±Ø§Ø± دادÛÙ
Ø Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ù
ÙØÙÛ Ø§Ø² ربع Ù
ÙØ¸Ù
خارج Ù
ÛâØ´ÙØ¯. y خارج از Ù
ØØ¯ÙØ¯Ù Ø§Ø³ØªØ§ÙØ¯Ø§Ø±Ø¯ 0..1 است.
ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
Û Ø¯Ø§ÙÛÙ
Ø y âØªÚ©Ù
ÛÙ ÙØ±Ø¢ÛÙØ¯ اÙÛÙ
ÛØ´Ùâ Ø±Ø§ Ø§ÙØ¯Ø§Ø²Ù Ú¯ÛØ±Û Ù
Û Ú©ÙØ¯. Ù
ÙØ¯Ø§Ø± ây = 0â Ù
Ø±Ø¨ÙØ· ب٠Ù
ÙØ¯Ø§Ø± ÙÛÚÚ¯Û Ø´Ø±ÙØ¹ Ù y = 1 â Ù
ÙØ¯Ø§Ø± Ù¾Ø§ÛØ§ÙÛ Ø§Ø³Øª. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ù
ÙØ§Ø¯Ûر y<0 ÙÛÚÚ¯Û Ø±Ø§ ÙØ±Ø§ØªØ± از ÚÙ¾ Ø´Ø±ÙØ¹ Ù y>1 â Ø§Ø² ÚÙ¾ ÙÙØ§ÛÛ Ø¹Ø¨ÙØ± Ù
ÛâÚ©ÙØ¯.
Ù
Ø·Ù
Ø¦ÙØ§Ù اÛÙ ÛÚ© ÙÙØ¹ âÙØ±Ù
â Ø§Ø³Øª. اگر Ù
ÙØ§Ø¯Ûر y Ù
اÙÙØ¯ -99 ٠«99» را ÙØ±Ø§Ø± دÙÛÙ
Ø ÙØ·Ø§Ø± Ø¨Ø³ÛØ§Ø± Ø¨ÛØ´ØªØ± از Ù
ØØ¯Ùد٠خارج Ø®ÙØ§Ùد شد.
ا٠ا ÚÚ¯ÙÙÙ ÛÚ© Ù ÙØÙÛ Bezier Ø¨Ø±Ø§Û ÛÚ© کار خاص بسازÛÙ Ø Ø§Ø¨Ø²Ø§Ø±ÙØ§Û Ø²ÛØ§Ø¯Û ÙØ¬Ùد دارد.
- ب٠عÙÙØ§Ù Ù Ø«Ø§ÙØ ٠ا Ù Û ØªÙØ§ÙÛ٠اÛ٠کار را در Ø³Ø§ÛØª https://cubic-bezier.com Ø§ÙØ¬Ø§Ù دÙÛÙ .
- Ø§Ø¨Ø²Ø§Ø±ÙØ§Û ØªÙØ³Ø¹Ù دÙÙØ¯Ù Ù
Ø±ÙØ±Ú¯Ø± ÙÙ
ÚÙÛ٠از Ù
ÙØÙÛ ÙØ§Û Bezier در CSS Ù¾Ø´ØªÛØ¨Ø§ÙÛ Ù
Û Ú©ÙÙØ¯:
- Ø§Ø¨Ø²Ø§Ø±ÙØ§Û ØªÙØ³Ø¹Ù دÙÙØ¯Ù را با F12 باز Ú©ÙÛØ¯ (
Mac: key:Cmd+Opt+I). - برگÙ
Elementsرا Ø§ÙØªØ®Ø§Ø¨ Ú©ÙÛØ¯Ø سپس ب٠پÙÙ ÙØ±Ø¹ÛStylesدر س٠ت راست ØªÙØ¬Ù Ú©ÙÛØ¯. - ÙÛÚÚ¯Û ÙØ§Û CSS با Ú©ÙÙ
Ù
cubic-bezierÛÚ© Ù٠اد ÙØ¨Ù از اÛÙ Ú©ÙÙ Ù Ø®ÙØ§Ùد داشت. - Ø¨Ø±Ø§Û ÙÛØ±Ø§ÛØ´ Ù ÙØÙÛ Ø±ÙÛ Ø§ÛÙ Ù٠اد Ú©ÙÛÚ© Ú©ÙÛØ¯.
- Ø§Ø¨Ø²Ø§Ø±ÙØ§Û ØªÙØ³Ø¹Ù دÙÙØ¯Ù را با F12 باز Ú©ÙÛØ¯ (
٠راØÙ
تابع زÙ
اÙâØ¨ÙØ¯Û گاÙ
âÙØ§ (تعداد Ù
راØÙ[Ø Ø´Ø±ÙØ¹/Ù¾Ø§ÛØ§Ù]) اجاز٠Ù
ÛâØ¯ÙØ¯ ÛÚ© Ø§ÙØªÙا٠را ب٠ÚÙØ¯ Ù
رØÙÙ ØªÙØ³ÛÙ
Ú©ÙÛØ¯.
Ø¨ÛØ§ÛÛØ¯ آ٠را در ÛÚ© ٠ثا٠با Ø§Ø±ÙØ§Ù ببÛÙÛÙ .
در اÛÙØ¬Ø§ ÙÛØ³ØªÛ از Ø§Ø±ÙØ§Ù Ø Ø¨Ø¯ÙÙ ÙÛÚ Ú¯ÙÙ٠اÙÛÙ ÛØ´ÙØ ÙÙØ· ب٠عÙÙØ§Ù Ù ÙØ¨Ø¹ آ٠د٠است:
#digit {
border: 1px solid red;
width: 1.2em;
}
#stripe {
display: inline-block;
font: 32px monospace;
}<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="digit"><div id="stripe">0123456789</div></div>
</body>
</html>در HTMLØ ÙÙØ§Ø±Û از Ø§Ø±ÙØ§Ù
در ÛÚ© <div id="digits"> با Ø·Ù٠ثابت Ù
ØØµÙر شد٠است:
<div id="digit">
<div id="stripe">0123456789</div>
</div>
Div â#digitâ Ø¯Ø§Ø±Ø§Û ÛÚ© عرض Ù ÛÚ© ØØ§Ø´Û٠ثابت Ø§Ø³ØªØ Ø¨ÙØ§Ø¨Ø±Ø§Û٠٠اÙÙØ¯ ÛÚ© Ù¾ÙØ¬Ø±Ù ÙØ±Ù ز Ø¨Ù ÙØ¸Ø± Ù Û Ø±Ø³Ø¯.
٠ا ÛÚ© تاÛ٠ر Ù Û Ø³Ø§Ø²ÛÙ : Ø§Ø±ÙØ§Ù ÛÚ© ب٠ÛÚ©Ø Ø¨Ù Ø±ÙØ´Û Ú¯Ø³Ø³ØªÙ Ø¸Ø§ÙØ± Ù Û Ø´ÙÙØ¯.
Ø¨Ø±Ø§Û Ø±Ø³ÛØ¯Ù ب٠اÛÙ ÙØ¯ÙØ #stripe را خارج از # رÙÙ
با Ø§Ø³ØªÙØ§Ø¯Ù از overflow: hidden Ù¾ÙÙØ§Ù Ù
Û Ú©ÙÛÙ
٠سپس #stripe را گاÙ
ب٠گاÙ
ب٠سÙ
ت ÚÙ¾ تغÛÛØ± Ù
Û Ø¯ÙÛÙ
.
9 ٠رØÙÙ ÙØ¬Ùد Ø®ÙØ§Ùد داشت Ú©Ù Ø¨Ø±Ø§Û ÙØ± رÙÙ ÛÚ© Ú¯Ø§Ù ØØ±Ú©Øª Ù Û Ú©ÙØ¯:
#stripe.animate {
transform: translate(-90%);
transition: transform 9s steps(9, start);
}
اÙÙÛ٠آرگÙÙ
ا٠steps(9Ø start) تعداد Ù
راØÙ است. تبدÛ٠ب٠9 ÙØ³Ù
ت (ÙØ± کداÙ
10Ùª) ØªÙØ³ÛÙ
Ù
Û Ø´ÙØ¯. باز٠زÙ
اÙÛ Ø¨Ù Ø·ÙØ± Ø®ÙØ¯Ú©Ø§Ø± ب٠9 ÙØ³Ù
ت ÙÛØ² ØªÙØ³ÛÙ
Ù
Û Ø´ÙØ¯Ø Ø¨ÙØ§Ø¨Ø±Ø§Û٠«Transition: 9s» ب٠Ù
ا 9 ثاÙÛÙ Ø¨Ø±Ø§Û Ú©Ù Ø§ÙÛÙ
ÛØ´Ù Ù
Û Ø¯ÙØ¯ â 1 ثاÙÛ٠در ÙØ± رÙÙ
.
آرگÙÙ
ا٠دÙÙ
ÛÚ©Û Ø§Ø² د٠کÙÙ
٠است: Ø´Ø±ÙØ¹ ÛØ§ Ù¾Ø§ÛØ§Ù.
Ø´Ø±ÙØ¹ ب٠اÛÙ Ù
عÙÛ Ø§Ø³Øª ک٠در Ø§Ø¨ØªØ¯Ø§Û Ø§ÙÛÙ
ÛØ´Ù Ø¨Ø§ÛØ¯ Ø¨ÙØ§ÙاصÙ٠اÙÙÛÙ ÙØ¯Ù
را بردارÛÙ
.
در ع٠Ù:
#digit {
width: .5em;
overflow: hidden;
font: 32px monospace;
cursor: pointer;
}
#stripe {
display: inline-block
}
#stripe.animate {
transform: translate(-90%);
transition-property: transform;
transition-duration: 9s;
transition-timing-function: steps(9, start);
}<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
Click below to animate:
<div id="digit"><div id="stripe">0123456789</div></div>
<script>
digit.onclick = function() {
stripe.classList.add('animate');
}
</script>
</body>
</html>با Ú©ÙÛÚ© بر رÙÛ Ø±ÙÙ
آ٠را Ø¨ÙØ§ÙاصÙ٠ب٠1 (Ù
رØÙ٠اÙÙ) تغÛÛØ± Ù
Û Ø¯ÙØ¯ ٠سپس در Ø§Ø¨ØªØ¯Ø§Û Ø«Ø§ÙÛÙ Ø¨Ø¹Ø¯Û ØªØºÛÛØ± Ù
Û Ú©ÙØ¯.
رÙÙØ¯ ب٠اÛÙ ØµÙØ±Øª Ù¾ÛØ´ Ù Û Ø±ÙØ¯:
0sâ-10%(اÙÙÛ٠تغÛÛØ± در Ø§Ø¨ØªØ¯Ø§Û Ø«Ø§ÙÛ٠اÙÙØ Ø¨ÙØ§ÙاصÙÙ)1sâ-20%- â¦
8sâ-90%- (ثاÙÛ٠آخر Ù ÙØ¯Ø§Ø± ÙÙØ§ÛÛ Ø±Ø§ ÙØ´Ø§Ù Ù Û Ø¯ÙØ¯).
در اÛÙØ¬Ø§Ø اÙÙÛ٠تغÛÛØ± ÙÙØ±Û ب٠دÙÛÙ Ø´Ø±ÙØ¹ در Ù
راØÙ Ø¨ÙØ¯.
Ù
ÙØ¯Ø§Ø± جاÛگزÛÙ Ù¾Ø§ÛØ§Ù ب٠اÛÙ Ù
عÙÛ Ø§Ø³Øª ک٠تغÛÛØ± Ù٠در Ø§Ø¨ØªØ¯Ø§Ø Ø¨Ùک٠در Ù¾Ø§ÛØ§Ù ÙØ± ثاÙÛ٠اعÙ
Ø§Ù Ø´ÙØ¯.
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ ÙØ±Ø¢ÛÙØ¯ steps(9, end) ب٠اÛÙ ØµÙØ±Øª Ø®ÙØ§Ùد Ø¨ÙØ¯:
0sâ0(در ثاÙÛ٠اÙÙ ÙÛÚ ÚÛØ² تغÛÛØ± ÙÙ Û Ú©ÙØ¯)1sâ-10%(اÙÙÛ٠تغÛÛØ± در Ù¾Ø§ÛØ§Ù ثاÙÛ٠اÙÙ)2sâ-20%- â¦
9sâ-90%
در اÛÙØ¬Ø§ Ù
راØÙ (9Ø Ù¾Ø§ÛØ§Ù) در عÙ
٠آÙ
د٠است (ب٠Ù
Ú©Ø« ÙØ¨Ù از تغÛÛØ± رÙÙ
اÙÙ ØªÙØ¬Ù Ú©ÙÛØ¯):
#digit {
width: .5em;
overflow: hidden;
font: 32px monospace;
cursor: pointer;
}
#stripe {
display: inline-block
}
#stripe.animate {
transform: translate(-90%);
transition-property: transform;
transition-duration: 9s;
transition-timing-function: steps(9, end);
}<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
Click below to animate:
<div id="digit"><div id="stripe">0123456789</div></div>
<script>
digit.onclick = function() {
stripe.classList.add('animate');
}
</script>
</body>
</html>ÙÙ
ÚÙÛÙ ÚÙØ¯ Ù
ختصر از Ù¾ÛØ´ تعرÛÙ Ø´Ø¯Ù Ø¨Ø±Ø§Û Ø¢Ù ÙØ¬Ùد دارد steps(...):
step-startâ Ù٠ا٠âsteps(1, start)â Ø§Ø³Øª. ÛØ¹ÙÛ Ø§ÙÛÙ ÛØ´Ù Ø¨ÙØ§ÙاصÙÙ Ø´Ø±ÙØ¹ Ù Û Ø´ÙØ¯ Ù 1 ٠رØÙÙ Ù Û Ú¯ÛØ±Ø¯. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ø¨ÙØ§ÙاصÙÙ Ø´Ø±ÙØ¹ Ù Û Ø´ÙØ¯ Ù Ø¨Ù Ù¾Ø§ÛØ§Ù Ù Û Ø±Ø³Ø¯Ø Ú¯ÙÛÛ ÙÛÚ Ø§ÙÛÙ ÛØ´ÙÛ ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯.step-endâ Ù٠اÙÙØ¯ âsteps(1, end)â: اÙÛÙ ÛØ´Ù را در ÛÚ© ٠رØÙ٠در Ù¾Ø§ÛØ§Ùtransition-durationØ¨Ø³Ø§Ø²ÛØ¯.
اÛÙ Ù ÙØ§Ø¯Ûر Ø¨Ù ÙØ¯Ø±Øª Ù ÙØ±Ø¯ Ø§Ø³ØªÙØ§Ø¯Ù ÙØ±Ø§Ø± Ù Û Ú¯ÛØ±ÙØ¯Ø Ø²ÛØ±Ø§ ÙØ´Ø§Ù دÙÙØ¯Ù ÛÚ© اÙÛÙ ÛØ´Ù ÙØ§ÙØ¹Û ÙÛØ³ØªÙØ¯Ø Ø¨ÙÚ©Ù ÛÚ© تغÛÛØ± تک ٠رØÙÙ Ø§Û ÙØ³ØªÙد. ٠ا در اÛÙØ¬Ø§ Ø¨Ø±Ø§Û ØªÚ©Ù Û٠آÙÙØ§ را ذکر Ù Û Ú©ÙÛÙ .
رÙÛØ¯Ø§Ø¯: âtransitionendâ
ÙÙگاÙ
Û Ú©Ù Ø§ÙÛÙ
ÛØ´Ù CSS Ø¨Ù Ù¾Ø§ÛØ§Ù Ù
Û Ø±Ø³Ø¯Ø Ø±ÙÛØ¯Ø§Ø¯ transitionend ÙØ¹Ø§Ù Ù
Û Ø´ÙØ¯.
Ø¨Ù Ø·ÙØ± Ú¯Ø³ØªØ±Ø¯Ù Ø§Û Ø¨Ø±Ø§Û Ø§ÙØ¬Ø§Ù ÛÚ© ع٠٠پس از Ø§ÙØ¬Ø§Ù اÙÛÙ ÛØ´Ù Ø§Ø³ØªÙØ§Ø¯Ù Ù Û Ø´ÙØ¯. ÙÙ ÚÙÛÙ Ù Û ØªÙØ§ÙÛ٠ب٠اÙÛÙ ÛØ´Ù ÙØ§ بپÛÙÙØ¯ÛÙ .
ب٠عÙÙØ§Ù Ù Ø«Ø§ÙØ Ú©Ø´ØªÛ Ø¯Ø± Ù Ø«Ø§Ù Ø²ÛØ± Ø´Ø±ÙØ¹ Ø¨Ù ØØ±Ú©Øª Ø¨Ù Ø¢ÙØ¬Ø§ Ù Û Ú©ÙØ¯ ٠با Ú©ÙÛÚ© Ú©Ø±Ø¯ÙØ ÙØ± بار Ø¯ÙØ±ØªØ± Ù Ø¯ÙØ±ØªØ± ب٠س٠ت راست باز Ù Û Ú¯Ø±Ø¯Ø¯:
اÙÛÙ ÛØ´Ù ØªÙØ³Ø· تابع «go» Ø´Ø±ÙØ¹ Ù ÛâØ´ÙØ¯ Ú©Ù ÙØ± بار Ú©Ù Ø§ÙØªÙØ§Ù Ø¨Ù Ù¾Ø§ÛØ§Ù Ù ÛâØ±Ø³Ø¯Ø Ø¯ÙØ¨Ø§Ø±Ù اجرا Ù ÛâØ´ÙØ¯ Ù Ø¬ÙØª را بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯:
boat.onclick = function() {
//...
let times = 1;
function go() {
if (times % 2) {
// sail to the right
boat.classList.remove('back');
boat.style.marginLeft = 100 * times + 200 + 'px';
} else {
// sail to the left
boat.classList.add('back');
boat.style.marginLeft = 100 * times - 200 + 'px';
}
}
go();
boat.addEventListener('transitionend', function() {
times++;
go();
});
};
Ø´Û Ø±ÙÛØ¯Ø§Ø¯ Ø¨Ø±Ø§Û Â«transitionend» Ø¯Ø§Ø±Ø§Û ÚÙØ¯ ÙÛÚÚ¯Û Ø®Ø§Øµ است:
event.propertyName.- Ø®Ø§ØµÛØªÛ ک٠اÙÛÙ ÛØ´Ù آ٠ت٠ا٠شد٠است. اگر ÚÙØ¯ÛÙ ÙÛÚÚ¯Û Ø±Ø§ Ø¨Ù Ø·ÙØ± ÙÙ Ø²Ù Ø§Ù Ù ØªØØ±Ú© Ú©ÙÛÙ Ø Ù Û ØªÙØ§Ùد Ø®ÙØ¨ باشد.
event.elapsedTime.- زÙ
ا٠(بر ØØ³Ø¨ ثاÙÛÙ) ک٠اÙÛÙ
ÛØ´Ù Ø·ÙÙ Ú©Ø´ÛØ¯Ø بدÙÙ
ØªØ§Ø®ÛØ± Ø§ÙØªÙاÙ.
Keyframes
Ù
ÛâØªÙØ§ÙÛÙ
ÚÙØ¯Û٠اÙÛÙ
ÛØ´Ù ساد٠را با Ø§Ø³ØªÙØ§Ø¯Ù از ÙØ§ÙÙÙ CSS @keyframes ب٠ÙÙ
بپÛÙÙØ¯ÛÙ
.
ÙØ§Ù
اÙÛÙ
ÛØ´Ù Ù ÙÙØ§ÙÛ٠را Ù
شخص Ù
Û Ú©ÙØ¯ â ÚÙ ÚÛØ²ÛØ Ú٠زÙ
اÙÛ Ù Ú©Ø¬Ø§ Ø¨Ø§ÛØ¯ Ù
ØªØØ±Ú© Ø´ÙØ¯. سپس با Ø§Ø³ØªÙØ§Ø¯Ù از ÙÛÚÚ¯Û animation Ù
Û ØªÙØ§ÙÛÙ
اÙÛÙ
ÛØ´Ù را Ø¨Ù Ø¹ÙØµØ± Ù
تص٠کرد٠٠پاراÙ
ØªØ±ÙØ§Û اضاÙÛ Ø±Ø§ Ø¨Ø±Ø§Û Ø¢Ù Ù
شخص Ú©ÙÛÙ
.
در اÛÙØ¬Ø§ ÛÚ© ٠ثا٠با ØªÙØ¶ÛØØ§Øª Ø¢ÙØ±Ø¯Ù شد٠است:
<div class="progress"></div>
<style>
@keyframes go-left-right { /* give it a name: "go-left-right" */
from { left: 0px; } /* animate from left: 0px */
to { left: calc(100% - 50px); } /* animate to left: 100%-50px */
}
.progress {
animation: go-left-right 3s infinite alternate;
/* apply the animation "go-left-right" to the element
duration 3 seconds
number of times: infinite
alternate direction every time
*/
position: relative;
border: 2px solid green;
width: 50px;
height: 20px;
background: lime;
}
</style>
Ù
ÙØ§Ùات Ø²ÛØ§Ø¯Û در Ù
ÙØ±Ø¯ @keyframes Ù detailed specification.
Ø§ØØªÙ
Ø§ÙØ§Ù Ø§ØºÙØ¨ ب٠@keyframes ÙÛØ§Ø² ÙØ®ÙاÙÛØ¯ Ø¯Ø§Ø´ØªØ Ù
گر اÛÙÚ©Ù ÙÙ
Ù ÚÛØ² در Ø³Ø§ÛØª Ø´Ù
ا در ØØ§Ù ØØ±Ú©Øª باشد.
اجرا
اکثر Ø®ØµÙØµÛات CSS را Ù Û ØªÙØ§Ù Ù ØªØØ±Ú© Ú©Ø±Ø¯Ø Ø²ÛØ±Ø§ اکثر Ø¢ÙÙØ§ Ù ÙØ§Ø¯Ûر Ø¹Ø¯Ø¯Û ÙØ³ØªÙد. ب٠عÙÙØ§Ù Ù Ø«Ø§ÙØ Â«Ø¹Ø±Ø¶Â»Ø Â«Ø±ÙÚ¯Â»Ø Â«Ø§ÙØ¯Ø§Ø²Ù ÙÙ٠» Ù٠٠اعداد ÙØ³ØªÙد. ÙÙØªÛ Ø¢ÙÙØ§ را Ù ØªØØ±Ú© Ù Û Ú©ÙÛØ¯Ø Ù Ø±ÙØ±Ú¯Ø± Ø¨Ù ØªØ¯Ø±ÛØ¬ اÛ٠اعداد را ÙØ±ÛÙ Ø¨Ù ÙØ±Û٠تغÛÛØ± Ù Û Ø¯ÙØ¯ Ù ÛÚ© جÙÙÙ ØµØ§Ù Ø§ÛØ¬Ø§Ø¯ Ù Û Ú©ÙØ¯.
با اÛÙ ØØ§ÙØ Ù٠٠اÙÛÙ ÛØ´Ù ÙØ§ Ø¢ÙØ·Ùر Ú©Ù Ù Û Ø®ÙØ§ÙÛØ¯ ØµØ§Ù Ø¨Ù ÙØ¸Ø± ÙÙ Û Ø±Ø³ÙØ¯Ø Ø²ÛØ±Ø§ ÙÛÚÚ¯Û ÙØ§Û ٠ختÙÙ CSS ÙØ²ÛÙÙ Ù ØªÙØ§ÙØªÛ Ø¨Ø±Ø§Û ØªØºÛÛØ± Ø¯Ø§Ø±ÙØ¯.
در Ø¬Ø²Ø¦ÛØ§Øª ÙÙÛ Ø¨ÛØ´ØªØ±Ø ÙÙÚ¯Ø§Ù Û Ú©Ù ØªØºÛÛØ± سبک ÙØ¬Ùد Ø¯Ø§Ø±Ø¯Ø Ù Ø±ÙØ±Ú¯Ø± 3 ٠رØÙ٠را Ø¨Ø±Ø§Û Ø§Ø±Ø§Ø¦Ù Ø¸Ø§ÙØ± Ø¬Ø¯ÛØ¯ Ø·Û Ù Û Ú©ÙØ¯:
- طراØÛ: ÙÙØ¯Ø³Ù Ù Ù ÙÙØ¹Ûت ÙØ± Ø¹ÙØµØ± را Ø¯ÙØ¨Ø§Ø±Ù Ù ØØ§Ø³Ø¨Ù Ú©ÙÛØ¯Ø سپس
- ÙÙØ§Ø´Û: Ø¯ÙØ¨Ø§Ø±Ù Ù ØØ§Ø³Ø¨Ù Ú©ÙÛØ¯ Ú©Ù ÙÙ Ù ÚÛØ² در Ù Ú©Ø§Ù Ø®ÙØ¯ ÚÚ¯ÙÙÙ Ø¨Ø§ÛØ¯ Ø¨Ø§Ø´Ø¯Ø Ø§Ø² ج٠Ù٠پس ز٠ÛÙÙØ رÙÚ¯ ÙØ§Ø
- Ú©Ø§Ù Ù¾ÙØ²Ûت: ÙØªØ§Ûج ÙÙØ§ÛÛ Ø±Ø§ ب٠پÛÚ©Ø³Ù ÙØ§Û رÙÛ ØµÙØÙ ÙÙ Ø§ÛØ´ دÙÛØ¯Ø در ØµÙØ±Øª ÙØ¬ÙØ¯Ø ØªØ¨Ø¯ÛÙ ÙØ§Û CSS را اع٠ا٠کÙÛØ¯.
در Ø·ÙÙ ÛÚ© اÙÛÙ ÛØ´Ù CSSØ Ø§ÛÙ ÙØ±Ø¢ÛÙØ¯ ÙØ± ÙØ±Û٠را تکرار Ù Û Ú©ÙØ¯. با اÛÙ ØØ§ÙØ ÙÛÚÚ¯ÛâÙØ§Û CSS Ú©Ù ÙØ±Ú¯Ø² بر ÙÙØ¯Ø³Ù ÛØ§ Ù ÙÙØ¹Ûت ØªØ£Ø«ÛØ± ÙÙ ÛâÚ¯Ø°Ø§Ø±ÙØ¯Ø ٠اÙÙØ¯ «رÙÚ¯Â»Ø Ù Ù Ú©Ù Ø§Ø³Øª ٠رØÙÙ Layout را ÙØ§Ø¯ÛØ¯Ù Ø¨Ú¯ÛØ±Ùد. اگر ÛÚ© âØ±ÙÚ¯â ØªØºÛÛØ± Ú©ÙØ¯Ø Ù Ø±ÙØ±Ú¯Ø± ÙÛÚ ÙÙØ¯Ø³Ù Ø¬Ø¯ÛØ¯Û را Ù ØØ§Ø³Ø¨Ù ÙÙ Û Ú©ÙØ¯Ø ب٠Paint â Composite Ù Û Ø±ÙØ¯. Ù Ø®ÙØ§Øµ Ú©Ù Û ÙØ¬Ùد دارد ک٠٠ستÙÛ٠ا٠ب٠Composite Ù Û Ø±ÙØ¯. در https://csstriggers.com Ù ÛâØªÙØ§ÙÛØ¯ ÙÙØ±Ø³Øª Ø·ÙÙØ§ÙÛâØªØ±Û Ø§Ø² ÙÛÚÚ¯ÛâÙØ§Û CSS ٠اÛÙک٠کدا٠٠راØÙ را راÙâØ§ÙØ¯Ø§Ø²Û Ù ÛâÚ©ÙÙØ¯ Ù¾ÛØ¯Ø§ Ú©ÙÛØ¯.
Ù ØØ§Ø³Ø¨Ø§Øª ٠٠ک٠است Ø²Ù Ø§Ù Ø¨Ø¨Ø±Ø¯Ø Ø¨Ù Ø®ØµÙØµ در ØµÙØØ§ØªÛ Ú©Ù Ø¹ÙØ§ØµØ± Ø²ÛØ§Ø¯ Ù Ø·Ø±Ø Ø¨ÙØ¯Û Ù¾ÛÚÛØ¯Ù Ø¯Ø§Ø±ÙØ¯. Ù ØªØ£Ø®ÛØ±Ùا در ÙØ§Ùع در اکثر دستگاÙâÙØ§ ÙØ§Ø¨Ù Ù Ø´Ø§ÙØ¯Ù Ø§Ø³ØªØ Ú©Ù Ù ÙØ¬Ø± ب٠اÙÛÙ ÛØ´ÙâÙØ§Û Ú©Ù âØªØ± Ø±ÙØ§ÙâØªØ± Ù ÛâØ´ÙØ¯.
اÙÛÙ ÛØ´Ù ÙØ§Û Ø®ÙØ§ØµÛ ک٠٠رØÙÙ Layout را رد Ù Û Ú©ÙÙØ¯ Ø³Ø±ÛØ¹ØªØ± ÙØ³ØªÙد. ØØªÛ Ø¨ÙØªØ± است از Paint ÙÛØ² ØµØ±Ù ÙØ¸Ø± Ø´ÙØ¯.
ÙÛÚÚ¯Û transform ÛÚ© Ø§ÙØªØ®Ø§Ø¨ عاÙÛ Ø§Ø³ØªØ Ø²ÛØ±Ø§:
- تبدÛÙ ÙØ§Û CSS رÙÛ Ø¬Ø¹Ø¨Ù Ø¹ÙØµØ± ÙØ¯Ù ب٠عÙÙØ§Ù ÛÚ© Ú©Ù ØªØ£Ø«ÛØ± Ù Û Ú¯Ø°Ø§Ø±Ø¯ (ÚØ±Ø®Ø´Ø تÙÙÚ¯Ø±Ø Ú©Ø´Ø´Ø ØªØºÛÛØ± Ø¢Ù).
- تبدÛÙ CSS ÙØ±Ú¯Ø² بر Ø¹ÙØ§ØµØ± Ù٠ساÛÙ ØªØ£Ø«ÛØ± ÙÙ Û Ú¯Ø°Ø§Ø±Ø¯.
â¦Ø¨ÙابراÛÙ Ù
Ø±ÙØ±Ú¯Ø±Ùا تبدÛ٠را در Ø¨Ø§ÙØ§Û Ù
ØØ§Ø³Ø¨Ø§Øª Layout Ù Paint Ù
ÙØ¬Ùد در Ù
رØÙÙ ØªØ±Ú©ÛØ¨Û اعÙ
ا٠Ù
Û Ú©ÙÙØ¯.
ب٠عبارت دÛÚ¯Ø±Ø Ù
Ø±ÙØ±Ú¯Ø± Layout (Ø§ÙØ¯Ø§Ø²ÙâÙØ§Ø Ù
ÙÙØ¹ÛتâÙØ§) را Ù
ØØ§Ø³Ø¨Ù Ù
ÛâÚ©ÙØ¯Ø آ٠را با رÙÚ¯âÙØ§Ø Ù¾Ø³âØ²Ù
ÛÙÙâÙØ§ Ù ØºÛØ±Ù در Ù
رØÙÙ Paint رÙÚ¯ Ù
ÛâÚ©ÙØ¯ ٠سپس تبدÛ٠را در جعبÙâÙØ§Û Ø¹ÙØ§ØµØ±Û ک٠ب٠آ٠ÙÛØ§Ø² Ø¯Ø§Ø±ÙØ¯ اعÙ
ا٠Ù
ÛâÚ©ÙØ¯.
تغÛÛØ±Ø§Øª (اÙÛÙ ÛØ´Ù) ÙÛÚÚ¯Û Â«ØªØ¨Ø¯ÛÙ» ÙØ±Ú¯Ø² ٠راØÙ Layout Ù Paint را راÙâØ§ÙØ¯Ø§Ø²Û ÙÙ ÛâÚ©ÙØ¯. Ø¨ÛØ´ØªØ± از Ø¢ÙØ Ù Ø±ÙØ±Ú¯Ø± از شتاب دÙÙØ¯Ù گراÙÛÚ©Û (ÚÛÙ¾ Ù Ø®ØµÙØµ رÙÛ CPU ÛØ§ کارت گراÙÛÚ©) Ø¨Ø±Ø§Û ØªØ¨Ø¯ÛÙ CSS Ø§Ø³ØªÙØ§Ø¯Ù Ù Û Ú©ÙØ¯Ø Ø¨ÙØ§Ø¨Ø±Ø§Û٠آÙÙØ§ را Ø¨Ø³ÛØ§Ø± کارآ٠د Ù Û Ú©ÙØ¯.
Ø®ÙØ´Ø¨Ø®ØªØ§ÙÙØ ÙÛÚÚ¯Û Â«ØªØ¨Ø¯ÛÙ» Ø¨Ø³ÛØ§Ø± ÙØ¯Ø±ØªÙ
ÙØ¯ است. با Ø§Ø³ØªÙØ§Ø¯Ù از «تبدÛÙ» رÙÛ ÛÚ© Ø¹ÙØµØ±Ø Ù
ÛâØªÙØ§ÙÛØ¯ آ٠را Ø¨ÚØ±Ø®Ø§ÙÛØ¯ Ù Ø¨ÚØ±Ø®Ø§ÙÛØ¯Ø آ٠را Ú©Ø´ÛØ¯Ù Ù Ú©ÙÚÚ© Ú©ÙÛØ¯Ø آ٠را Ø¨Ù Ø§Ø·Ø±Ø§Ù ØØ±Ú©Øª دÙÛØ¯Ø Ù Ø®ÛÙÛ Ø¨ÛØ´ØªØ±. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ø¨Ù Ø¬Ø§Û ÙÛÚÚ¯ÛâÙØ§Û left/margin-left Ù
ÛâØªÙØ§ÙÛÙ
از transform: translateX(â¦) Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
Ø Ø§Ø² transform: scale Ø¨Ø±Ø§Û Ø§ÙØ²Ø§ÛØ´ Ø§ÙØ¯Ø§Ø²Ù Ø¹ÙØµØ± Ù ØºÛØ±Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
.
Ø®Ø§ØµÛØª ØªØ¹ÙØ¶ ÙÛØ² ÙØ±Ú¯Ø² Layout را ÙØ¹Ø§Ù ÙÙ
ÛâÚ©ÙØ¯ (از Paint در Mozilla Gecko ÙÛØ² Ø¹Ø¨ÙØ± Ù
ÛâÚ©ÙØ¯). Ù
ÛâØªÙØ§ÙÛÙ
از Ø¢Ù Ø¨Ø±Ø§Û Ø¬ÙÙÙâÙØ§Û ÙÙ
Ø§ÛØ´/Ù¾ÙÙØ§Ù Ú©Ø±Ø¯Ù ÛØ§ Ù
ØÙ شدÙ/Ù
ØÙ Ø´Ø¯Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
.
تÙÚ©ÛÚ© تبدÛ٠با تصاد٠Ù
عÙ
ÙÙØ§Ù Ù
ÛâØªÙØ§Ùد اکثر ÙÛØ§Ø²ÙØ§Û Ù
ا را Ø¨Ø±Ø·Ø±Ù Ú©ÙØ¯ ٠اÙÛÙ
ÛØ´ÙâÙØ§Û Ø±ÙØ§Ù Ù Ø®ÙØ´âÙØ¸Ø±Û Ø§Ø±Ø§Ø¦Ù Ú©ÙØ¯.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ در اÛÙØ¬Ø§ با Ú©ÙÛÚ© بر رÙÛ Ø¹ÙØµØ± «#boat» Ú©ÙØ§Ø³Û با transform: translateX(300) Ù opacity: 0 اضاÙÙ Ù
ÛâØ´ÙØ¯Ø Ø¨ÙØ§Ø¨Ø±Ø§Û٠باعث Ù
ÛâØ´ÙØ¯ «300px» ب٠سÙ
ت راست ØØ±Ú©Øª Ú©ÙØ¯ Ù ÙØ§Ù¾Ø¯Ûد Ø´ÙØ¯:
<img src="https://js.cx/clipart/boat.png" id="boat">
<style>
#boat {
cursor: pointer;
transition: transform 2s ease-in-out, opacity 2s ease-in-out;
}
.move {
transform: translateX(300px);
opacity: 0;
}
</style>
<script>
boat.onclick = () => boat.classList.add('move');
</script>
در اÛÙØ¬Ø§ ÛÚ© Ù
ثا٠پÛÚÛØ¯Ù ØªØ±Ø Ø¨Ø§ @keyframes Ø¢Ù
د٠است:
<h2 onclick="this.classList.toggle('animated')">click me to start / stop</h2>
<style>
.animated {
animation: hello-goodbye 1.8s infinite;
width: fit-content;
}
@keyframes hello-goodbye {
0% {
transform: translateY(-60px) rotateX(0.7turn);
opacity: 0;
}
50% {
transform: none;
opacity: 1;
}
100% {
transform: translateX(230px) rotateZ(90deg) scale(0.5);
opacity: 0;
}
}
</style>
Ø®ÙØ§ØµÙ
اÙÛÙ ÛØ´Ù ÙØ§Û CSS Ø§Ø¬Ø§Ø²Ù Ù Û Ø¯ÙÙØ¯ Ø¨Ù Ø¢Ø±Ø§Ù Û (ÛØ§ گا٠ب٠گا٠) تغÛÛØ±Ø§Øª Ù ØªØØ±Ú© ÛÚ© ÛØ§ ÚÙØ¯ ÙÛÚÚ¯Û CSS را Ø§ÙØ¬Ø§Ù دÙÙØ¯.
Ø¢ÙÙØ§ Ø¨Ø±Ø§Û Ø§Ú©Ø«Ø± Ú©Ø§Ø±ÙØ§Û اÙÛÙ ÛØ´Ù Ø®ÙØ¨ ÙØ³ØªÙد. ٠ا ÙÙ ÚÙÛÙ Ù ÛâØªÙØ§ÙÛ٠از Ø¬Ø§ÙØ§ اسکرÛپت Ø¨Ø±Ø§Û Ø§ÙÛÙ ÛØ´ÙâÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ Ø ÙØµÙ Ø¨Ø¹Ø¯Û Ø¨Ù Ø¢Ù Ø§Ø®ØªØµØ§Øµ دارد.
Ù ØØ¯ÙØ¯ÛØª ÙØ§Û اÙÛÙ ÛØ´Ù ÙØ§Û CSS در Ù ÙØ§Ûس٠با اÙÛÙ ÛØ´Ù ÙØ§Û Ø¬Ø§ÙØ§ اسکرÛپت:
- Ú©Ø§Ø±ÙØ§Û Ø³Ø§Ø¯Ù Ø¨Ù Ø³Ø§Ø¯Ú¯Û Ø§ÙØ¬Ø§Ù Ù Û Ø´ÙØ¯.
- Ø³Ø±ÛØ¹ ٠سبک Ø¨Ø±Ø§Û CPU.
- اÙÛÙ ÛØ´Ù ÙØ§Û Ø¬Ø§ÙØ§ اسکرÛپت Ø§ÙØ¹Ø·Ø§Ù Ù¾Ø°ÛØ± ÙØ³ØªÙد. Ø¢ÙÙØ§ Ù Û ØªÙØ§ÙÙØ¯ ÙØ± Ù ÙØ·Ù اÙÛÙ ÛØ´ÙÛ Ø±Ø§ ٠اÙÙØ¯ âØ§ÙÙØ¬Ø§Ø±â ÛÚ© Ø¹ÙØµØ± Ù¾ÛØ§Ø¯Ù Ø³Ø§Ø²Û Ú©ÙÙØ¯.
- ÙÙ ÙÙØ· تغÛÛØ± Ù ÙÚ©. ٠ا Ù Û ØªÙØ§ÙÛÙ Ø¹ÙØ§ØµØ± Ø¬Ø¯ÛØ¯Û را در Ø¬Ø§ÙØ§ اسکرÛپت ب٠عÙÙØ§Ù Ø¨Ø®Ø´Û Ø§Ø² اÙÛÙ ÛØ´Ù Ø§ÛØ¬Ø§Ø¯ Ú©ÙÛÙ .
در Ù
ثاÙâÙØ§Û اÙÙÛ٠در اÛÙ ÙØµÙØ Â«Ø§ÙØ¯Ø§Ø²Ù ÙÙÙ
Â»Ø Â«ÚÙ¾Â»Ø Â«Ø¹Ø±Ø¶Â»Ø Â«Ø§Ø±ØªÙØ§Ø¹Â» Ù ØºÛØ±Ù را Ù
ØªØØ±Ú© Ù
ÛâÚ©ÙÛÙ
. در پرÙÚÙâÙØ§Û ÙØ§ÙØ¹ÛØ Ø¨Ø§ÛØ¯ از transform: scale() Ù transform: translate( Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
. ) Ø¨Ø±Ø§Û Ø¹Ù
Ùکرد Ø¨ÙØªØ±.
اکثر اÙÛÙ
ÛØ´Ù ÙØ§ را Ù
Û ØªÙØ§Ù با Ø§Ø³ØªÙØ§Ø¯Ù از CSS ÙÙ
Ø§ÙØ·Ùر ک٠در اÛÙ ÙØµÙ ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø´Ø¯ Ù¾ÛØ§Ø¯Ù Ø³Ø§Ø²Û Ú©Ø±Ø¯. ٠رÙÛØ¯Ø§Ø¯ transitionend اجاز٠Ù
Û Ø¯ÙØ¯ تا Ø¬Ø§ÙØ§ اسکرÛپت بعد از اÙÛÙ
ÛØ´Ù اجرا Ø´ÙØ¯Ø Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ø¨Ù Ø®ÙØ¨Û با کد ÛکپارÚÙ Ù
Û Ø´ÙØ¯.
ا٠ا در ÙØµÙ Ø¨Ø¹Ø¯Û ÚÙØ¯ اÙÛÙ ÛØ´Ù Ø¬Ø§ÙØ§ اسکرÛپت را Ø¨Ø±Ø§Û Ù¾ÙØ´Ø´ Ù ÙØ§Ø±Ø¯ Ù¾ÛÚÛØ¯Ù تر Ø§ÙØ¬Ø§Ù Ø®ÙØ§ÙÛ٠داد.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)