JavaScript、jQuery、CSS を使用して CSS3 トランジションの終了を待機する方法
前提条件
このチュートリアルを始める前に、以下の知識が必要です。
- HTML
- CSS
- JavaScript
- jQuery
CSS トランジション
CSS トランジションは、要素のプロパティを徐々に変化させるアニメーションを作成するための強力なツールです。トランジションは、duration
、timing-function
、delay
などのプロパティを使用して制御できます。
.element {
transition: transform 1s ease-in-out;
}
.element:hover {
transform: translateX(100px);
}
この例では、.element
クラスを持つ要素がマウスホバー時に 1 秒かけて水平方向に 100 ピクセル移動します。
jQuery を使用して CSS トランジションの終了を待機する
jQuery を使用すると、CSS トランジションの終了を簡単に待機できます。これを行うには、transitionEnd
イベントを使用します。
$(document).ready(function() {
$('.element').on('transitionEnd', function() {
// トランジションが完了したときに実行するコード
});
});
この例では、.element
クラスを持つすべての要素に transitionEnd
イベントリスナーを追加します。このリスナーは、トランジションが完了するときに実行されます。
例
次の例では、jQuery を使用して CSS トランジションの終了を待ってから、要素の色を変更する方法を示します。
<!DOCTYPE html>
<html>
<head>
<title>CSS トランジションの終了を待機する</title>
<link rel="stylesheet" href="style.css">
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="script.js"></script>
</head>
<body>
<div class="element"></div>
<script>
$(document).ready(function() {
$('.element').on('transitionEnd', function() {
$(this).css('background-color', 'red');
});
});
</script>
</body>
</html>
.element {
width: 100px;
height: 100px;
background-color: blue;
transition: background-color 1s ease-in-out;
}
.element:hover {
background-color: green;
}
この例では、.element
クラスを持つ要素がマウスホバー時に 1 秒かけて背景色が青から緑に変更されます。トランジションが完了すると、要素の色は赤に変更されます。
<!DOCTYPE html>
<html>
<head>
<title>CSS トランジションの終了を待機する</title>
<link rel="stylesheet" href="style.css">
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="script.js"></script>
</head>
<body>
<div class="element"></div>
<script>
$(document).ready(function() {
$('.element').on('transitionEnd', function() {
$(this).css('background-color', 'red');
});
});
</script>
</body>
</html>
.element {
width: 100px;
height: 100px;
background-color: blue;
transition: background-color 1s ease-in-out;
}
.element:hover {
background-color: green;
}
$(document).ready(function() {
$('.element').on('transitionEnd', function() {
$(this).css('background-color', 'red');
});
});
説明
- HTML コードでは、
.element
クラスを持つ要素を作成します。 - CSS コードでは、
.element
クラスを持つ要素に背景色、幅、高さ、およびトランジションを設定します。トランジションは、1 秒かけてbackground-color
プロパティをgreen
からblue
に変更します。 - JavaScript コードでは、jQuery を使用して
transitionEnd
イベントを.element
クラスにバインドします。このイベントは、トランジションが完了するときに発生します。イベントハンドラーは、要素のbackground-color
プロパティをred
に設定します。
$('.element').on('transitionEnd', function() {
// トランジションが完了したときに実行するコード
}).promise().then(function() {
// トランジションが完了したときに実行する別のコード
});
requestAnimationFrame を使用する
requestAnimationFrame
関数は、ブラウザのリフレッシュレートと同期して関数を呼び出すために使用できます。トランジションの終了を待機するには、requestAnimationFrame
関数を使用して、要素のプロパティを繰り返しチェックし、トランジションが完了したかどうかを確認できます。
let isTransitioning = true;
function checkTransition() {
if (!isTransitioning) {
// トランジションが完了したときに実行するコード
return;
}
requestAnimationFrame(checkTransition);
}
$('.element').on('transitionEnd', function() {
isTransitioning = false;
});
requestAnimationFrame(checkTransition);
カスタムイベントを使用する
CSS トランジションが完了したときにカスタムイベントを発生させることができます。このイベントを待機するには、jQuery または JavaScript のイベントリスナーを使用できます。
$('.element').on('transitionEnd', function() {
$(this).trigger('transitionComplete');
});
$('.element').on('transitionComplete', function() {
// トランジションが完了したときに実行するコード
});
CSS 変数を使用する
CSS 変数は、トランジションの進行状況を追跡するために使用できます。トランジションの終了を待機するには、CSS 変数の値を繰り返しチェックできます。
.element {
transition: transform 1s ease-in-out;
}
.element:hover {
transform: translateX(100px);
--transition-progress: 1;
}
.element:transition-end {
--transition-progress: 0;
}
let isTransitioning = true;
function checkTransition() {
if (getComputedStyle(element).getPropertyValue('--transition-progress') === '0') {
isTransitioning = false;
// トランジションが完了したときに実行するコード
return;
}
requestAnimationFrame(checkTransition);
}
$('.element').on('transitionEnd', function() {
isTransitioning = false;
});
requestAnimationFrame(checkTransition);
javascript jquery css