巨大なコンテンツの各段落を追跡するための角度ディレクティブを作成しました。コンテンツがページ内で静的な場合、正常に動作します。コンテンツがAPIによって提供されるとき、getBoundingClientRectは常にプレースホルダーに対してゼロを返します。私はそれを見る前に再コンパイルする。どのように動的コンテンツ内のディレクティブのgetBoundingClientRectを計算する?getBoundingClientRectは、実行時にangleディレクティブに対してゼロを返します。
マイコンテンツ:私のDiectiveで
<p storytracker="261">"He don't look to have taken much harm." said Mrs. White politely.</p>
:
angular.module('web')
.directive('storyTracker', storyTracker);
function storyTracker($compile) {
var directive = {
restrict: 'EA',
transclude: true,
scope: {
sid: '='
},
link: function(scope, elem, attrs) {
//Check if element is in viewport on page load
if (isElementInViewport(elem[0])) {
//Element is in view port
}
//Check if element is in viewport on page scroll
var page = angular.element(window);
page.bind('scroll', function() {
if (isElementInViewport(elem[0])) {
//Element is in view port
}
});
}
};
return directive;
}
function ifElementinviewport(el) {
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
);
}
このバグを再現するいくつかのjsfiddleを提供できる場合は、ディレクティブ全体のコードを提供してください。 – sielakos
この '' ifElementinviewport'''測定の中で指示コードの一部を使っていますか?もしそれがリンク関数であれば、実際には要素はまだDOM => 0pxのサイズではないかもしれません。 – shershen
@shershenはい、参照番号 –