다음 코드에 대해 이상한 동작이 발생합니다.게으른 로딩이 종종 작동하지 않습니다.
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
에 의해 꺼져있는 원인이되는 약간 부정확 진수 값을 반환합니다.
console.log(windowBottom); // 1646.7747712336175
console.log(docHeight); // 1647
왜 이런 일이 발생하는지 알고 계십니까?
편집 2 :
위의 행동은 비 결정적이지만, 소수 부분은 사실이다. !
이는 각도 지시문을 디자인하는 다소 드문 방법입니다. 특정 UI 이벤트에 JavaScript 실행을 매기는 각도의 디자인 원칙에 반하는 것입니다. – Claies
화면 하단에 Chrome 개발자 콘솔이 설치되어 있지 않습니까? 유사한 코드의 높이 인식에 다소 기발한 영향을 미칠 수 있습니다. – cYrixmorten
@cYrixmorten 화면 맨 아래에 Chrome dev console이 없었습니다.하지만 그 동작은 아직 결정적이지 않습니다. – testing