Я создал директиву, которая автоматически изменяет размер элементов в соответствии с процентами окна. Но есть еще проблемы, которые я не могу решить.
Вот файлы:
autoresize.js:
angular.module('autoresize', [])
.directive('autoresize', function() { return {
scope:{theId:'@id', theClass:'@class', wFactor:'@w', hFactor:'@h'},
link: function(scope, elem, attrs) {
scope.onResize = function() {
if(scope.hFactor != 'w')
{
scope.height = Math.floor($(window).innerHeight()*scope.hFactor);
}
if(scope.wFactor != 'h')
{
scope.width = Math.floor($(window).innerWidth()*scope.wFactor);
}
if(scope.hFactor == 'w')
{
scope.height = scope.width;
}
if(scope.wFactor == 'h')
{
scope.width = scope.height;
}
$(elem).outerHeight(scope.height);
$(elem).outerWidth(scope.width);
}
scope.onResize();
angular.element($(window)).bind('resize', function() {
scope.onResize();
});
}
}
});
test.htm:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<style type="text/css">
*
{
box-sizing: border-box;
}
html, body
{
margin: 0;
padding: 0;
}
#left, #right
{
display: inline-block;
}
#left
{
background: #101010;
}
#right
{
background: #777777;
}
#bottom
{
background: #AAAAAA;
}
</style>
</head>
<body>
<div ng-app="testApp" ng-controller="testCtrl">
<div id="content">
<div id="left" autoresize w="0.5" h="0.8"></div><div id="right" autoresize w="0.5" h="0.8"></div>
<div id="bottom" autoresize w="1" h="0.2">{{width}}</div>
</div>
</div>
<script src="vendor/angular.min.js"></script>
<script src="vendor/jquery-2.1.3.min.js"></script>
<script src="autoresize.js"></script>
<script>
angular.module('testApp', ['autoresize'])
.controller('testCtrl', function($scope, $http) {
});
</script>
</body>
</html>
Первая проблема заключается в том, что когда я открываю веб-приложение, размеры не устанавливаются правильно: я должен изменить размер окна, чтобы оно заработало. Почему строка scope.onResize()
в функции ссылки не все корректно инициализирует?
Вторая проблема заключается в том, что переменные области видимости "width" и "height" недоступны в элементе: в приведенном ниже примере в div "bottom" ничего нет. Как сделать их доступными?
(Здесь вы можете подумать, что CSS будет достаточно, однако на самом деле мое приложение немного сложнее, чем в приведенном ниже примере, и CSS недостаточно)
Большое спасибо!