JavaScriptのカスタムイベントを駆使したインタラクティブなUI開発
- 作成日 2025.02.28
- その他
カスタムイベントを活用することで、DOM操作をより効率的に管理し、UIをインタラクティブに構築できます。本記事では、カスタムイベントを使ったUI開発のテクニックを詳しく解説します。
目次
カスタムイベントの基本
カスタムイベントは、CustomEventコンストラクタを使って作成します。
const event = new CustomEvent('myCustomEvent', {
detail: { message: 'Hello, World!' }
});
document.dispatchEvent(event);イベントの発火
イベントはdispatchEventを使って発火させます。
document.addEventListener('myCustomEvent', (e) => {
console.log(e.detail.message); // "Hello, World!"
});イベントリスナーの設定
カスタムイベントにリスナーを設定する方法を示します。
const listener = (e) => {
console.log('Custom event triggered: ', e.detail);
};
document.addEventListener('myCustomEvent', listener);イベントの詳細情報を渡す
カスタムイベントのdetailプロパティを使ってデータを渡せます。
const event = new CustomEvent('userLogin', {
detail: { username: 'johnDoe', loginTime: '12:00 PM' }
});
document.dispatchEvent(event);複数のカスタムイベントを管理する
複数のカスタムイベントを同時に管理する方法。
const events = ['login', 'logout', 'profileUpdate'];
events.forEach(eventName => {
document.addEventListener(eventName, (e) => {
console.log(`Event ${eventName} triggered with data:`, e.detail);
});
});イベントバブリングの制御
カスタムイベントのバブリングを制御する方法。
const event = new CustomEvent('myEvent', {
bubbles: true, // イベントがバブリングする
cancelable: true
});
document.querySelector('.child').dispatchEvent(event);カスタムイベントと既存のイベントの組み合わせ
標準イベントとカスタムイベントを組み合わせて使用する方法。
const clickEvent = new Event('click');
document.querySelector('#button').addEventListener('click', () => {
const customEvent = new CustomEvent('buttonClicked', {
detail: { time: new Date() }
});
document.dispatchEvent(customEvent);
});イベントの伝播とキャンセル
カスタムイベントの伝播を制御したり、イベントをキャンセルする方法。
const event = new CustomEvent('cancelableEvent', {
cancelable: true
});
event.preventDefault();
if (!event.defaultPrevented) {
document.dispatchEvent(event);
}非同期イベントとカスタムイベントの組み合わせ
非同期処理を使ったカスタムイベントの発火例。
async function fetchData() {
const data = await fetch('https://api.example.com/data');
const event = new CustomEvent('dataFetched', { detail: data });
document.dispatchEvent(event);
}UIのインタラクティブ化にカスタムイベントを活用
ボタンのクリックで動的に内容を変更するUIの例。
document.querySelector('#toggleButton').addEventListener('click', () => {
const event = new CustomEvent('toggleState', { detail: { state: 'active' } });
document.dispatchEvent(event);
});
document.addEventListener('toggleState', (e) => {
document.body.classList.toggle(e.detail.state);
});カスタムイベントとWeb Componentsの統合
Web Components内でカスタムイベントを使って、コンポーネント間でデータのやり取りを行う方法。
class MyComponent extends HTMLElement {
constructor() {
super();
this.addEventListener('toggleState', (e) => {
this.style.backgroundColor = e.detail.state === 'active' ? 'green' : 'red';
});
}
connectedCallback() {
const event = new CustomEvent('toggleState', { detail: { state: 'active' } });
this.dispatchEvent(event);
}
}
customElements.define('my-component', MyComponent);
document.body.appendChild(document.createElement('my-component'));カスタムイベントのパフォーマンス最適化
大量のイベントリスナーを扱う場合のパフォーマンス最適化について。
const throttledEventListener = (event) => {
if (Date.now() - lastEventTime < 100) return;
lastEventTime = Date.now();
console.log('Event triggered:', event);
};
document.addEventListener('myCustomEvent', throttledEventListener);まとめ
カスタムイベントを活用することで、柔軟で効率的なイベント管理が可能となり、インタラクティブなUIを簡単に実現できます。正しい使い方をマスターすることで、アプリケーションのレスポンスとユーザー体験が向上します。
-
前の記事
Google Colaboratory 同じテキストを複数選択状態にするショートカットキー 2025.02.28
-
次の記事
PHPのエラー『Fatal Error: Declaration of Method Must be Compatible』の解決方法 2025.03.01
コメントを書く