[Edge]。→
要素がスクロールしたときに発行されます。
バブリング | なし |
---|---|
キャンセル | 不可 |
インターフェイス | Event |
イベント ハンドラー プロパティ | onscroll |
Note: iOS の UIWebViews では、scroll イベントはスクロールしている最中には発行されません。スクロールが完了した後に発行されます。 を参照してください。Safari と WKWebViews はこのバグの影響を受けません。
mdn より
scroll イベントは高い頻度で発行されるため、イベント ハンドラーで DOM の変更のような計算が重い操作を実行するべきではありません。代わりに、次のように requestAnimationFrame()、setTimeout()、CustomEvent などを使用してイベントを間引くことをお勧めします。
なお、ただし、input イベントやアニメーション フレームがおよそ同じ頻度で発行されるため、以下の最適化は必要ないことがあります。この例は requestAnimationFrame の scroll イベントを最適化します。
// 参照: http://www.html5rocks.com/en/tutorials/speed/animations/ let last_known_scroll_position = 0; let ticking = false; function doSomething(scroll_pos) { // スクロール位置で何かをする } window.addEventListener('scroll', function(e) { last_known_scroll_position = window.scrollY; if (!ticking) { window.requestAnimationFrame(function() { doSomething(last_known_scroll_position); ticking = false; }); ticking = true; } });
HTML:
<DIV id=IdTest style="width:100px; height:100px; overflow:scroll; border:1px solid red;"> aaaaaaaaaaaaaaaaaaaaa<BR> あ<BR> い<BR> う<BR> え<BR> お<BR> か<BR> き<BR> く<BR> け<BR> こ<BR> さ<BR> </DIV> <SPAN id=IdLog></SPAN>
JavaScript:
function Job(eve){ //エラーが起こった時のイベント処理:eve に Event オブジェクトが入る。 D=eve; //=[object]:[object Event] //isTrusted=[boolean]:true //type=[string]:scroll //target=[object]:[object HTMLDivElement] //currentTarget=[object]:null //eventPhase=[number]:0 //… let E=eve.target; //イベントが起きた要素を取得。 IdLog.innerHTML=E.scrollLeft +","+ E.scrollTop; //記録表示:スクロールしている量 } IdTest.onscroll=Job; //エラーが起こった時の処理を割り当てる。