次の Web ページを考えてみましょう。
<html>
<body onscroll="alert('body scroll event')">
<div style='width:200px;height:200px;overflow:auto' onscroll="alert('div scroll event')">
<div style='height:400px'>
</div>
</div>
</body>
</html>
この html は、スクロールバーを持つ div を作成します。スクロールバーを動かすとonscroll
、div 要素のイベントがトリガーされます。ただし、onscroll
本体のイベントは発生しません。onscroll
W3C は要素イベントが「バブル」しないと述べているため、これは予期されたものです。
ただし、ページの任意の要素のスクロールバーがスクロールされるたびに知る必要があるクライアント側の Web フレームワークを開発しています。これは泡があれば簡単にできますonscroll
が、残念ながらそうではありません。onscroll
ページ全体でイベントを検出する他の方法はありますか? (今は主に Webkit に集中しているので、Webkit 固有のソリューションで問題ありません...)
ここに私が試したいくつかのことがあります:
- キャプチャ
DOMAttrModified
(スクロールバーの移動では起動しないようです。) - DOM オブザーバーの使用 (スクロールバーに対しても起動しないようです)
- イベントの種類をバブルに変更
onscroll
(できないらしい)
onscroll
イベントをグローバルにキャプチャする唯一の方法はonscroll
、スクロールする可能性のあるすべての要素にイベントをアタッチすることです。これは非常に見苦しく、フレームワークのパフォーマンスを損なうことになります。
誰もがより良い方法を知っていますか?