【发布时间】:2013-07-17 13:43:24
【问题描述】:
我正在尝试创建一个将 div 居中的指令。
到目前为止,我有这个代码:
app.directive("setcenter", function () {
return {
scope:{
setcenter: '='
},
link: function (scope, element, attrs) {
scope.$watch('setcenter', function (newValue) {
if (newValue == true) {
var width = element.width();
element.css('position', 'absolute');
element.css('top', '80px');
element.css('left', '50%');
element.css('z-index', '200');
element.css('margin-left', '-' + width / 2 + 'px');
}
});
}
}
});
问题是元素的宽度。该指令的重点是使用该指令的 div 没有设置宽度。我希望这个指令能够计算出宽度并将 div 居中。
我遇到的问题是,当指令被调用时,div的实际宽度还不知道。当我在我的情况下使用它时,div 是 800px,但是当页面完成加载时,div 是 221px。
那么,要等到知道 div 的实际宽度,我该怎么办?
【问题讨论】:
-
问题的标题不应该是关于宽度而不是高度吗?关于你的问题,也许你可以简单地在你的链接函数中添加一个 dom 加载事件监听器并在那里调用你的居中函数。
-
我尝试将
$(document).ready(...)放入if(newValue == true)语句中,但没有成功。 -
我认为问题在于,当 div 具有最终大小时,您现在永远无法真正做到,因为 div 可能包含改变其的绑定(ng-style、ng-bind 等)动态大小。如果您不太担心性能,我认为您可以在 rootscope 上设置一个 $watch 并每次调用您的 centering 方法。
-
我建议只使用 CSS。听起来您正试图使一个非常简单的设计要求过于复杂化。创建一个 CSS 类并将其附加到您的元素,该 CSS 类将自动将 DIV 居中在您想要的任何父容器中,而不管宽度如何。它甚至可以响应用户调整浏览器大小、更改字体大小等。 stackoverflow.com/questions/114543/…
-
您是否尝试过使用 element.clientWidth 而不是 element.width?
标签: angularjs angularjs-directive