Я пытаюсь создать элемент типа "Viewport", расширенный из элемента Canvas. Я хотел, чтобы он заполнил родительский контейнер, но это кажется не очень тривиальным.
Элемент холста не работает со стилем = "ширина: 100%; высота: 100%" (он вернется к значению по умолчанию 300x150 пикселей, если специальные атрибуты ширины и высоты холста не установлены, или он перейдет к 100x100). пикселей, если я попытаюсь установить эти атрибуты на "100%". Это оставляет мне задачу вручную установить ширину элемента холста в соответствии с размером родительского элемента. Однако я в недоумении, пытаясь выяснить способ доступа к событию изменения размера, к которому я мог бы добавить обработчик с точки зрения пользовательского элемента. Кажется, я не получаю доступ к window.on.resize из любого места внутри пользовательского элемента. Должен ли я делать это снаружи ?
Вот пример определения полимерного элемента:
<polymer-element name="canvas-viewport">
<template>
<style>
@host{
:scope {
margin:0px;
padding:0px;
display:block;
position:relative;
width:100%;
height:100%;
background:limegreen;
overflow:visible;
border:0;
}
}
div {
border:0;
margin:0px;
padding:0px;
width:100%;
height:100%;
}
</style>
<div id="container">
<canvas width="{{wpWidth}}" height="{{wpHeight}}" id="theCanvas"></canvas>
</div>
</template>
<script type="application/dart" src="canvas_viewport.dart"></script>
</polymer-element>
Вот некоторый код дротика в сопроводительном определении класса полимера для попытки справиться с изменением размера, которое я сделал на основе предложенного решения этого вопроса.
@override
void attached() {
super.attached();
viewPortContainer = shadowRoot.querySelector("#container");
window.onResize.listen(resizecontainer);
}
void resizecontainer(Event e){
wpWidth = viewPortContainer.clientWidth;
wpHeight = viewPortContainer.clientHeight;
print("resizing Width:$wpWidth , Height:$wpHeight ");
}
Однако это приводит к ошибке, когда высота увеличивается на три пикселя при каждом изменении размера, даже если поля и отступы установлены на ноль.