canvas画田字格と米字格
4092 ワード
プロジェクトでは最近canvas画図の機能が使われており、主にフォントを描き、フォントのストロークを描き、アニメーションを実現しています.フォントの背景は田の字格あるいは米の字格あるいはピクチャーで、田の字格と米の字格の画法の小結だけでネットユーザーの参考に供します.主にcanvasの描画経路と線、マスク描画の機能を使用します.
<style type="text/css">
#div1 {
width: 400px;
height: 400px;
}
</style>
<div id="div1">
<canvas width="800" height="800" id="cs"> canvas!</canvas>
</div>
<script type="text/javascript">
var oCanvas = document.getElementById('cs');
if (oCanvas.getContext) {
var ctx = oCanvas.getContext('2d'),
l = 0,
w = oCanvas.width,
half = w / 2,
span = 5; // 5
ctx.strokeStyle = '#FF0000';
ctx.lineWidth = 2;
ctx.strokeRect(1, 1, w - 2, w - 2);
// !
//drawReal(ctx);
//drawUnReal(ctx);
//drawUnRealNB(ctx);
drawSimpleUnreal(ctx);
}
//
function drawReal(ctx) {
ctx.save();
ctx.lineWidth = 1;
ctx.beginPath();
//
ctx.moveTo(0, half);
ctx.lineTo(w, half);
//
ctx.moveTo(half, 0);
ctx.lineTo(half, w);
// 1
ctx.moveTo(0, 0);
ctx.lineTo(w, w);
// 2
ctx.moveTo(0, w);
ctx.lineTo(w, 0);
ctx.stroke();
ctx.closePath();
ctx.restore();
}
// , !
function drawUnReal(ctx) {
ctx.save();
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(0, half);
l = w / 5; //
for (var i = 0; i < l; i += 2) {
ctx.lineTo(i * span, half);
ctx.moveTo((i + 1) * span, half);
}
//
ctx.moveTo(half, 0);
for (var i = 0; i < l; i += 2) {
ctx.lineTo(half, i * span);
ctx.moveTo(half, (i + 1) * span);
}
ctx.translate(half, half);
ctx.rotate(45 * Math.PI / 180);
ctx.moveTo(0, -half * Math.SQRT2);
l = Math.ceil(w * Math.SQRT2 / 5);
// 1
for (var i = 0; i < l; i += 2) {
ctx.lineTo(0, -half * Math.SQRT2 + i * span);
ctx.moveTo(0, -half * Math.SQRT2 + (i + 1) * span);
}
ctx.rotate(90 * Math.PI / 180);
ctx.moveTo(0, -half * Math.SQRT2);
// 2
for (var i = 0; i < l; i += 2) {
ctx.lineTo(0, -half * Math.SQRT2 + i * span);
ctx.moveTo(0, -half * Math.SQRT2 + (i + 1) * span);
}
// !
ctx.stroke();
ctx.restore();
}
// ——
function drawUnRealNB(ctx) {
drawReal(ctx);
//
ctx.save();
ctx.lineWidth = 1;
ctx.beginPath();
l = w / 5; //
for (var i = 1; i < l; i += 2) {
ctx.rect(i*span,half-2,span,3);
}
//
for (var i = 1; i < l; i += 2) {
ctx.rect(half-2,i*span,3,span);
}
ctx.translate(half, half);
ctx.rotate(45 * Math.PI / 180);
l = Math.ceil(w * Math.SQRT2 / 5);
// 1
for (var i = 1; i < l; i += 2) {
ctx.rect(-2,-half * Math.SQRT2+i*span,3,span);
}
ctx.rotate(90 * Math.PI / 180);
// 2
for (var i = 1; i < l; i += 2) {
ctx.rect(-2,-half * Math.SQRT2+i*span,3,span);
}
ctx.restore();
//
ctx.clip();
ctx.clearRect(0,0,w,w);
}
// , !
function drawSimpleUnreal(ctx){
ctx.save();
ctx.lineWidth = 1;
ctx.beginPath();
// ( , ios safari4.3.3 !)http://msdn.microsoft.com/zh-cn/library/ie/dn265037(v=vs.85).aspx
//IE11+/safari7+
//ctx.setLineDash([12,3,3,3]); // 12 , 3 + 3 , 3
ctx.setLineDash([5,5]); // 5 , 5
//
ctx.moveTo(0, half);
ctx.lineTo(w, half);
//
ctx.moveTo(half, 0);
ctx.lineTo(half, w);
// 1
ctx.moveTo(0, 0);
ctx.lineTo(w, w);
// 2
ctx.moveTo(0, w);
ctx.lineTo(w, 0);
ctx.stroke();
ctx.closePath();
ctx.restore();
}
</script>
</code></pre>
<br/>
<br/>
</div>
</div>
</div>
</div>