ページの下までスクロールされたことを検出する

最近のサイトは新しいデータを取得して表示するとき、ページネーション(「←前 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) {
    // 処理実行
  }

firefoxchromeで確認済み。

ただ、この仕組みを実装したサイトに、スマートフォンでアクセスすると問題ないのですが、
PCのブラウザでアクセスすると、処理が2回連続で動いてしまうという状況に・・・(´・ω・`)
(1回で終わるときもあれば、連続して動くこともある)

スクロールイベントにバインドさせている訳なんですが、おそらくスクロールイベントが連続する処理なので、
このような状況になっているのではないかと推測・・・詳細は不明・・・。

とりあえず、スマホ用のサイトだったので良しとします。