Ich schrieb eine eckige Anweisung, um jeden Absatz in einem großen Inhalt zu verfolgen. Wenn der Inhalt auf der Seite statisch ist, funktioniert es einwandfrei. Wenn der Inhalt von der API bedient wird, gibt getBoundingClientRect immer Null für meine Platzhalter zurück. Ich kompiliere es neu, bevor ich es zur Ansicht gebe. Wie berechnet man getBoundingClientRect für eine Direktive in dynamischen Inhalten?getBoundingClientRect gibt Null für die Winkelanweisung zur Laufzeit aus
Mein Inhalt:
<p storytracker="261">"He don't look to have taken much harm." said Mrs. White politely.</p>
In meinem Diective:
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)
);
}
Bitte geben Sie den Code für die gesamte Direktive an, am besten, wenn Sie ein JSFiddle zur Verfügung stellen können, das diesen Fehler reproduziert. – sielakos
In welchem Teil des Direktivencodes machst du diese '' 'ifElementinviewport'' Messung? wenn es in der Link-Funktion ist, dann kann Element tatsächlich immer noch nicht im DOM => 0px Größe – shershen
@shershen Ja, fügte den gesamten Direktiven-Code für Referenz –