次のコードでいくつかの奇妙な動作が発生しています。遅延ロードがときどき角度で動作しない
function linkFunc(scope, element, attribute) {
var page = angular.element($window);
page.bind('scroll', function() {
var windowHeight = "innerHeight" in window ? window.innerHeight : document.documentElement.offsetHeight;
var body = document.body, html = document.documentElement;
var docHeight = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);
var windowBottom = windowHeight + window.pageYOffset;
if (windowBottom >= docHeight) {
scope.$apply(attribute.myDirective);
}
});
}
上記は、ページの下部に到達したかどうかを検出するコードの一部であるその達した場合、それが主な問題は、時間のほとんどであるmyDirective
にどんな機能バインドを呼び出します遅延ロードが機能し、myDirective
が正常に呼び出されます。しかし、怠惰な読み込みはうまくいかず、私はバグを再現できませんでした。
私は別の画面サイズ、別のブラウザを試しましたが、バグがランダムに発生するようです。
誰かがこれまでにそれらに起こったことがありますか、私に方向性を指摘することができますか?
編集:
詳しい情報
私は実験の少し後にバグを再現することができました。ブラウザの割合でズームが< 100 %
とき
基本的には、window.pageY
windowBottom
は0.1
例えば0.9
にでオフにさせるその少し不正確である10進値を返します。
console.log(windowBottom); // 1646.7747712336175
console.log(docHeight); // 1647
これはなぜ起こるのですか?
編集2:
上記の動作も非決定論的であるが、小数部が真です。 !
これは、角度の付いたディレクティブを設計するためのやや珍しい方法です。特定のUIイベントにJavaScriptの実行を結びつけるための角度の設計原則に反します。 – Claies
画面の一番下にChromeの開発コンソールがありませんか?私には、類似したコードの高さ知覚にちょっと変わった影響を与えることができると私には思えます。 – cYrixmorten
@cYrixmorten画面の一番下にChromeのデベロッパーコンソールがありませんでしたが、これを試しましたが、動作はまだ決定的ではありません。 – testing