やること
- このサイトにあることを実行したいが、jQueryではなくVanilla JSで実装したい
スマホでも動く!スクロール判定でCSSアニメーションの作り方 | 株式会社Cruw(クルー)
さっそく
.scrollTop()
- 現在のスクロール位置を取得
jQuery
var scroll = $(window).scrollTop();
Vanilla
var scroll = document.scrollingElement.scrollTop;
※上記はクロスブラウザ対応が必要なためもっと複雑になる
function bodyOrHtml() => { if ('scrollingElement' in document) { return document.scrollingElement; } // Fallback for legacy browsers if (navigator.userAgent.indexOf('WebKit') != -1) { return document.body; } return document.documentElement; }
参考
.height()
- 要素の高さを取得
jQuery
var windowHeight = $(window).height();
Vanilla
var windowHeight = window.innerHeight;
参考
.offset()
- document
を起点にした位置情報を取得する
document
の左上を起点にtop
とleft
の値を取得する。
jQuery
var myTop = $("#main").offset().top;
Vanilla
var myMain = document.getElementById("main"); var rect = myMain.getBoundingClientRect(); var scrollTop = window.pageYOffset || document.documentElement.scrollTop; var myTop = rect.top + scrollTop;
Vanillaになると複雑になりました。 これが何をやっているかを一行ずつ見ます。
参考
.getBoundingClientRect()
- 要素の位置座標・寸法を取得する※
※ここからはjQueryの.offset().top
をVanillaで再現するのに使用するメソッドを見ていきます。
ブラウザの表示領域の左上を起点とする。
返り値のDOMRect
オブジェクトは以下のプロパティを持つ。
- left
- top
- right
- bottom
- x
- y
- width
- height
参考
- スクロール位置取得方法をいい加減忘れないようにメモ - Qiita
- JavaScriptで要素の位置座標を取得する方法
- Element.getBoundingClientRect() - Web API | MDN
.pageYOffset
, .scrollTop
- 縦方向のスクロール量を取得する
参考
スクロールイベントを取得してスクロール量を表示する
縦スクロールをオンにしたボックス内でスクロールしたときに、スクロール量を取得・表示する
HTML
<div id="main" class="container"> <div class="box">スクロール可能領域</div> </div>
CSS
.container { border: 2px solid #333; width: 100px; height: 200px; overflow-y: scroll; } .box { height: 1000px; }
Vanilla JS
document.querySelector('.container').addEventListener('scroll', (e) => { console.log(e.target.scrollTop); });
参考
アニメーション実装は別エントリで書きます
スクロールイベントを取得するコードが書ける時点で、あとはアニメーションの実装を残すのみとなるが、気力が保たないため次回エントリに譲る。