做有态度的前端团队

网易FEG前端团队

简单的canvas绘图demo

最近在看canvas基础知识,刚学完绘制路径、矩形,设置线条、颜色、样式和阴影等,就想码下demo巩固下基础知识。于是网上搜了,找到了绘制XP壁纸的例子,里面用到了前面说到的各个知识点。好了,进入主题了。

html代码:

1
<canvas id="canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">浏览器居然不支持Canvas?赶快换一个吧!!</canvas>

js代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
window.onload = function() {
    var canvas = document.getElementById("canvas");
    canvas.width = 800; //设置canvas的宽度
    canvas.height = 600; //设置canvas的高度
    var context = canvas.getContext("2d");
    context.fillStyle = "#FFF";
    context.fillRect(0, 0, 800, 600);
 
    drawPrairie(context);
    drawSky(context);
    for (var i = 0; i < 5; i++) {
        var x0 = 500 * Math.random() + 50;
        var y0 = 200 * Math.random() + 50;
        var c0 = 100 * Math.random() + 50;
        drawCloud(context, x0, y0, c0);
    }
};
 
function drawSky(cxt) {
    cxt.save();
 
    cxt.beginPath();
    cxt.moveTo(0, 420);
    cxt.bezierCurveTo(250, 300, 350, 550, 800, 400);
    cxt.lineTo(800, 0);
    cxt.lineTo(0, 0);
    cxt.closePath();
 
    var lineStyle = cxt.createRadialGradient(400, 0, 50, 400, 0, 200);
    lineStyle.addColorStop(0, "#42A9AA");
    lineStyle.addColorStop(1, "#2491AA");
 
    cxt.fillStyle = lineStyle;
 
    cxt.fill();
 
    cxt.restore();
}
 
function drawPrairie(cxt) {
    cxt.save();
 
    cxt.beginPath();
    cxt.moveTo(0, 420);
    cxt.bezierCurveTo(250, 300, 350, 550, 800, 400);
    cxt.lineTo(800, 600);
    cxt.lineTo(0, 600);
    cxt.closePath();
 
    var lineStyle = cxt.createLinearGradient(0, 600, 600, 0);
    lineStyle.addColorStop(0, "#00AA58");
    lineStyle.addColorStop(0.3, "#63AA7B");
    lineStyle.addColorStop(1, "#04AA00");
 
    cxt.fillStyle = lineStyle;
    cxt.fill();
 
    cxt.restore();
}
 
 
 
/*渲染单个云朵
context:  canvas.getContext("2d")对象
cx: 云朵X轴位置
cy: 云朵Y轴位置
cw: 云朵宽度
*/
function drawCloud(cxt, cx, cy, cw) {
    //云朵移动范围即画布宽度
    var maxWidth = 800;
    //如果超过边界从头开始绘制
    cx = cx % maxWidth;
    //云朵高度为宽度的60%
    var ch = cw * 0.6;
    //开始绘制云朵
 
    cxt.beginPath();
    cxt.fillStyle = "white";
    //创建渐变
    var grd = cxt.createLinearGradient(0, 0, 0, cy);
    grd.addColorStop(0, 'rgba(255,255,255,0.8)');
    grd.addColorStop(1, 'rgba(255,255,255,0.5)');
    cxt.fillStyle = grd;
 
    //在不同位置创建5个圆拼接成云朵现状
    cxt.arc(cx, cy, cw * 0.19, 0, 360, false);
    cxt.arc(cx + cw * 0.08, cy - ch * 0.3, cw * 0.11, 0, 360, false);
    cxt.arc(cx + cw * 0.3, cy - ch * 0.25, cw * 0.25, 0, 360, false);
    cxt.arc(cx + cw * 0.6, cy, cw * 0.21, 0, 360, false);
    cxt.arc(cx + cw * 0.3, cy - ch * 0.1, cw * 0.28, 0, 360, false);
    cxt.closePath();
 
    cxt.fill();
}
其中蓝天和草坪交接处的三次贝塞尔曲线可以根据以下链接生成自己喜欢的弧度。

http://blogs.sitepointstatic.com/examples/tech/canvas-curves/bezier-curve.html

还有二次贝塞尔曲线可以根据以下链接生成自己喜欢的弧度。

http://www.j--d.com/bezier

手机阅读请扫描下方二维码:

分享到:

    已有 88 条评论

    1. admin

      12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    2. 12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

      1. admin

        12345678 ali-40.gif

      2. admin

        12345678 ali-40.gif

        1. admin

          12345678 ali-40.gif ali-40.gif ali-40.gif ali-40.gif ali-40.gif ali-40.gif ali-40.gif ali-40.gif

      3. admin'and'y'='y

        12345678 ali-40.gif

      4. admin

        12345678 ali-40.gif ali-40.gif ali-40.gif ali-40.gif ali-40.gif ali-40.gif

    3. admin%0d%0aCRLF-Header:CRLF-Value

      12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    4. admin

      iojjhjtqbsklvpjdqyea

    5. iojjhjtqbsklvpjdqyea

      12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    6. admin

      12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    7. admin

      12345678 ali-40.gif ali-41.gif ali-42.gif ali-43.gif ali-44.gif ali-45.gif ali-46.gif ali-47.gif ali-48.gif ali-49.gif ali-50.gif ali-51.gif ali-53.gif ali-54.gif ali-55.gif ali-56.gif ali-57.gif ali-58.gif ali-59.gif ali-60.gif ali-61.gif

    8. 1

      1 ali-40.gif ali-40.gif ali-41.gif ali-41.gif ali-42.gif ali-42.gif ali-43.gif ali-43.gif ali-44.gif ali-44.gif ali-45.gif ali-45.gif ali-46.gif ali-46.gif ali-47.gif ali-47.gif ali-48.gif ali-48.gif ali-49.gif ali-49.gif ali-50.gif ali-50.gif ali-51.gif ali-51.gif ali-52.gif ali-52.gif ali-53.gif ali-53.gif ali-54.gif ali-54.gif ali-55.gif ali-55.gif ali-56.gif ali-56.gif ali-57.gif ali-57.gif ali-58.gif ali-58.gif ali-59.gif ali-59.gif ali-60.gif ali-60.gif ali-61.gif ali-61.gif

    9. 1

      1 ali-40.gif ali-40.gif ali-41.gif ali-41.gif ali-42.gif ali-42.gif ali-43.gif ali-43.gif ali-44.gif ali-44.gif ali-45.gif ali-45.gif ali-46.gif ali-46.gif ali-47.gif ali-47.gif ali-48.gif ali-48.gif ali-49.gif ali-49.gif ali-50.gif ali-50.gif ali-51.gif ali-51.gif ali-52.gif ali-52.gif ali-53.gif ali-53.gif ali-54.gif ali-54.gif ali-55.gif ali-55.gif ali-56.gif ali-56.gif ali-57.gif ali-57.gif ali-58.gif ali-58.gif ali-59.gif ali-59.gif ali-60.gif ali-60.gif ali-61.gif ali-61.gif

    10. 1

      555

    11. 1

      1 ali-40.gif ali-40.gif ali-41.gif ali-41.gif ali-42.gif ali-42.gif ali-43.gif ali-43.gif ali-44.gif ali-44.gif ali-45.gif ali-45.gif ali-46.gif ali-46.gif ali-47.gif ali-47.gif ali-48.gif ali-48.gif ali-49.gif ali-49.gif ali-50.gif ali-50.gif ali-51.gif ali-51.gif ali-52.gif ali-52.gif ali-53.gif ali-53.gif ali-54.gif ali-54.gif ali-55.gif ali-55.gif ali-56.gif ali-56.gif ali-57.gif ali-57.gif ali-58.gif ali-58.gif ali-59.gif ali-59.gif ali-60.gif ali-60.gif ali-61.gif ali-61.gif

    12. 1

      1 ali-40.gif ali-40.gif ali-41.gif ali-41.gif ali-42.gif ali-42.gif ali-43.gif ali-43.gif ali-44.gif ali-44.gif ali-45.gif ali-45.gif ali-46.gif ali-46.gif ali-47.gif ali-47.gif ali-48.gif ali-48.gif ali-49.gif ali-49.gif ali-50.gif ali-50.gif ali-51.gif ali-51.gif ali-52.gif ali-52.gif ali-53.gif ali-53.gif ali-54.gif ali-54.gif ali-55.gif ali-55.gif ali-56.gif ali-56.gif ali-57.gif ali-57.gif ali-58.gif ali-58.gif ali-59.gif ali-59.gif ali-60.gif ali-60.gif ali-61.gif ali-61.gif

    13. 1

      1

    14. 1

      1

    15. 1

      555

    16. 1

      1

    17. 1

      1

    18. 1

      1

    19. 1

      1

    20. 1

      1

    21. 1

      1

    22. 1

      555

    23. 1

      1

    24. 1

      1

    25. 1

      555

    26. 1

      1

    27. 1

      555

    28. 1

      1

    29. 1

      1

    30. 1

      1

    31. 1

      1

    32. 1

      1

    33. 1

      1

    34. 1

      1

    35. 1

      1

    36. 1

      1

    37. 1

      1

    38. 1

      1

    39. 1

      1

    40. 1

      1

    添加新评论

    ali-40.gifali-41.gifali-42.gifali-43.gifali-44.gifali-45.gifali-46.gifali-47.gifali-48.gifali-49.gifali-50.gifali-51.gifali-52.gifali-53.gifali-54.gifali-55.gifali-56.gifali-57.gifali-58.gifali-59.gifali-60.gifali-61.gif