博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
canvas手工制作叮当猫
阅读量:4575 次
发布时间:2019-06-08

本文共 5975 字,大约阅读时间需要 19 分钟。

HTML

<!DOCTYPE html>

<html>
<head>
<title>canvas叮当猫</title>
</head>
<body>
<canvas id="canvas" width="800px" height="1000px">您的浏览器不支持canvas,请升级或者更换其他浏览器!</canvas>
</body>
</html>

 

 

CSS

html {

background : #fff;
}

 

 

JS

function mlog(log){

console.log("Info: "+log);

};

function zuobiao(ctx, width, height){

ctx.fillStyle ="black";
for(var j = 0; j <= height; j+=50){
ctx.lineWidth = 1;
ctx.lineStyle = "red";
ctx.beginPath();
ctx.moveTo(0,j);
ctx.lineTo(width,j);
ctx.stroke();
}
for(var i = 0; i <= width; i+=50){
ctx.lineWidth = 1;
ctx.lineStyle = "#FF0000";
ctx.beginPath();
ctx.moveTo(i,0);
ctx.lineTo(i,height);
ctx.stroke();
}
for(var i = 0; i <= width; i+=50){
for(var j = 0; j <= height; j+=50){
ctx.font="12px Arill";
ctx.beginPath();
ctx.fillText(i+","+j, i, j);
ctx.stroke();
}
}
}

(function(){

mlog("Hi,I'm vanliga!");
var ctx = init();
//左手
ctx.lineWidth = 9;
ctx.lineStyle="black";
ctx.fillStyle = "#FFFFFF";
ctx.beginPath();
ctx.arc(654, 543, 52, 0, 2*Math.PI, true);
ctx.stroke();
ctx.fill();
//双脚
BezierEllipse2(ctx, 270, 720, 98, 52, 5, "black", "");
BezierEllipse2(ctx, 530, 720, 98, 52, 5, "black", "");
//身体
ctx.lineWidth = 9;
ctx.lineStyle="black";
ctx.lineCap = "around";
ctx.fillStyle = "#00A0E9";
ctx.beginPath();
ctx.moveTo(568,445);
ctx.quadraticCurveTo(630,478,650,500);
ctx.quadraticCurveTo(650,559,600,550);
ctx.quadraticCurveTo(579,540,550,518);
ctx.quadraticCurveTo(553,510,550,480);
ctx.quadraticCurveTo(553,510,550,518);
ctx.quadraticCurveTo(557,510,548,650);
ctx.quadraticCurveTo(579,680,570,700);
ctx.quadraticCurveTo(500,720,440,700);
ctx.quadraticCurveTo(400,650,360,700);
ctx.quadraticCurveTo(300,720,230,700);
ctx.quadraticCurveTo(224,675,250,650);
ctx.quadraticCurveTo(253,510,259,480);
ctx.quadraticCurveTo(253,510,255,520);
ctx.quadraticCurveTo(253,510,100,400);
ctx.quadraticCurveTo(120,360,150,350);
ctx.quadraticCurveTo(203,380,220,375);
ctx.quadraticCurveTo(203,380,568,445);
ctx.stroke();
ctx.fill();
BezierEllipse2(ctx, 400, 600, 110, 71, 5, "#FFFFFF", "fill");
BezierEllipse2(ctx, 400, 600, 110, 71, 5, "black", "");
ctx.lineWidth = 4;
ctx.beginPath();
ctx.moveTo(325,600);
ctx.quadraticCurveTo(400,610,475,600);
ctx.quadraticCurveTo(400,700,325,600);
ctx.stroke();
//脸
ctx.lineWidth = 5;
ctx.lineStyle="black";
ctx.fillStyle = "#00A0E9";
ctx.beginPath();
ctx.arc(400, 300, 200, 0, 2*Math.PI, true);
ctx.fill();
ctx.stroke();
ctx.lineWidth = 5;
ctx.lineStyle="black";
ctx.fillStyle = "#FFFFFF";
ctx.beginPath();
ctx.arc(400, 340, 160, 0, 2*Math.PI, true);
ctx.fill();
ctx.stroke();
//眼睛
BezierEllipse2(ctx, 345, 200, 50, 65, 5, "#FFFFFF", "fill");
BezierEllipse2(ctx, 345, 200, 50, 65, 5, "black", "");
BezierEllipse2(ctx, 455, 200, 50, 65, 5, "#FFFFFF", "fill");
BezierEllipse2(ctx, 455, 200, 50, 65, 5, "black", "");

BezierEllipse2(ctx, 365, 210, 20, 30, 5, "#000", "fill");

BezierEllipse2(ctx, 435, 210, 20, 30, 5, "#000", "fill");

BezierEllipse2(ctx, 375, 210, 8, 15, 5, "#FFFFFF", "fill");

BezierEllipse2(ctx, 425, 210, 8, 15, 5, "#FFFFFF", "fill");

//鼻子

ctx.lineWidth = 5;
ctx.lineStyle="black";
ctx.fillStyle = "#E60012";
ctx.beginPath();
ctx.arc(400, 280, 40, 0, 2*Math.PI, true);
ctx.fill();
ctx.stroke();

ctx.fillStyle = "#FFFFFF";

ctx.beginPath();
ctx.arc(390, 270, 16, 0, 2*Math.PI, true);
ctx.fill();

ctx.beginPath();

ctx.moveTo(400, 320);
ctx.lineTo(400, 460);
ctx.stroke();

//嘴

ctx.lineWidth = 5;
ctx.lineStyle="black";
ctx.lineCap = "round";
ctx.beginPath();
ctx.moveTo(280,410);
ctx.bezierCurveTo(360,480,440,480,520,410);
ctx.stroke();

//左胡子

ctx.moveTo(360,320);
ctx.lineTo(270,260);
ctx.stroke();
ctx.moveTo(360,350);
ctx.lineTo(250,340);
ctx.stroke();
ctx.moveTo(360,380);
ctx.lineTo(260,400);
ctx.stroke();

//右胡子

ctx.moveTo(440,320);
ctx.lineTo(530,260);
ctx.stroke();
ctx.moveTo(440,350);
ctx.lineTo(550,340);
ctx.stroke();
ctx.moveTo(440,380);
ctx.lineTo(540,400);
ctx.stroke();
//围巾
ctx.lineWidth = 7;
ctx.lineStyle="black";
ctx.fillStyle = "#E60012";
ctx.beginPath();
ctx.moveTo(240,427);
ctx.quadraticCurveTo(400,530,560,427);
ctx.quadraticCurveTo(570,437,560,447);
ctx.quadraticCurveTo(400,560,240,450);
ctx.quadraticCurveTo(230,437,242,427);
ctx.stroke();
ctx.fill();
//铃铛
ctx.lineWidth = 9;
ctx.lineStyle="black";
ctx.fillStyle = "#FDD000";
ctx.beginPath();
ctx.arc(400, 530, 40, 0, 2*Math.PI, true);
ctx.stroke();
ctx.fill();
ctx.lineWidth = 8;
ctx.lineStyle="black";
ctx.lineCap = "around";
ctx.fillStyle = "#FDD000";
ctx.beginPath();
ctx.moveTo(365,510);
ctx.quadraticCurveTo(400,498,435,510);
ctx.quadraticCurveTo(450,510,445,518);
ctx.quadraticCurveTo(400,505,355,518);
ctx.quadraticCurveTo(350,510,365,510);
ctx.stroke();
ctx.fill();
ctx.lineWidth = 8;
ctx.lineStyle="black";
ctx.fillStyle = "#7D6B56";
ctx.beginPath();
ctx.arc(400, 542, 8, 0, 2*Math.PI, true);
ctx.stroke();
ctx.fill();
ctx.lineWidth = 5;
ctx.lineStyle="black";
ctx.beginPath();
ctx.moveTo(400, 554);
ctx.lineTo(400, 570);
ctx.stroke();
//右手
ctx.lineWidth = 9;
ctx.lineStyle="black";
ctx.fillStyle = "#FFFFFF";
ctx.beginPath();
ctx.arc(100, 350, 52, 0, 2*Math.PI, true);
ctx.stroke();
ctx.fill();
//zuobiao(ctx, 800, 1000);
})();

function init(){
var can = document.getElementById("canvas");
//can.style.border = "1px solid red";
var ctx = can.getContext("2d");
return ctx;
}

//椭圆的绘制方法

/*context为Canvas的2D绘图环境对象,
x为椭圆中心横坐标,
y为椭圆中心纵坐标,
a为椭圆横半轴长,
b为椭圆纵半轴长*/
function BezierEllipse2(ctx, x, y, a, b, lineWidth, color, method)
{
var k = .5522848,
ox = a * k, // 水平控制点偏移量
oy = b * k; // 垂直控制点偏移量
if(method == "fill"){
ctx.fillStyle = color;
}
else{
ctx.lineWidth = lineWidth;
ctx.storkeStyle = color;
}
ctx.beginPath();
//从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线
ctx.moveTo(x - a, y);
ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);
ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);
ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);
ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);
ctx.closePath();
if(method == "fill"){
ctx.fill();
}
else{
ctx.stroke();
}
};

 

转载于:https://www.cnblogs.com/vanliga/p/4840548.html

你可能感兴趣的文章
Failed to instantiate CLSID_VirtualBox w/ IVirtualBox, but CLSID_VirtualBox w/ IUnknown works.
查看>>
Linux打开和关闭端口
查看>>
HTML To Word
查看>>
java Synchronized 学习
查看>>
linux mysqlERROR 1045 (28000): linux忘记数据库密码
查看>>
常用正则表达式
查看>>
在 RHEL/CentOS 7 上配置NTP时间服务器
查看>>
链表:创建一个简单的链表并输出链表内容
查看>>
python 集中基本数据类型
查看>>
may be a diary?
查看>>
洛谷.2590.[ZJOI2008]树的统计(树分块)
查看>>
实验一:JAVA实验环境搭建
查看>>
Abbreviation of job titles
查看>>
帝国cms灵动标签下常用标签
查看>>
STL学习笔记(关联式容器)
查看>>
Android生成xml
查看>>
使用JSONObject生成和解析json
查看>>
python入到到实战--第十章----文件
查看>>
FMDataBase 打开sqlite的外键约束功能
查看>>
Nmap 7.70新增功能——扫描主机所有IP
查看>>