我正在将dart聚合物应用程序更新为最新的聚合物,核心元素和纸质元素。我以前使用的是聚合物元素,在该聚合物布局中有一个on-polymer-layout事件,我正在使用该事件来帮助调整 Canvas 元素的大小,以获取其容器的整个大小(请参阅Autosizing canvas inside a polymer grid layout)。
我找不到等效的int核心元素,因此回到正题。我现在该如何处理?
我回到使用聚合物布局事件之前的状态。我可以将容器的大小调整为整个浏览器的宽度,但是它的高度是 Canvas 的默认高度。如果我调整浏览器窗口的大小,它可以工作,所以这是一个初始化问题。
在添加聚合物布局事件之前,我必须使用带有超时的hack。那真的是胡扯,所以我祈祷我缺少的新核心元素中有一个干净的方法。
另请参阅there doesn't seem to be a polymer-layout event
我的代码
的HTML
<link rel="import" href="packages/paper_elements/paper_slider.html">
<polymer-element name="delme-canvas">
<template>
<style>
#top {
background-color: red;
height: 100%;
}
#slider-container {
margin: 10px;
padding: 10px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;
background-color: rgb(238, 238, 238);
}
paper-slider {
width: 150px;
}
canvas {
border: 2px solid black;
}
#canvasContainer {
border: 2px solid blue;
height: 100%;
}
</style>
<section id="top" vertical layout flex>
<section id="section" horizontal layout>
<div id="slider-container" center horizontal layout>
<div id="label">Roundness</div>
<paper-slider id="paper_slider" editable min="0" max="100" step="0.1"></paper-slider>
</div>
<div id="div" flex></div>
</section>
<section id="canvasContainer" flex>
<canvas id="canvas" flex></canvas>
</section>
</section>
</template>
<script type="application/dart" src="delme_canvas.dart">
</script>
</polymer-element>
镖
import 'dart:html';
import 'package:polymer/polymer.dart';
@CustomTag('delme-canvas')
class CanvasViewElement extends PolymerElement {
CanvasElement canvas;
HtmlElement canvasContainer;
CanvasViewElement.created() : super.created();
void _resize() {
if (canvasContainer.clientWidth == 0)
return;
canvas.width = canvasContainer.clientWidth;
canvas.height = canvasContainer.clientHeight;
_redraw();
}
void _redraw() {
final context = canvas.context2D;
context.fillRect(10, 10, 100, 100);
context.stroke();
}
@override
void ready() {
canvas = $['canvas'];
canvasContainer = $['canvasContainer'];
window.onResize.listen((_) {
_resize();
});
_resize();
}
}
index.hml
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>delme</title>
<script src="packages/web_components/platform.js"></script>
<script src="packages/web_components/dart_support.js"></script>
<link rel="import" href="delme_canvas.html">
</head>
<body unresolved fit vertical layout>
<delme-canvas flex></delme-canvas>
<script type="application/dart">export 'package:polymer/init.dart';</script>
</body>
</html>
最佳答案
我尝试了Günter使用attached
的建议,但是那也不起作用。但是,在此过程中,我发现有一个名为domReady
的新生命周期事件(因为编写了原始代码)。这似乎可以解决问题。
因此,ready
方法更改为domReady
,例如
@override
void domReady() {
canvas = $['canvas'];
canvasContainer = $['canvasContainer'];
window.onResize.listen((_) {
_resize();
});
_resize();
}
关于dart - 自动调整 Canvas 大小以占用其容器的全部大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25467796/