translate移动 canvas的translate相当于移动画布的坐标原点位置,而且在这之后画的东西也是按照移动后的坐标原点来画
var canvas
= document
.querySelector("#canvas")
var cxt
= canvas
.getContext("2d")
cxt
.translate(300,0)
cxt
.fillStyle
= "deepskyblue"
cxt
.fillRect(100,100,300,100)
rotate旋转 参数是带π的弧度 默认旋转的中心是坐标轴原点,而且是整个坐标轴旋转了,在这之后画的东西也是按照旋转之后的坐标来画了
cxt
.ratate(Math
.PI/4)
scale缩放 参数是 x轴缩放倍数,y轴缩放倍数 默认值是1,1 也就是不放大也不缩小 这里也是放大了坐标尺,并不是放大画像
ctx
.scale(2,4)
ctx
.scale(0.5,0.25)
save与restore保留与恢复状态 使用这对方法就可以不用每次都计算来复原坐标原点位置,缩放,画笔颜色等 可以执行多次save保留状态,但是恢复时也要执行对应多次才可以恢复到对应状态。类似于撤销
cxt
.save()
cxt
.scale(2,4)
cxt
.restore()
绘制钟表
<canvas id
="canvas" width
="800" height
="600"></canvas
>
<script
>
var canvas
= document
.querySelector("#canvas
)
var cxt
= canvas
.getContext("2d")
function renderClock(){
cxt
.clearRect(0,0,800,600)
cxt
.save()
cxt
.translate(400,300)
cxt
.rotate(-2*Math
.PI/4)
cxt
.save()
cxt
.beginPath()
cxt
.arc(0,0,200,0,2*Math
.PI)
cxt
.strokeStyle
= "darkgrey"
cxt
.lineWidth
= 10
cxt
.stroke()
cxt
.closePath()
for(var j
=0;j
<60;j
++){
cxt
.rotate(Math
.PI/30)
cxt
.beginPath()
cxt
.moveTo(180,0)
cxt
.lineTo(190,0)
cxt
.lineWidth
= 2
cxt
.strokeStyle
= "orangered"
cxt
.stroke()
cxt
.closePath()
}
cxt
.restore()
cxt
.save()
for(var i
=0;i
<12;i
++){
cxt
.rotate(Math
.PI/6)
cxt
.beginPath()
cxt
.moveTo(180,0)
cxt
.lineTo(200,0)
cxt
.lineWidth
= 10
cxt
.strokeStyle
= "darkgrey"
cxt
.stroke()
cxt
.closePath()
}
cxt
.restore()
cxt
.save()
var time
= new Date()
var hour
= time
.getHours()
var min
= time
.getMinutes()
var sec
= time
.getSeconds()
hour
=hour
>12?hour
-12:hour
cxt
.beginPath()
cxt
.rotate(2*Math
.PI/60*sec
)
cxt
.moveTo(-30,0)
cxt
.lineTo(170,0)
cxt
.lineWidth
= 2
cxt
.strokeStyle
= "red"
cxt
.stroke()
cxt
.closePath()
cxt
.restore()
cxt
.save()
cxt
.beginPath()
cxt
.rotate(2*Math
.PI/60*min
+2*Math
.PI/3600*sec
)
cxt
.moveTo(-20,0)
cxt
.lineTo(150,0)
cxt
.lineWidth
= 4
cxt
.strokeStyle
= "darkblue"
cxt
.stroke()
cxt
.closePath()
cxt
.restore()
cxt
.save()
cxt
.beginPath()
cxt
.rotate(2*Math
.PI/12*hour
+2*Math
.PI/60/12*min
+2*Math
.PI/12/60/60*sec
)
cxt
.moveTo(-10,0)
cxt
.lineTo(140,0)
cxt
.lineWidth
= 6
cxt
.strokeStyle
= "darkslategray"
cxt
.stroke()
cxt
.closePath()
cxt
.beginPath()
cxt
.arc(0,0,10,0,2*Math
.PI)
cxt
.fillStyle
= "deepskyblue"
cxt
.fill()
cxt
.closePath()
cxt
.restore()
cxt
.restore()
}
setInterval(function(){
renderClock()
},1000)
</script
>