更完整地,我得到:
“无法设置只有 getter 的 #
(显然我可以有一个 HTML
但我找到了一个解决方案:编写我想要的 HTML 字符串并使用
innerHTML = string
,而不是创建元素和附加。这样做有什么缺点吗?
将代码中的“true”更改为“false”以演示解决方案:
<html>
<head>
<meta charset="utf-8">
<style>
canvas { outline:1px dotted black; }
</style>
</head>
<body>
<script>
"use strict";
if (true) { // this code has the error
let elt = document.createElement('canvas');
elt.setAttribute('id','canvas');
elt.clientWidth = 500;
elt.clientHeight = 500;
document.body.appendChild(elt);
} else { // this has the workaround/solution
let s = '<canvas id="canvas" width="500" height="500"></canvas>';
document.body.innerHTML = s;
}
let ctx = canvas.getContext("2d");
ctx.arc(250,250,200, 0, 6.2832);
ctx.stroke();
</script>
</body>
</html>
clientWidth
属性是一个 compulated 属性,它是画布的实际屏幕宽度,由 css 和其他所有内容决定。这就是错误消息试图告诉您的内容。如果你突然告诉浏览器你想要实际宽度为 500px,浏览器突然必须确定如何通过 css 将宽度设置为 500px —— 并且有很多影响宽度的 css 属性,浏览器不知道该改变哪个。所以它只是不允许弄乱计算属性。
尝试设置
canvas.width
。 (这就是您对 html 字符串所做的基本操作,设置宽度和高度属性。)