CSS ã¢ãã¡ã¼ã·ã§ã³ã¯ JavaScript ã使ããã¨ãªãç°¡åãªã¢ãã¡ã¼ã·ã§ã³ãè¡ããã¨ãã§ãã¾ãã
JavaScript ãå©ç¨ãããã¨ã§ãCSS ã¢ãã¡ã¼ã·ã§ã³ãå¶å¾¡ããå°ãã®ã³ã¼ãã§ããåªãããã®ã«ãããã¨ãã§ãã¾ãã
CSS ã®ãã©ã³ã¸ã·ã§ã³
CSS ãã©ã³ã¸ã·ã§ã³ã®èãã¯ã·ã³ãã«ã§ããããããããã®ããããã£ã¨ãã®å¤åãã©ã®ããã«ã¢ãã¡ã¼ã·ã§ã³åããããã説æãã¾ããããããã£ã夿´ãããã¨ããã©ã¦ã¶ã¯ã¢ãã¡ã¼ã·ã§ã³ãæåãã¾ãã
ã¤ã¾ã: å¿ è¦ãªãã¨ã¯ããããã£ã夿´ãããã¨ã ãã§ããããã¦æ»ãããªãã©ã³ã¸ã·ã§ã³ã¯ãã©ã¦ã¶ã«ãã£ã¦è¡ããã¾ãã
ä¾ãã°ãä¸ã® CSS 㯠background-color ã®å¤åã 3ç§éã¢ãã¡ã¼ã·ã§ã³åãã¾ãã:
.animated {
transition-property: background-color;
transition-duration: 3s;
}
ä»ãããè¦ç´ ã .animated ã¯ã©ã¹ãæã£ã¦ããå ´åãbackground-color ã®å¤æ´ã¯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>
CSS ãã©ã³ã¸ã·ã§ã³ãè¨è¿°ããã®ã« 4 ã¤ã®ããããã£ãããã¾ã:
transition-propertytransition-durationtransition-timing-functiontransition-delay
ãã®å¾èª¬æãã¦ããã¾ãããä»ã®æç¹ã§ã¯ãå
±éã® transition ããããã£ã¯ property duration timing-function delay ã®é çªã§ä¸ç·ã«å®£è¨ã§ãããã¨ãè¤æ°ã®ããããã£ãä¸åº¦ã«ã¢ãã¡ã¼ã·ã§ã³ãããã¨ãã§ãããã¨ã«çæãã¦ããã¦ãã ããã
ä¾ãã°ããã®ãã¿ã³ã¯ 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>
ã§ã¯ã¢ãã¡ã¼ã·ã§ã³ã®ããããã£ã1ã¤ãã¤è¦ã¦ããã¾ãããã
transition-property
transition-property ã«ã¯ãã¢ãã¡ã¼ã·ã§ã³ããããããã£ã®ä¸è¦§ãè¨è¼ãã¾ããä¾ãã°: left, margin-left, height, color ã§ãã
ãã¹ã¦ã®ããããã£ãã¢ãã¡ã¼ã·ã§ã³ã§ããããã§ã¯ããã¾ãããããããã®å¤ããå¯è½ã§ããå¤ all 㯠âãã¹ã¦ã®ããããã£ãã¢ãã¡ã¼ãããâ ãæå³ãã¾ãã
transition-duration
transition-duration ã§ã¯ãã©ã®ãããã®é·ãã¢ãã¡ã¼ã·ã§ã³ãããããæå®ãããã¨ãã§ãã¾ããæé㯠CSS æéå½¢å¼ ã§è¡¨ãã¾ã: ç§ã¯ s, ããªç§ã¯ ms ã§ãã
transition-delay
transition-delay ã§ã¯ãã¢ãã¡ã¼ã·ã§ã³ãã å ã®é
å»¶ãæå®ãããã¨ãã§ãã¾ããä¾ãã°ãtransition-delay: 1s ãæå®ããå ´åãã¢ãã¡ã¼ã·ã§ã³ã¯ãã夿´ã®1ç§å¾ã«å§ã¾ãã¾ãã
è² ã®å¤ãå¯è½ã§ãããã®å ´åãã¢ãã¡ã¼ã·ã§ã³ã¯éä¸ããå§ã¾ãã¾ããä¾ãã°ãtransition-duration ã 2s ã§ãé
å»¶ã -1s ã®å ´åãã¢ãã¡ã¼ã·ã§ã³ã¯1ç§ãåããååããéå§ãã¾ãã
ãã㯠CSS translate ããããã£ã使ã£ã¦ã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;
}
ä¸ã®ä¾ã§ã¯ãJavaScript ã¯è¦ç´ ã«ã¯ã©ã¹ .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>JavaScript ã¯è¿½å ã®è¡ã§ããããã¦ãã¾ãã:
stripe.onclick = function() {
let sec = new Date().getSeconds() % 10;
// ä¾ãã°ãããã§ -3s ã¯3çªç®ããã¢ãã¡ã¼ã·ã§ã³ãéå§ãã¾ã
stripe.style.transitionDelay = '-' + sec + 's';
stripe.classList.add('animate');
};
transition-timing-function
ã¿ã¤ãã³ã°é¢æ°ã¯ã¢ãã¡ã¼ã·ã§ã³ããã»ã¹ãæéã¨å ±ã«ã©ã®ããã«åºãã£ã¦ããããè¨è¿°ãã¾ãããã£ããã¨å§ã¾ããã®æ¥éã«é²ããã¾ãã¯ãã®éããããã¾ãã
ããã¯ä¸è¦ããã¨æãè¤éãªããããã£ã§ãããããå°ãæéãããã¦è¦ãã°ãé常ã«ç°¡åã®ãã®ã«ãªãã¾ãã
ãã®ããããã£ã¯2種é¡ã®å¤ãåãåãã¾ã: ãã¸ã§æ²ç·ã¾ãã¯ã¹ãããã§ããããé »ç¹ã«ä½¿ãããæ²ç·ããè¦ã¦ããã¾ãããã
ãã¸ã§æ²ç·
ã¿ã¤ãã³ã°é¢æ°ã¯æ¬¡ã®æ¡ä»¶ãæºãã4ã¤ã®å¶å¾¡ç¹ãã㤠ãã¸ã§æ²ç· ã¨ãã¦è¨å®ã§ãã¾ãã:
- æåã®å¶å¾¡ç¹:
(0,0). - æå¾ã®å¶å¾¡ç¹:
(1,1). - ä¸éç¹ã«ã¤ãã¦ã¯ã
xã®å¤ã¯åºé0..1ã«ãªããã°ãªãããyã¯ä½ã§ãæ§ãã¾ããã
CSS ã§ã®ãã¸ã§æ²ç·ã®æ§æã§ã: cubic-bezier(x2, y2, x3, y3)ã
ããã§ã¯ 2çªç®ã¨3çªç®ã®å¶å¾¡ç¹ã ããæå®ãã¾ãããªããªããæåã®ç¹ã¯ (0,0) åºå®ã§ããã4çªç®ã¯ (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 transition ã¯ãã®æ²ç·ã«åºã¥ãã¦ãã¾ã:
.train {
left: 0;
transition: left 5s cubic-bezier(0, 0, 1, 1);
/* JavaScript sets left to 450px */
}
â¦ããã¦é»è»ãã¹ãã¼ãã¦ã³ãããã«ã¯ã©ãããã°è¯ãã§ããããï¼
å¥ã®ãã¸ã§æ²ç·ã使ããã¨ã§å®ç¾ã§ãã¾ã: cubic-bezier(0.0, 0.5, 0.5 ,1.0).
ã°ã©ãã¯æ¬¡ã®ããã«ãªãã¾ã:
è¦ã¦ãããããã«ãå¦çã¯éãå§ã¾ãã¾ã: æ²ç·ã¯é«ããªã£ã¦ããããã®å¾é ããªã£ã¦ããã¾ãã
ã¿ã¤ãã³ã°é¢æ°ã¯æ¬¡ã®ããã«åä½ãã¾ã(é»è»ãã¯ãªãã¯ãã¦ãã ãã):
.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);
/* JavaScript sets left to 450px */
}
ããã¤ãã®çµã¿è¾¼ã¿ã®æ²ç·ãããã¾ã: 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;
/* transition: left 5s cubic-bezier(0, .5, .5, 1); */
}
ããããå®éã¯å°ãç°ãªã£ã¦è¦ãã¾ãã
ãã¸ã§æ²ç·ã¯ã¢ãã¡ã¼ã·ã§ã³ããã®ç¯å²ãã âé£ã³åºãâ ããã«ãããã¨ãã§ãã¾ãã
æ²ç·ä¸ã®å¶å¾¡ç¹ã¯ãè² ã¾ãã¯å·¨å¤§ãªå¤ã® y 座æ¨ãæã¤ãã¨ãã§ãã¾ããããã¨ããã¸ã§æ²ç·ãé常ã«ä½ãã¾ãã¯é«ãã¸ã£ã³ãããã¢ãã¡ã¼ã·ã§ã³ãé常ã®ç¯å²ãè¶
ãã¾ãã
ä¸ã®ä¾ã®ã¢ãã¡ã¼ã·ã§ã³ã³ã¼ãã¯æ¬¡ã®éãã§ã:
.train {
left: 100px;
transition: left 5s cubic-bezier(.5, -1, .5, 2);
/* JavaScript sets left to 400px */
}
ãããã㣠left 㯠100px ãã 400px ã¾ã§ã¢ãã¡ã¼ã·ã§ã³ããã¯ãã§ãã
ããããé»è»ãã¯ãªãã¯ããã¨ã次ã®ããã«ãªãã¾ã:
- ã¾ããé»è»ã¯ ãã㯠ãã¾ã:
leftã¯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>ãªããã®ãããªãã¨ãèµ·ããã®ã§ãããï¼ â ä¸ãããããã¸ã§æ²ç·ãè¦ãã°æããã§ã:
2çªç®ã® y 座æ¨ãã¼ãããä¸ã«ç§»åãã3çªç®ã®ç¹ã¯ 1 ãè¶ãã¦ãã¾ãããã®ãããæ²ç·ã¯ âé常â ã®è±¡éããå¤ãã¦ãã¾ããy ã¯ âæ¨æºâ ã®ç¯å² 0..1 ããå¤ãã¦ãã¾ãã
ãåç¥ã®éããy 㯠âã¢ãã¡ã¼ã·ã§ã³å¦çã®å®äºâ ã表ãã¾ããå¤ y = 0 ã¯éå§ããããã£å¤ã«å¯¾å¿ããy = 1 㯠â çµããã®å¤ã«å¯¾å¿ãã¾ãããã®ãããå¤ y<0 ã¯ããããã£ãéå§æã® left ãããå°ããå¤ã«ç§»åãããy>1 ã¯ â æå¾ã® left ãè¶ãã¾ãã
ããã¯ç¢ºå®ã« âã½ãããªâ ããªã¢ã³ãã§ãããã y ã®å¤ã -99 ã 99 ã¨ãã£ãå¤ã«ããå ´åãé»è»ã¯ãã®ç¯å²ããé¥ãé ãã«é£ã³åºãã¾ãã
ããããç¹å®ã®ã¿ã¹ã¯ã®ããã®ãã¸ã§æ²ç·ã¯ã©ããã£ã¦ä½ãã®ã§ãããï¼ãã®ããã®å¤ãã®ãã¼ã«ãããã¾ããä¾ãã°ãhttp://cubic-bezier.com/ ãªã©ã§è¡ããã¨ãã§ãã¾ãã
Steps
ã¿ã¤ãã³ã°é¢æ° steps(number of steps[, start/end]) ã¯ã¢ãã¡ã¼ã·ã§ã³ãã¹ãããã«åå²ãããã¨ãã§ãã¾ãã
æ°åã使ã£ãä¾ãè¦ã¦ã¿ã¾ããããç§ãã¡ã¯æ°åãæ»ããã§ã¯ãªãã颿£çã«å¤åããã¾ãã
ãã®ããã«ãã¢ãã¡ã¼ã·ã§ã³ã 9 ã¤ã®ã¹ãããã«åå²ãã¾ã:
#stripe.animate {
transform: translate(-90%);
transition: transform 9s steps(9, start);
}
steps(9, start) ã®åä½ã§ã:
#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>æåã® steps ã®å¼æ°ã¯ã¹ãããã®æ°ã§ããå¤æã¯ 9 ã¤ã®ãã¼ãã«åå²ããã¾ã(ãããã 10%)ãæéééãåæ§ã«åå²ããã¾ã: 9ç§ã¯1ç§ééã«ãªãã¾ãã
2ã¤ç®ã®å¼æ°ã¯ start ã¾ã㯠end ããããã®åèªã§ãã
start ã¯ã¢ãã¡ã¼ã·ã§ã³éå§æã«ããã«æåã®ã¹ããããè¡ããã¨ãæå³ãã¾ãã
ã¢ãã¡ã¼ã·ã§ã³ã§ããã確èªã§ãã¾ããæ°åãã¯ãªãã¯ããã¨ãããã« 1 (æåã®ã¹ããã) ã«å¤ããã以éã¯æ¬¡ã®ç§ã®ã¯ããã«å¤åãã¦ããã¾ãã
ããã»ã¹ã¯ãã®ããã«å¦çããã¾ã:
0sâ-10%(1ç§ç®ã®é ã§æåã®å¤æ´ãããã¾ã, éå§ç´å¾)1sâ-20%- â¦
8sâ-80%- (æå¾ã®ç§ã¯æå¾ã®å¤ã表示ãã¾ã)ã
ãã1ã¤ã®å¤ end ã¯ãå¤åã¯åç§ã®æåã§ã¯ãªãæå¾ã«é©ç¨ãããããã«ãããã¨ãæå³ãã¾ãã
ãããã£ã¦ãå¦çã¯æ¬¡ã®ããã«é²ã¿ã¾ã:
0sâ01sâ-10%(æåã®å¤æ´ã¯1ç§ç®ã®æå¾ã§ã)2sâ-20%- â¦
9sâ-90%
steps(9, end) ã®åä½ã§ã:
#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>ç°¡ç¥è¡¨è¨ãããã¾ã:
step-startâ ã¯steps(1, start)ã¨åãã§ããã¤ã¾ããã¢ãã¡ã¼ã·ã§ã³ã¯ããã«å§ã¾ããã¹ãããã¯1ã¤ã§ãããªã®ã§ãããã¯éå§å¾ããã«çµãããã¾ãã§ã¢ãã¡ã¼ã·ã§ã³ããªããã®ããã«è¦ãã¾ããstep-endâ ã¯steps(1, end)ã¨åãã§ãã:transition-durationã®çµããã«åä¸ã¹ãããã®ã¢ãã¡ã¼ã·ã§ã³ãè¡ãã¾ãã
ãããã®å¤ã¯ã»ã¨ãã©ä½¿ããã¾ããããªããªããå®éã«ã¯ã¢ãã¡ã¼ã·ã§ã³ã§ã¯ãªããåãªãåä¸ã¹ãããã®å¤æ´ã ããã§ãã
transitionend ã¤ãã³ã
CSS ã¢ãã¡ã¼ã·ã§ã³ãçµäºããã¨ãtransitionend ã¤ãã³ããããªã¬ããã¾ãã
ããã¯ã¢ãã¡ã¼ã·ã§ã³å®äºå¾ã«ãªã«ããããã®ã«åºã使ããã¦ãã¾ããã¾ããã¢ãã¡ã¼ã·ã§ã³ãä»ãå ããäºãã§ãã¾ãã
ä¾ãã°ãä¸ã®ä¾ã«ããè¹ã¯ãã¯ãªãã¯ã§å¾å¾©ãå§ãã¾ããæéãçµã¤ãã¨ã«ã©ãã©ãå³ã«è¡ãã¾ãã
ã¢ãã¡ã¼ã·ã§ã³ã¯é¢æ° go ã«ãã£ã¦éå§ãããé·ç§»ãçµäºãã¦æ¹åãå転ãã度㫠go ãåå®è¡ããã¾ã:
boat.onclick = function() {
//...
let times = 1;
function go() {
if (times % 2) {
// å³ã«é²ã¿ã¾ã
boat.classList.remove('back');
boat.style.marginLeft = 100 * times + 200 + 'px';
} else {
// å·¦ã«é²ã¿ã¾ã
boat.classList.add('back');
boat.style.marginLeft = 100 * times - 200 + 'px';
}
}
go();
boat.addEventListener('transitionend', function() {
times++;
go();
});
};
transitionend ã®ã¤ãã³ããªãã¸ã§ã¯ãã¯ããã¤ãã®ããããã£ãæã£ã¦ãã¾ãã:
event.propertyName- ã¢ãã¡ã¼ã·ã§ã³ãçµäºããããããã£ãè¤æ°ã®ããããã£ãåæã«ã¢ãã¡ã¼ã·ã§ã³ããå ´åã«ä¾¿å©ã§ãã
event.elapsedTimetransition-delayãé¤ããã¢ãã¡ã¼ã·ã§ã³ã®æé(ç§åä½)ã
ãã¼ãã¬ã¼ã (keyframes)
@keyframes ã¨ãã CSS ã®ã«ã¼ã«ã使ç¨ãã¦ãè¤æ°ã®ç°¡åãªã¢ãã¡ã¼ã·ã§ã³ãä¸ç·ã«åä½ããããã¨ãã§ãã¾ãã
ãã®æ¹æ³ã§ã¯ãã¢ãã¡ã¼ã·ã§ã³ã® âååâ ã¨ãä½ã/ãã¤/ã©ãã§ã¢ãã¡ã¼ã·ã§ã³ããããã®ã«ã¼ã«ãæå®ãã¾ãããã®å¾ãanimation ããããã£ã使ã£ã¦ã¢ãã¡ã¼ã·ã§ã³ã¨è¦ç´ ã®ç´ã¥ããè¡ãã追å ã®ãã©ã¡ã¼ã¿ãæå®ãã¦ããã¾ãã
ããã¯èª¬æä»ãã®ä¾ã§ã:
<div class="progress"></div>
<style>
@keyframes go-left-right { /* ååãæå®ãã¾ã: "go-left-right" */
from { left: 0px; } /* left: 0px ããã¢ãã¡ã¼ã·ã§ã³ãéå§ãã¾ã */
to { left: calc(100% - 50px); } /* left: 100%-50px ã¾ã§ã¢ãã¡ã¼ã·ã§ã³ãã¾ã */
}
.progress {
animation: go-left-right 3s infinite alternate;
/* ã¢ãã¡ã¼ã·ã§ã³ "go-left-right" ãè¦ç´ ã«é©ç¨ãã¾ã
æé㯠3 ç§ (3s)
åæ°: ç¡é (infinite)
é æ¹å/éæ¹åãæ¯å交äºã« (alternate)
*/
position: relative;
border: 2px solid green;
width: 50px;
height: 20px;
background: lime;
}
</style>
@keyframes ã 詳細ãªä»æ§ ã«ã¤ãã¦å¤ãã®è¨äºãããã¾ãã
ãã ããããªãã®ãµã¤ãä¸ã§å¸¸ã«åãã¦ãããã®ããªãéããæãã @keyframes ãé »ç¹ã«å¿
è¦ã¨ã¯ããªãã§ãããã
ãµããª
CSS ã¢ãã¡ã¼ã·ã§ã³ã¯ã1ã¤ä»¥ä¸ã® CSS ããããã£ã®å¤æ´ããªãããã«ã¢ãã¡ã¼ã·ã§ã³åã§ãã¾ãã
ããã¯ã»ã¨ãã©ã®ã¢ãã¡ã¼ã·ã§ã³ã®ã¿ã¹ã¯ã«é©ãã¦ãã¾ãããªããã¢ãã¡ã¼ã·ã§ã³ã« JavaScript ã使ããã¨ãã§ãã¾ããæ¬¡ã®ãã£ãã¿ã¼ã§ã¯ãããè¦ã¦ããã¾ãã
JavaScript ã¢ãã¡ã¼ã·ã§ã³ã¨æ¯è¼ããå ´åã® CSS ã¢ãã¡ã¼ã·ã§ã³ã®å¶éã¯æ¬¡ã®éãã§ã:
- ç°¡åãªãã¨ã¯ç°¡åã«ã§ãã¾ãã
- CPU ã«å¯¾ãé«éã§ãã軽éã§ãã
- JavaScript ã¢ãã¡ã¼ã·ã§ã³ã¯æè»ã§ãã è¦ç´ ã® âççºâ ã®ãããªä»»æã®ã¢ãã¡ã¼ã·ã§ã³ãã¸ãã¯ãå®è£ ãããã¨ãã§ãã¾ãã
- åãªãããããã£ã®å¤æ´ã§ã¯ããã¾ãããJavaScript ã§ã¯ã¢ãã¡ã¼ã·ã§ã³ç®çã§æ°ããè¦ç´ ã使ããã¨è¨ã£ããã¨ãå¯è½ã§ãã
大é¨åã®ã¢ãã¡ã¼ã·ã§ã³ã¯ãã®ãã£ãã¿ã¼ã§èª¬æãã CSS ã使ç¨ãã¦å®è£
ãããã¨ãã§ãã¾ãããã㦠transitionend ã¤ãã³ãã¯ã¢ãã¡ã¼ã·ã§ã³ã®å¾ã« JavaScript ãå®è¡ãããã¨ãã§ããã®ã§ãã³ã¼ãã¨ããã¾ãçµ±åã§ãã¾ãã
ããããæ¬¡ã®ãã£ãã¿ã¼ã§ã¯ããè¤éãªã±ã¼ã¹ãåãæ±ãããã JavaScript ã¢ãã¡ã¼ã·ã§ã³ãããã¤ãè¦ã¦ããã¾ãã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã