AngularJS:监视高度变化的更好方式
AngularJS:监视高度变化的更好方式
我遇到了旧的可变高度导航问题:顶部有一个 position: fixes
的导航,下面是一个具有 margin-top: $naviHeight
的内容。
当数据异步加载时,导航的高度可能会发生变化,因此内容的边距也必须相应变化。
我希望这个功能是自包含的,所以不会有加载数据的代码,只在涉及的HTML元素/指令中编写代码。
目前我在AngularJS 1.2.0中使用计时器来实现:
/* * 当高度改变时通知并改变margin-top */ .directive( 'emHeightTarget', function(){ return { link: function( scope, elem, attrs ){ scope.$on( 'heightchange', function( ev, newHeight ){ elem.attr( 'style', 'margin-top: ' + (58+newHeight) + 'px' ); } ); } } }) /* * 定期检查此元素的高度变化 */ .directive( 'emHeightSource', ['$timeout', function( $timeout ) { return { link: function( scope, elem, attrs ){ function __check(){ var h = elem.height(); if( h != scope.__height ){ scope.__height = h; scope.$emit( 'heightchange', h ); } $timeout( __check, 1000 ); } __check(); } } } ] )
这种方法明显存在使用计时器的缺点(我觉得有点丑陋),并且导航调整大小后内容移动存在一定的延迟。
有更好的方法来解决这个问题吗?