ページの下までスクロールされたことを検出する
最近のサイトは新しいデータを取得して表示するとき、ページネーション(「←前 1 2 3 次→」みたいなやつ)よりも、
ページが一番下までスクロールされたら処理するといった方法が多いように思います。
ちょっとクールだと思ったので、調べてやってみました。
コード
以下のようなコードで、思った通りの挙動になりました。
// 垂直スクロール量を取得する var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; // 表示領域の高さを取得する var clientHeight = document.body.clientHeight; // スクロールバーで隠れた領域を含むコンテンツ領域の高さを取得する var scrollHeight = document.body.scrollHeight || document.docomentElement.scrollHeight; // Firefox・Chrome対応 if(scrollHeight === clientHeight) { clientHeight = window.innerHeight; } // コンテンツ領域の底までの残り領域 var remain = scrollHeight - clientHeight - scrollTop; // 一番下までスクロールされたら if(remain <= 0) { // 処理実行 }
ただ、この仕組みを実装したサイトに、スマートフォンでアクセスすると問題ないのですが、
PCのブラウザでアクセスすると、処理が2回連続で動いてしまうという状況に・・・(´・ω・`)
(1回で終わるときもあれば、連続して動くこともある)
スクロールイベントにバインドさせている訳なんですが、おそらくスクロールイベントが連続する処理なので、
このような状況になっているのではないかと推測・・・詳細は不明・・・。
とりあえず、スマホ用のサイトだったので良しとします。
この手法を使ってるっぽいサイト
ちなみにこんな感じのサイトを調べてみました。
こんだけしか調べられなかった・・・(´Д` )
Smile for Japan
http://smile4j.info/
参考にした記事
http://lab.branberyheag.com/2011/03/30/window%E3%81%AE%E4%B8%80%E7%95%AA%E4%B8%8B%E3%81%BE%E3%81%A7%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%9F%E3%81%93%E3%81%A8%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B.html
Windowの下までスクロールされたことを検出する - リトルプログラマーの日記
ブラウザの表示領域のサイズを取得する方法。 - Enjoy*Study