就像標題所說的,我不明白爲什麼在指令的鏈接函數中操作DOM時需要$ timeout。爲什麼在修改dom角度時需要超時
下面的代碼工作。 有問題的元素是一個1x1格,它包含一個視頻插件的容器。 如果我刪除$超時,元素不會調整大小,並且不可見。 刪除$超時並用$ rootScope代替$ apply()不起作用。沒有等待的Ajax電話。我只是想調整用戶操作的元素。
我的問題是,超時時間真的是任意的,在較舊的計算機上運行的舊瀏覽器我需要一個更大的超時值在1500毫秒的範圍內,這約90%的時間。即使1500毫秒也是荒謬的,我當然不想讓它變得更大。
var containerBoundingBox;
$timeout(function() {
containerBoundingBox = element[0].getBoundingClientRect();
$log.warn('containerBoundingBox: ', containerBoundingBox);
getActiveVideoElement().css({
'position': 'fixed',
'z-index': 1000000,
'top': containerBoundingBox.top + 'px',
'left': containerBoundingBox.left + 'px',
'width': containerBoundingBox.width + 'px',
'height': containerBoundingBox.height + 'px'
});
}, 100);
元素碼,從活頁採取: 這是我沒有調整對象標記的DIV。
<div class="pluginContainer ng-scope ng-isolate-scope" id="pluginContainer" style="position: fixed; top: 1px; left: 1px; width: 1px; height: 1px; z-index: 1000000;"><object type="application/x-xxxx" style="width: 100%; height: 100%;" id="xxxxxPlugin"></object></div>
這完全取決於視頻插件,這個微不足道的細節在問題中被省略了。 – estus
請提供更多代碼。如果'getActiveVideoElement()'返回jQuery對象,我認爲它應該沒有超時或$ apply() – latata
這個元素是一個jqLite對象,被禁止使用jQuery。 –