HTML5 canvas学习笔记(一)

news/2025/2/27 5:18:13

canvas是HTML5中新增的标签,下面是各浏览器的支持程度:

 

canvas的默认大小为:宽-300px,高-150px(注意:画布的大小作为canvas标签的行内样式设置,而且是没有“px”单位的哦,  如果你在canvas的css样式中给它设置大小,它只会当做放大比例来处理!),下面这段代码在支持canvas的浏览器中会显示一块400px400px的白色(默认颜色)画布,在不支持canvas的浏览器中只是显示canvas中的文字而已哦。 

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Canvas</title>
    <style type="text/css">
    body{ background:gray;}    
    #c1{ background:white;}
    </style>
</head>
<body>
    <!-- 默认宽300, 高150 -->
    <canvas id="c1" width="400" height="400">
        你的浏览器不支持canvas..
    </canvas>
</body>
</html>

 下面我们在刚刚创建的画布中画一个带有边框的矩形:

var oC = document.getElementById("c1");

        var oGC = oC.getContext('2d');    //创建一个绘图环境

        oGC.fillStyle = 'red';    //设置填充样式
        oGC.strokeStyle = 'blue';    //设置表框样式
        oGC.lineWidth = 10;    //设置边框的大小
        oGC.lineJoin = 'round';    //端点的样式-圆角
        //oGC.lineJoin = 'bevel';    //斜线
        
        oGC.fillRect(50, 50, 100, 100);    //在50,50处画一个矩形,并填充它
        oGC.strokeRect(50.5, 50.5, 100, 100);    //在来画个边框

 

 效果图见:http://runjs.cn/code/vvdbykgz

 不知道大家注意到没有,上面代码中最后一行oGC.strokeRect(50.5, 50.5, 100, 100);为什么起始坐标还要加上个0.5像素?这是因为如果边框长度是1像素的话,他从50,50开始两边各占0.5,这个0.5像素给浏览器是不好显示的,所以浏览器只好各边给你一个像素,结果最后就是2个像素的宽度了,这就是为什么要加那0.5个像素了。

 

我们还可以绘制两个或多个图形, 通过binginPath()和closePath()来控制路径:

        var oC = document.getElementById("c1");

        var oGC = oC.getContext('2d');
        
        oGC.beginPath();
        oGC.moveTo(100, 100);
        oGC.lineTo(200, 200);
        oGC.lineTo(300, 200);
        oGC.closePath();
        oGC.stroke();

        oGC.beginPath();
        oGC.moveTo(100, 200);
        oGC.lineTo(200, 300);
        oGC.lineTo(300, 300);
        oGC.closePath();
        oGC.fill();

 效果图见:http://runjs.cn/code/lmrv8iuo

 

通过clearRect()可以清除画布中某个区域的数据,我们再结合定时器可以创建一个方块移动的效果:

var oC = document.getElementById("c1");

var oGC = oC.getContext('2d');

var num = 0;
oGC.fillRect(0, 0, 100, 100);

setInterval(function(){
    num++;
    oGC.clearRect(0, 0, oC.width, oC.height);
    oGC.fillRect(num, num, 100, 100);
}, 30);

 

效果图见:http://runjs.cn/code/prkby9xp

 

转载于:https://www.cnblogs.com/MockingBirdHome/p/3346073.html


http://www.niftyadmin.cn/n/2521316.html

相关文章

RMAN 不完全恢复

之前做好备份 SQL> conn scott/abc123 SQL> alter session set nls_date_formatyyyy-mm-dd hh24:mi:ss; 2012-04-24 10:10:53 SQL> select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual; SYSDATE ------------------- 2012-03-12 01:28:15 SQL> drop table …

Percona TokuDB

Percona TokuDB Percona TokuDB 1. TokuDB说明 2. TokuDB安装 3. 使用TokuDB 3.1 快速插入和富索引 3.2 聚集secondary索引 3.3 在线索引创建 3.4 在线添加&#xff0c;删除&#xff0c;扩展&#xff0c;重命名列 3.5 压缩细节 3.6 修改表的压缩 3.7 无…

配置ELK日志系统

ELK 介绍 ELK [官网]&#xff08;https://www.elastic.co/&#xff09; ELK&#xff08;elasticsearch&#xff0c;logstash&#xff0c;kibana&#xff09;可以作为日志收集及分析的一整套系统&#xff0c;通过阿里的普及也有越来越多的公司在使用&#xff0c;使用下来功能还…

Round #204 div1 A/div 2 C :::: Jeff and Rounding

题目的大意是给你2*n个浮点数&#xff0c;要求你选出n对浮点数&#xff0c;每一对浮点数其中一个数取上限&#xff0c;另一个数取下限&#xff0c;然后求2*n个处理后浮点数的和与处理前浮点数的和的差的绝对值。即min |(a1a2.....an)-([ai1aj1][ai2aj2].....[ainajn])|&#xf…

Mousejack测试指南

0x00 前言 近日&#xff0c;Bastille的研究团队发现了一种针对蓝牙键盘鼠标的攻击&#xff0c;攻击者可以利用漏洞控制电脑操作&#xff0c;他们将此攻击命名为MouseJack。 攻击者仅需要在亚马逊上以60美元购买设备&#xff0c;改造之后即可对百米范围内存在漏洞的蓝牙无线键鼠…

第三章例3-11

/* 求解简单的四则运算表达式 */ #include<stdio.h> int main(void) {double value1,value2;char op;printf("Type in an expression:");scanf_s("%lf%c%lf",&value1,&op,&value2);if(op)printf("%.2f\n",value1value2);else …

Telnet 的使用以及遇到连接不上的问题解决

Telnet&#xff0c;是系统管理员登录远程服务器的一种协议和工具语法 telnet <hostname or IP> <port>使用telnet 的错误原因 Error 1 - 连接挂起 telnet my.example.com 80 Trying 121.89.217.5...这意味着 telnet 没有收到任何回应来建立连接。有两个可能的原…

心得与体会1

初接触C语言&#xff1a; 初始会遇到很多问题与常见错误&#xff0c;我们在建立新程序时应选择Win32 console Application&#xff0c;这一点许多人会不知而直接使用第一个&#xff0c;结果就导致程序无法运行&#xff0c;但代码可以打出无错误。 然后&#xff0c;编写C时要记住…