Ich bin etwas seltsames Verhalten für den folgenden Code.Lazy Laden funktioniert gelegentlich nicht in eckigen
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);
}
});
}
Die oben ist ein Stück Code, wenn der Boden der Seite erfasst wird erreicht, wenn ihr es, was Funktion bind erreicht rufen myDirective
Das Hauptproblem, dass die meiste Zeit ist die Lazy Loading funktioniert, und myDirective
wird erfolgreich aufgerufen. Manchmal funktioniert das Lazy Loading jedoch nicht und ich konnte den Fehler nicht reproduzieren.
Ich probierte verschiedene Bildschirmgröße, andere Browser, aber es scheint, als ob der Fehler zufällig passiert.
Vielleicht ist jemand ihnen das schon einmal passiert, und kann mir eine Richtung zeigen?
Edit:
Weitere Informationen
Ich war in der Lage, den Fehler nach einem bisschen experimentieren zu reproduzieren.
Grundsätzlich, wenn der Zoom in Prozent des Browser < 100 %
ist, window.pageY
liefert einen Dezimalwert, der geringfügig ungenau ist, welche windowBottom
verursachen off 0.1
zu 0.9
beispielsweise durch eine sein.
console.log(windowBottom); // 1646.7747712336175
console.log(docHeight); // 1647
Weiß jemand, warum das passiert?
Edit 2:
Das obige Verhalten auch nicht deterministisch ist, aber der Dezimalteil ist wahr. !
Dies ist eine eher ungewöhnliche Art, eine Winkelanweisung zu entwerfen; Es widerspricht den Designprinzipien von angular, um die Ausführung von JavaScript an bestimmte Benutzeroberflächenereignisse zu binden. – Claies
Sie haben nicht zufällig die Chrome-dev-Konsole am unteren Bildschirmrand? Scheint mir, dass es ein bisschen skurrilen Einfluss auf die Höhenwahrnehmung von ähnlichem Code haben kann. – cYrixmorten
@cYrixmorten Ich hatte keine Chrome-dev-Konsole am unteren Bildschirmrand, obwohl ich das versucht habe, aber das Verhalten ist immer noch nicht deterministisch. – testing