gpt4 book ai didi

dart - 自动调整 Canvas 大小以占用其容器的全部大小

转载 作者:行者123 更新时间:2023-12-03 03:46:12 25 4
gpt4 key购买 nike

我正在将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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com