var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
canvas.width = 1200;
canvas.height = 900;
var
scale = 1.3,
_width = 100,
_height = 100,
_left = 200,
_top = 200
;
context.strokeRect(_left,_top,_width,_height);
context.translate((_left + _width/2) - (_width / 2) * scale, (_top + _height/2) - (_height / 2) * scale);
context.scale(scale, scale);
context.strokeRect(0, 0, _width, _height);
效果是正常了,但是总觉得有点别扭,大神帮我看看行不行??
可以用 css
<div class="square">
</div>
.square{
width:100px;
height:100px;
border:1px solid green;
margin:100px;
-webkit-transition:all 1s ease;
transition:all 1s ease;
-webkit-transform-origin:center center;
transform-origin:center center;
}
.square:hover{
-webkit-transform:scale(1.3);
transform:scale(1.3);
}
scale和rotate这样的方法都是针对坐标原点(默认左上角)进行操作的。所以在你的第一次scale两倍的时候,正方形整体向右下角放大了两倍。
所以如果你想让正方形在原来的位置放大,那么你需要将坐标原点调整(translate)到正方形的中心点,然后再进行放大。这里的调整是根据放大前正方形的大小来进行的。
为了不影响之后的其他绘制操作,一般我们在做这样的原点中心调整前,会将原点的状态保存下来
ctx.save()
在你的绘制(需要translate原点)完成后,再将原点恢复到你的绘制动作之前
ctx.restore()
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
5 回答1.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决