HTML5 canvas之基础篇(一)

一.检测浏览器是否支持canvas

if( !canvas || !canvas.getContext){
    return;
}

也可以使用modernizr.js库,Modernizr是一个易用的轻量级库,可以检测各种web技术的支持情况。

二.canvas的属性

主要属性id:id在Javascript代码中用来指定特定的<canvas>标签的名字; width:画布的宽度,以像素为单位; height:画布的高度,以像素为单位。

其他属性tableindex,  title,  class,  accesskeydir,  draggable,  hidden.

三.获取2D环境

通过调用Canvas对象的getContext()方法,可以获得HTML5 的2D环境对象(CanvasRenderingContext2D).该对象包含了在画布上绘图所需的所有方法和属性。画布的左上角为原点(0,0),坐标轴向下、向右为正方向。

获取了2D环境之后可以干什么呢?能做的事有很多,比如使用strokeStylefillStyle ,globalAlpha,  lineWidth,  lineCap,  linejoin,  miterLimitshadowOffsetX,

shadowOffsetY,  shadowBlur,  shadowColor,  globalfont,  CompositeOperationtextAligntextBaseline这些属性以及一些方法来制作游戏和动画。

四.使用canvas

.在html文档中的写法,通常是这样的:

<canvas id="canvas" width="500px" height="500px"></canvas>

注:对于canvas的宽和高,要在标签里定义,因为canvas的属性width和height和CSS里的width和height是不一样 的,canvas标签的width和height是画布实际宽度和高度,绘制的图形都是在这个上面。而css的width和height是canvas在 浏览器中被渲染的高度和宽度。但是可以利用css的width和height来缩放canvas。

在javascript里获取canvas对象及2D环境:

var theCanvas = document.getElementById("canvas");
var context = theCanvas.getContext("2D");

五.实际应用(猜字母游戏:计算机随机给出一个字母,用户猜给出的字母是什么,如果不对,会提示你猜的偏大还是偏小)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <canvas id="canvas" width="600" height="600"></canvas>
</body>
<script type="text/javascript">
    window.addEventListener("load" , eventWindowLoad, false);
    var Debugger = function() {};
    Debugger.log = function (message) { //输出信息调试
        try{
            console.log(message);
        }catch(exception){
            return;
        }
    }

    function eventWindowLoad() {
        canvasApp();
    }

    function canvasApp() {
        if( !canvas || !canvas.getContext ){
            return;
        }else{
            var theCanvas = document.getElementById("canvas");
            var context = theCanvas.getContext("2d");
            var guess = 0;
            var message
            var letters = [
            "a", "b", "c", "d", "e", "f","g","h","i", "j", "k", "l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"
            ];
            var today = new Date();
            var letterToGuess = "";
            var higherOrLower = "";
            var lettersGuessed;
            var gameOver = false;

            initGame();

            function initGame() {
                var letterIndex = Math.floor(Math.random()*letters.length);
                letterToGuess = letters[letterIndex];
                guess = 0;
                lettersGuessed = [];
                gameOver = false;
                window.addEventListener("keydown", eventKeyPressed, true);
                drawScreen();
            }

            function eventKeyPressed(e) {
                if(!gameOver){
                    var letterPressed = String.fromCharCode(e.keyCode);
                    letterPressed = letterPressed.toLowerCase();
                    guess++;
                    lettersGuessed.push(letterPressed);

                    if(letterPressed == letterToGuess){
                        gameOver = true;
                    }else{
                        letterIndex = letters.indexOf(letterToGuess);
                        guessIndex = letters.indexOf(letterPressed);

                        Debugger.log(guessIndex);
                        if(guessIndex < 0){
                            higherOrLower = "That is not a letter";
                        }else if(guessIndex >letterIndex){
                            higherOrLower = "Lower";
                        }else{
                            higherOrLower = "Higher";
                        }
                    }
                    drawScreen();
                }
            }
            function drawScreen() {
                context.fillStyle = "#ffffaa";
                context.fillRect(0, 0, 500, 300);

                context.strokeStyle = "#000000";
                context.strokeRect(5,5,490, 290);

                context.textBaseLine = "top";
                context.fillStyle = "#000000";
                context.font = "10px";
                context.fillText(today, 150, 10);

                context.fillStyle = "#ff0000";
                context.font = "14px";
                context.fillText(message, 125, 30);

                context.fillStyle = "#109910";
                context.font = "16px";
                context.fillText("Guesses:" + guess, 125, 50);

                context.fillStyle = "#000000";
                context.font = "16px";
                context.fillText("higherOrLower:" + higherOrLower, 150, 125);

                context.fillStyle = "#ff0000";
                context.font = "16px";
                context.fillText("Letter Guessed:" + lettersGuessed.toString(), 10, 260);

                if(gameOver){
                    context.fillStyle = "#ff0000";
                    context.font = "40px";
                    context.fillText ("You got it!", 150, 180);
                }
            }
        }
    }

</script>
</html>

上例用到的知识点:

context.fillStyle:定义填充的颜色;context.strokeStyle:定义填充边缘的颜色; context.fillRect(x, y,width,height):绘制一个矩形,x是绘制的矩形的左上角的x坐标,y是绘制的矩形的左上角的y坐标,width:是绘制的矩形的宽度,height是绘制的矩形的高度;context.font:定义绘制文本的字号 和 字体;context.textBaseLine:定义文本的对齐的基准线,取值有top,bottom,middle,hanging,ideographic; context.fillText(text, x, y):定义要绘制的文本,text是要绘制的文本内容,x是文本放置的x坐标,y是文本放置的y坐标。

时间: 2024-11-02 00:04:29

HTML5 canvas之基础篇(一)的相关文章

html5 canvas贝塞尔曲线篇(下)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

html5 canvas贝塞尔曲线篇(上)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

HTML5 Canvas(画布)实战编程初级篇:基本介绍和基础画布元素

欢迎大家阅读HTML5 Canvas(画布)实战编程初级篇系列,在这个系列中,我们将介绍最简单的HTML5画布编程.包括: 画布元素 绘制直线 绘制曲线 绘制路径 绘制图形 绘制颜色,渐变和图案 绘制图片 绘制文本 相关要求 环境要求:Google Chrome, Firefox, Safari, Opera, 或者 IE9以上的现代浏览器 编程要求:需要有基础的HTML和Javascript编程经验,相关的画布编程将调用Javascript API来处理 HTML Canvas基本元素 HTM

简介 jCanvas:当 jQuery遇上HTML5 Canvas

HTML5 可以直接在你的网页中使用 <canvas> 元素及其相关的 JavaScript API绘制的图形. 在这篇文章中,我将向你介绍 jCanvas,一个基于 jQuery的免费且开源的 HTML5的Canvas API. 如果你使用 jQuery 进行开发,jCanvas能够使用 jQuery更简单,更快速的完成一些非常炫酷的 canvas画布及交互效果. 什么是 jCanvas ? jCanvas 官网是这样解释的: "jCanvas is a JavaScript li

HTML5 程序设计 - 使用HTML5 Canvas API

请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方便查看. 学习笔记,纯手工码字,有错别字什么的请指出,觉得好的请点个赞小小的支持下.谢谢亲们. 本篇,我们将探索如何使用HTML5和Canvas API.Canvas API很酷,可以通过它来动态生成和展示图形.图表.图像以及动画. 本篇将使用渲染API(Rendering API)的基本功能来创建

html5 canvas 详细使用教程

导航 前言 基本知识 绘制矩形 清除矩形区域 圆弧 路径 绘制线段 绘制贝塞尔曲线 线性渐变 径向渐变(发散) 图形变形(平移.旋转.缩放) 矩阵变换(图形变形的机制) 图形组合 给图形绘制阴影 绘制图像(图片平铺.裁剪.像素处理[不只图像.包括其他绘制图形]) 绘制文字 保存和恢复状态(context) 保存文件 结合setInterval制作动画 结语.demo下载   前言 <canvas></canvas>是html5出现的新标签,像所有的dom对象一样它有自己本身的属性.

html5 Canvas绘制图形入门详解

html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome.Opera.Safari.IE9+)都已经开始支持html5了.除此之外,在移动浏览器市场上,众多的移动浏览器也纷纷展开关于「html5的支持能力以及性能表现」的军备竞赛.html作为革命性的网页技术标准,再加上众多浏览器厂商或组织的鼎力支持,可以想见,html5将会成为未来网页技术的领头羊. ht

如何使用 HTML5 Canvas 制作水波纹效果

原文:如何使用 HTML5 Canvas 制作水波纹效果 今天,我们继续分享 JavaScript 实现的效果例子,这篇文章会介绍使用 JavaScript 实现水波纹效果.水波效果以图片为背景,点击图片任意位置都会触发.有时候,我们使用普通的 Javascript 就可以创建一个很有趣的解决功能. 在线演示      源码下载 Step 1. HTML 和以前一样,首先是 HTML 代码: <!DOCTYPE html> <html> <head> <meta

html5 Canvas画图3:1px线条模糊问题

点击查看原文地址: html5 Canvas画图3:1px线条模糊问题 本文属于<html5 Canvas画图系列教程> 接上一篇canvas画线条教程 上次我们讲到,canvas有时候会出现1像素的线条模糊不清且好像更宽的情况,如下图: 这样的线条显然不是我们想要的. 这篇文章的目的就是弄清楚里面的原理,以及解决它. 大家都知道屏幕上最小的显示尺寸就是1像素,虽然小于1像素的东西可能显示不出来,但计算机可不管,他会试着画一下. 其实像素终究来说也是一个单位,假如我们把画布放大到足够大,足以看