Canvas 画布小案例

<script>
    window.onload = function () {
        draw(‘canvas1‘);
        draw(‘canvas2‘);
        draw(‘canvas3‘);
        draw(‘canvas4‘);
        draw(‘canvas5‘);
        draw(‘canvas6‘);
        draw(‘canvas7‘);
        draw(‘canvas8‘);
        draw(‘canvas9‘);
    };

    function draw(id) {
        var canvas = document.getElementById(id);
        if (canvas == null) {
            return false;
        }
        var context = canvas.getContext(‘2d‘);
        context.fillStyle = "#eeeeef";
        context.fillRect(0, 0, 400, 400);
        //形状渐变
        if (id == "canvas1") {
            for (var i = 0; i <= 6; i++) {
                context.beginPath();
                context.arc(i * 25, i * 25, i * 10, 0, Math.PI * 2, true);
                context.closePath();
                context.fillStyle = "rgba(255,0,0,0.25)";
                context.fill();
            }
        }
        //莲花形
        else if (id == "canvas2") {
            var dx = 150;
            var dy = 150;
            var s = 100;
            context.beginPath();
            context.fillStyle = "rgb(100,255,100)";
            context.strokeStyle = "rgb(0,0,100)";
            var x = Math.sin(0);
            var y = Math.cos(0);
            var dig = Math.PI / 15 * 11;
            for (var i = 0; i < 30; i++) {
                var x = Math.sin(i * dig);
                var y = Math.cos(i * dig);
                context.lineTo(dx + x * s, dy + y * s);
            }
            context.closePath();
            context.fill();
            context.stroke();
        }
        //贝塞尔曲线,从中心圆引出的线都是曲线
        else if (id == "canvas3") {
            var dx = 150;
            var dy = 150;
            var s = 100;
            context.beginPath();
            context.fillStyle = "rgb(100,255,100)";
            var x = Math.sin(0);
            var y = Math.cos(0);
            var dig = Math.PI / 15 * 11;
            for (var i = 0; i < 30; i++) {
                var x = Math.sin(i * dig);
                var y = Math.cos(i * dig);
                context.bezierCurveTo(dx + x * s, dy + y * s - 100, dx + x * s + 100, dy + y * s, dx + x * s, dy + y * s);
            }
            context.closePath();
            context.fill();
            context.stroke();
        }
        //颜色渐变
        else if (id == "canvas4") {
            var g1 = context.createLinearGradient(0, 0, 0, 300);
            g1.addColorStop(0, "rgb(255,255,0)");
            g1.addColorStop(1, "rgb(0,255,255)");
            context.fillStyle = g1;
            context.fillRect(0, 0, 500, 500);
            var g2 = context.createLinearGradient(0, 0, 300, 0);
            g2.addColorStop(0, "rgba(0,0,255,0.5)");
            g2.addColorStop(1, "rgba(255,0,0,0.5)");
            for (var i = 0; i < 10; i++) {
                context.beginPath();
                context.fillStyle = g2;
                context.arc(i * 25, i * 25, i * 10, 0, Math.PI * 2, true);
                context.closePath();
                context.fill();
            }
        }
        //径向渐变
        else if (id == "canvas5") {
            var g1 = context.createRadialGradient(400, 0, 0, 400, 0, 400);
            g1.addColorStop(0.1, "rgb(255,255,0)");
            g1.addColorStop(0.3, "rgb(255,0,255)");
            g1.addColorStop(1, "rgb(0,255,255)");
            context.fillStyle = g1;
            context.fillRect(0, 0, 500, 500);
        }
        //变形
        else if (id == "canvas6") {
            var canvas = document.getElementById(id);
            if (canvas == null) {
                return false;
            }
            var context = canvas.getContext("2d");
            context.fillStyle = "#eeeeef";
            context.fillRect(0, 0, 500, 500);
            context.translate(200, 50);
            context.fillStyle = "rgba(255,0,0,0.25)";
            for (var i = 0; i < 50; i++) {
                context.translate(25, 25);
                context.scale(0.95, 0.95);
                context.rotate(Math.PI / 10);
                context.fillRect(0, 0, 100, 50);
            }
        }
        //组合图形
        else if (id == "canvas7") {
            var oprtns = new Array(
            "source-atop",//只绘制原有图层中被新图层所覆盖的部分与新图层的其他部分,原有图层中的其他部分变成透明
            "source-in",//只显示重叠的部分,其他部分透明
            "source-out",//只显示不重叠的部分,其他部分透明
            "source-over",//表示新图层在原有图层之上
            "destination-atop",
            "destination-in",
            "destination-out",
            "destination-over",
            "lighter",//原图层和新图层均绘制,重叠部分做加色处理
            "copy",//只绘制新图层,原图层中未与新图层重叠的部分变成透明
            "xor"//只绘制不重叠部分
            );
            i = 8;
            context.fillStyle = "blue";
            context.fillRect(10, 10, 60, 60);
            context.globalCompositeOperation = oprtns[i];
            context.beginPath();
            context.fillStyle = "red";
            context.arc(60, 60, 30, Math.PI * 2, false);
            context.fill();
        }
        //阴影图形
        else if (id == "canvas8") {
            context.fillStyle = "#eeeeef";
            context.fillRect(0, 0, 500, 500);
            context.shadowOffsetX = 10;
            context.shadowOffsetY = 10;
            context.shadowColor = "rgba(100,100,100,0.5)";
            context.shadowBlur = 3.5;
            for (var i = 0; i < 3; i++) {
                context.translate(100, 100)
                Create5Star(context);
                context.fill();
            }
        }
        //复制图片
        else if (id == "canvas9") {
            context.fillStyle = "#ffffff";
            context.fillRect(0, 0, 500, 500);
            var image = new Image();
            image.src = "/images/1.jpg";
            image.onload = function () {
                drawImage(context, image);
            }
        }
    }

    //绘制图片
    function drawImage(context, image) {
        //从(0,0)开始绘制
        //context.drawImage(image, 0, 0);

        //从(0,0)开始绘制,大小为200*200
        context.drawImage(image, 0, 0, 200, 200);

        //drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh)
        //drawImage(img对象,原图被复制区域的起始坐标和宽高,复制区域在画布上的起始坐标和宽高)
        context.drawImage(image, 200,200,380,380,230,230,250,250);
    }

    //创建五角星
    function Create5Star(context) {
        var dx = 20;
        var dy = 0;
        var s = 50;
        context.beginPath();
        context.fillStyle = "rgba(255,0,0,0.5)";
        var x = Math.sin(0);
        var y = Math.cos(0);
        var dig = Math.PI / 5 * 4;
        for (var i = 0; i < 5; i++) {
            var x = Math.sin(i * dig);
            var y = Math.cos(i * dig);
            context.lineTo(dx + x * s, dy + y * s);
        }
        context.closePath();
    }
</script>

以上是用Canvas实现的简单图形,强大的Canvas还有很多功能以后再慢慢学习吧。

时间: 2024-08-27 09:17:29

Canvas 画布小案例的相关文章

JavaScript之Canvas画布

canvas可以在页面中设定一个区域,再利用JavaScript动态地绘制图像. 基本用法 使用canvas元素,首先设置width和height属性,为其设置绘制区域的大小,   如果没有设置宽度和高度,是看不到元素的,不能在其区域画图,在开始标签和结束标签之间的信息是后备信息,当用户的浏览器不支持canvas元素时会显示,用于友好地提示用户. <canvas id="canvas" width="400" height="300">

第六章 一张白纸好作画—Canvas画布(1)

第六章 一张白纸好作画-Canvas画布 前面的相关章节,我们详细说明过Android UI组件的使用.通过前面章节的学习,开发者已经可以开发出令人满意的UI效果了.但是有的时候,我们需要实现更加漂亮的UI效果,此时可能就无法直接使用UI组件,而是需要自己画出各种UI效果了. 在Android中,Canvas就是一个画布,开发者可以在画布上绘制想要的任何东西.在本章中,我们将介绍Canvas及相关的技术. 6.1 Canvas画布介绍 6.1.1View Canvas-使用普通View的Canv

CANVAS画布与SVG的区别

CANVAS是html5提供的新元素<canvas>,而svg存在的历史要比canvas久远,svg并不是html5专有的标签,最初svg是用xml技术(超文本扩展语言,可以自定义标签或属性)描述二维图形的语言.在H5中看似canvas与svg很像,但是,他们有巨大的差别. CANVAS Canvas 是通过 JavaScript 来绘制 2D 图形. Canvas 是逐像素进行渲染的. 在Canvas中,一旦图形被绘制完成,他就不会继续得到浏览器的关注,如果他的位置发生变化,那么就需要重新来

使用canvas画布利用js通过鼠标实现矩形的绘制(任意方向的绘制图形)

## 使用canvas画布利用js通过鼠标实现矩形的绘制(任意方向的绘制图形)(如果要绘制其他图形,做一点小改动就行了) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> #cav{ position

Windows Server之浅谈SMB以及SMB小案例分享

SMB由来 服务器消息区块(英语:Server Message Block,缩写为SMB,服务器消息区块),又称网络文件共享系统(英语:Common Internet File System,缩写为CIFS),一种应用层网络传输协议,由微软开发,主要功能是使网络上的机器能够计算机文件.打印机.串行端口和通讯等资源.它也提供经认证的进程间通信机能.它主要用在装有Microsoft Windows的机器上,在这样的机器上被称为Microsoft Windows Network. SMB版本 OS W

Thinkphp 生成订单号小案例

Thinkphp 生成订单号小案例小伙伴们在日常的商城项目开发中,都会遇到订单号生成的问题,今天呢思梦PHP就带领大家去解读一下生成订单号的问题!首先,订单号我们要明确它有有3个性质:1.唯一性 2.不可推测性 3.效率性,唯一性和不可推测性不用说了,效率性是指不能频繁的去数据库查询以避免重复.况且满足这些条件的同时订单号还要足够的短.不知道小伙伴们在日常的项目中是否也和我一样去思考过生成订单的一些小问题,可能你也会说,这些东西不用想的那么复杂,其实呢,小编也是同意大家的看法,但是殊不知我们做程

将Canvas画布内容保存为jpg格式图片

/// <summary>        /// 功能:将Canvas画布内容保存为jpg格式图片        /// 作者:GYS | 日期:2013年9月9日        /// </summary>        /// <param name="filePath"></param>        /// <param name="pixBox"></param>        pri

几个数据库的小案例(一):将文本文件中的信息导入数据库的表中

从文本文件添加到数据库用户表的记录(有两个文件:frmMain.cs  SqlHelper.cs  ) //FrmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo

Java小案例(行星移动)

Java小案例 行星移动:参考:三百集 使用软件:idea2017,java 1,图片集:这里  (idea图片源放在target目录下,才能访问到),建议从小往上看... 2,定义MyFrame package my.university; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class MyFrame extends Frame {