我试图让一个 div 在页面加载时正确调整大小,并在 $(window).resize 上调整大小(但没有 jQuery)
我有两组代码可以工作:
此解决方案的第一个:angularJS 窗口调整大小问题
myapp.directive('resize', function($window) {
return function(scope, element, attr) {
var w = angular.element($window);
w.on('resize', function() {
var hh = document.getElementById('header').offsetHeight;
var fh = document.getElementById('footer').offsetHeight;
console.log('hh & fh', hh, fh);
var tp = hh + 2;
var bt = fh + 2;
console.log('tp & bt', tp, bt);
var changes = {
bottom: bt + 'px',
top: tp + 'px',
}
element.css(changes);
scope.$apply();
});
};
});
...在调整窗口大小时效果很好,但在初始加载/刷新时效果不佳
第二个使用链接属性
myapp.directive('contentsize', function($window) {
return {
restrict: 'A',
scope:{},
link:function (scope, element, attrs) {
scope.$watch(function(){return $window.innerHeight;},
function () {
var hh = document.getElementById('header').offsetHeight;
var fh = document.getElementById('footer').offsetHeight;
console.log('hh & fh', hh, fh);
var tp = hh + 2;
var bt = fh + 2;
console.log('tp & bt', tp, bt);
var changes = {
bottom: bt + 'px',
top: tp + 'px',
}
element.css(changes);
},
true);
}
};
});
...在初始加载/刷新时效果很好,但在调整窗口大小时效果不佳
问题:
- 我如何让这些解决方案中的任何一个在初始加载和 window.resize 上工作
- 最佳解决方案是什么?(第一个解决方案表明 $watch 有不必要的开销)
jsFiddle 在这里http://jsfiddle.net/goredwards/012jsvrp/
(只需将 html 中的 'resize1' 换成 'resize2' 即可查看第二个'解决方案')
PS div 之间的 2px 空间是故意的。