【发布时间】:2018-10-04 19:29:52
【问题描述】:
我想在画布的右下角绘制几个透视变换的矩形(形状)。为此,我使用了 ctx.transform:ctx.transform(1, 0, -1, 1, 10, 10)。
现在我想使用变量scale=n 缩放我的绘图大小,但仍将位置保持在该点(在中心)。
这是我到目前为止编写的代码。移动滑块会更改形状的位置。我怎样才能避免这种情况?
let canvas = document.getElementById("canvas")
canvas.width = canvas.height = 200;
$(canvas).appendTo(document.body)
let ctx = canvas.getContext("2d")
let update = function(input) {
let scale = input.value;
ctx.clearRect(0, 0, canvas.width, canvas.height)
ctx.transform(1, 0, -1, 1, 10, 10)
for (let i = 0; i < 4; i++) {
ctx.fillStyle = (i === 2) ? "#3b2a19" : "#957e67"
let layer = {
x: canvas.width + scale * 7 - i * scale,
y: canvas.height - scale * 5 - i * scale,
width: scale * 3,
height: scale * 1.5
}
ctx.fillRect(layer.x, layer.y, layer.width, layer.height)
ctx.strokeRect(layer.x, layer.y, layer.width, layer.height)
}
ctx.resetTransform();
}
$("input").trigger("input")
#canvas {
border: 2px solid red
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas id="canvas"></canvas>
<input oninput="update(this)" type="range" min="1" max="20" />
【问题讨论】:
标签: javascript html css canvas transform