读书计算,学习笔记

GCanvas 渲染引擎介绍

2017/07/31 · HTML5 ·
Canvas

初稿出处: 天猫前端团队(FED)-
韦青   

澳门葡京 1

GCanvas 提供了一套类似于 H5 Canvas 标准的 JavaScript API。基于那套 API
可以便宜的去做图形绘制、动画渲染等,开发的感受与 H5 Canvas
是一心相同的。

HTML5 学习笔记(四)——canvas绘图、WebGL、SVG,html5webgl

HTML5 学习计算(四)——canvas绘图、WebGL、SVG,html5webgl

转自原文 有关于OpenGL、OpenGL
ES、WebGL的小结

GCanvas 介绍

GCanvas发展经验了三个阶段。

  • 先是品级,2014 年中到 2015 年初,解决 Android 平台 WebView Canvas
    渲染质量差的题材。
  • 其次阶段,2016 年 11 月到前日,为前端提供 Native 图形绘制能力。

用一句话来概括 GCanvas,即根据 W3C
标准,移动端的跨平台的高品质图形渲染引擎。可以从多少个地点来表明。

  • 遵循 W3C 标准
    GCanvas 提供了一套类似于 H5 Canvas 标准的 JavaScript
    API,开发人士基于那套 API
    可以一本万利的去做图形绘制、动画渲染等。开发的经验与 H5 Canvas
    是完全相同的。
  • 跨平台
    GCanvas 的木本基于 OpenGL ES, 用 C++ 已毕了一套用于描述 Canvas 标准
    API
    的接口完结。大家将其誉为渲染引擎内核。并由此交叉编译,使得可以适配
    Android、iOS 那两大主流移动平台,由此具有跨平台的特色。
  • 高性能
    早期移动平台上 H5 Canvas 去做一些复杂的卡通片或娱乐,在 WebView
    上的体验很是差。 首要缘由是 WebView 对 GPU
    硬件加快的匡助差。高品质则是丰硕利用了 GPU
    硬件的渲染能力,首要反映五个地点:

    • 对此 Android 3.0 以前的系统,Android
      的渲染管线是不帮衬硬件加快的,WebView 中的 Canvas 无法得到 GPU
      的图片渲染能力的帮助。对于这类系统,通过 GCanvas
      可以博得更底层的 OpenGL ES 的硬件加速能力压实渲染作用。
    • 链路上来看,减弱了调用路径,进步了渲染品质。使用了 GCanvas
      则不须要通过 WebView 内部的扑朔迷离逻辑处理和图层树渲染,而是让
      JavaScript 通过桥接格局一贯调用渲染引擎内核(OpenGL ES)。

一、Canvas

澳门葡京 ,canvas是HTML5中新增一个HTML5标签与操作canvas的javascript
API,它可以完毕在网页中成功动态的2D与3D图像技术。<canvas> 标记和
SVG以及 VML 之间的一个要害的不比是,<canvas> 有一个依据 JavaScript
的绘图 API,而 SVG 和 VML 使用一个 XML 文档来讲述绘图。SVG
绘图很简单编辑与转移,但作用肯定要弱一些。

canvas可以做到动画、游戏、图表、图像处理等原来需求Flash完毕的部分效果。、

浏览器协助境况如下:

澳门葡京 2

一、Canvas

canvas是HTML5中新增一个HTML5标签与操作canvas的javascript
API,它能够兑现在网页中达成动态的2D与3D图像技术。<canvas> 标记和
SVG以及 VML 之间的一个至关首要的不等是,<canvas> 有一个基于 JavaScript
的绘图 API,而 SVG 和 VML 使用一个 XML 文档来描述绘图。SVG
绘图很不难编辑与变化,但作用明显要弱一些。

canvas可以落成动画、游戏、图表、图像处理等原来必要Flash完结的一对效果。、

浏览器协理情形如下:

澳门葡京 3

一.   OpenGL简介

  OpenGL(全写Open Graphics
Library)是个概念了一个跨编程语言、跨平台的编程接口的规格,它用于三维图西象(二维的可以)。OpenGL是个规范的图纸程序接口,是一个成效强大,调用方便的底部图形库。

  关于任何的介绍我就不说了。那边我说一下有OpenGL的资源网站:

  OpenGL官网:

  NeHe网站:

  优良的OpenGL教程:

 

GCanvas 组成

澳门葡京 4

如上图所示 GCanvas 由三层组成 JavaScript 层、插件层、焦点渲染库。

  • JavaScript 层
    JavaScript 提供对外统一的 API,协理 Canvas 2D 和 WebGL
    的功效接口。接口支持意况请参考 API
    覆盖。
  • 插件层
    插件层焦点包括三有些。

    • Bridge 桥接
      JavaScript 到 Native 的桥接,比较主流的措施 JSBridge 和
      JSBinding。JSBridge 落成格局,如 Cordva、WebviewJavascriptBridge
      等。 仍可以用 JSBinding 格局来已毕,如 V8、JavascriptCore
      等。实际的施用场景中那三种桥接形式都有协理。
    • 通用插件
      通用插件包罗了通用插件接口与落到实处、GCanvas
      的军事管制、渲染命令队列管理、纹理缓存等。帮忙不一样系列桥接形式下的壮大。
    • 系统适配
      系统适配涉及 Android 和 iOS 对 OpenGL ES
      达成的出入,互联网图片下载,字体渲染等方面。
  • 焦点渲染库
    主干渲染库包涵对外统一的接口,以及 Contex2D 和 WebGL
    模块,底层则是对 OpenGL ES API 等分装。

1.1、创建canvas元素

<canvas id=”can” width=”800″
 height=”600″>不支持Canvas</canvas>

如上代码创制了一个开间为800像素,高度为600像素的canvas。不指出利用CSS样式指定宽度和可观。
canvas标签中间的内容为代表突显内容,当浏览器不帮忙canvas标签时会彰显出来。

开创了canvas元素后,要在canvas元素上边绘制图象,首先必须得到canvas环境上下文:
canvas.getContext(画布上制图的项目)
2d: 表示2维
experimental-webgl: 表示试验版3维
webgl:表示3维

Hello Wolrd示例代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>canvas绘图1</title>
    </head>
    <body>
        <canvas id="canvas1" width="800" height="600"></canvas>
        <script type="text/javascript">
           //获得画布元素
            var canvas1=document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx=canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth=10;
            //设置线的颜色
            ctx.strokeStyle="blue";

            //将画笔移动到00点
            ctx.moveTo(0,0);
            //画线到800,600的坐标
            ctx.lineTo(800,600);

            //执行画线
            ctx.stroke();
        </script>
    </body>
</html>

运转效果:

澳门葡京 5

在页面上就显示了一条直线,另存为后就是一张背景透明的png图片。

勤学苦练:画一个100X100的正方形在画布正中心

1.1、创建canvas元素

<canvas id=”can” width=”800″
 height=”600″>不支持Canvas</canvas>

以上代码成立了一个宽度为800像素,高度为600像素的canvas。不提议接纳CSS样式指定宽度和冲天。
canvas标签中间的始末为代表突显内容,当浏览器不支持canvas标签时会展现出来。

始建了canvas元素后,要在canvas元素上面绘制图象,首先必须得到canvas环境上下文:
canvas.getContext(画布上制图的门类)
2d: 表示2维
experimental-webgl: 表示试验版3维
webgl:表示3维

Hello Wolrd示例代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>canvas绘图1</title>
    </head>
    <body>
        <canvas id="canvas1" width="800" height="600"></canvas>
        <script type="text/javascript">
           //获得画布元素
            var canvas1=document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx=canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth=10;
            //设置线的颜色
            ctx.strokeStyle="blue";

            //将画笔移动到00点
            ctx.moveTo(0,0);
            //画线到800,600的坐标
            ctx.lineTo(800,600);

            //执行画线
            ctx.stroke();
        </script>
    </body>
</html>

运作效果:

澳门葡京 6

在页面上就浮现了一条直线,另存为后就是一张背景透明的png图片。

勤学苦练:画一个100X100的正方形在画布正主旨

二.   OpenGL ES

GCanvas 流程

澳门葡京 7

上图是 JavaScript 层渲染主题库的概要流程,关键的多个流程是初叶化和渲染。

  • 初始化
    开始化,JavaSript
    层获取配置判断运行环境,通过桥接层,插件层已毕视图和 GCanvas
    的制造。进一步形成对 OpenGL 环境的初阶化。
  • 渲染
    渲染,JavaScript
    层将装有的API调用托管,并且转换成自定义的下令格式(命令类型 +
    参数的组成)。渲染触发则由 JavaScript
    定时器触发或者手动触发的办法,将那么些命令颁发到渲染大旨库执行。

以 Weex 为例, 绘制图形和图表的测试代码如下。

JavaScript

<template> <div ref=”test”> <gcanvas ref=”canvas_holder”
style=”width:750; height:750; background-color:rgba(0, 0, 0,
0.1)”></gcanvas> </div> </template> <script>
var GCanvas=require(‘weex-gcanvas’); var
Image=require(‘weex-gcanvas/gcanvasimage’); module.exports = { mounted:
function () { //1、初始化 GCanvas var ref = this.$refs.canvas_holder;
var gcanvas = GCanvas.start(ref); var ctx = gcanvas.getContext(‘2d’);
//2、执行渲染操作 //rect ctx.fillStyle = ‘red’; ctx.fillRect(0, 0, 100,
100); //rect ctx.fillStyle = ‘black’; ctx.fillRect(100, 100, 100, 100);
ctx.fillRect(25, 210, 700, 5); //circle ctx.arc(450, 200, 100, 0,
Math.PI * 2, true); ctx.fill(); //drawImage var image = new Image();
image.onload = function(){ ctx.drawImage(image, 100, 330);
ctx.drawImage(image, 100+300, 330, 225, 75); } image.src =
”;
} }; </script>

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
<template>
<div ref="test">
<gcanvas ref="canvas_holder" style="width:750; height:750; background-color:rgba(0, 0, 0, 0.1)"></gcanvas>
</div>
</template>
<script>
var GCanvas=require(‘weex-gcanvas’);
var Image=require(‘weex-gcanvas/gcanvasimage’);
module.exports = {
mounted: function () {
  
  //1、初始化 GCanvas
var ref = this.$refs.canvas_holder;
var gcanvas = GCanvas.start(ref);
var ctx = gcanvas.getContext(‘2d’);
//2、执行渲染操作
//rect
ctx.fillStyle = ‘red’;
ctx.fillRect(0, 0, 100, 100);
 
//rect
ctx.fillStyle = ‘black’;
ctx.fillRect(100, 100, 100, 100);
ctx.fillRect(25, 210, 700, 5);
 
//circle
ctx.arc(450, 200, 100, 0, Math.PI * 2, true);
ctx.fill();
 
//drawImage
var image = new Image();
image.onload = function(){
ctx.drawImage(image, 100, 330);
ctx.drawImage(image, 100+300, 330, 225, 75);
}
image.src = ‘https://www.khronos.org/assets/uploads/ceimg/made/assets/uploads/apis/OpenGL-ES_100px_May16_225_75.png’;
}
};
</script>

透过 Weex Playground 运行结果如下

澳门葡京 8

具体分析下整个流程。结合插件层和主导渲染库来分析。

  • 插件层流程
    以 iOS 为例分析,Android 的进程是看似的。

    • GLKView 视图创造,并且与 GCanvas 对象建立绑定关系;
    • GCVCommon,资源加载与纹理绑定;
    • GCanvasPlugin,设置义务新闻、设备比率、下发渲染命令;
  • 渲染库流程

澳门葡京 9

渲染命令的剖析,最终通过调用 OpenGL ES 的章程或结成方式来落实 Context2D
和 WebGL 的职能,生成帧缓存,提交给 GPU 渲染,最终在绑定的 GLKView
视图上显得。

  • Context2D,要求贯彻诸如 GPath、GTexture、GTransform、GTriangulate
    等来促成 Canvas 的渲染效果;
  • WebGL 相对不难,WebGL1.0 的 API 基本都能与从 OpenGL ES2.0
    找到与之相呼应的 API;

1.2、画线

context.moveTo(x,y)

把画笔移动到x,y坐标,建立新的子路径。

context.lineTo(x,y)
确立上一个点到x,y坐标的直线,若是没有上一个点,则一律moveTo(x,y),把(x,y)添加到子路径中。

context.stroke()
描绘子路径

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle = "blue";
            //将画笔移到x0,y0处
            context.moveTo(x0, y0);
            //从x0,y0到x1,y1画一条线
            ontext.lineTo(x1, y1);
            //从x1,y1到x2,y2画条线
            ontext.lineTo(x2, y2);
            //执行填充
            ontext.fill();
            //执行画线
            context.stroke();

 澳门葡京 10

整合javascript事件完毕鼠标自由划线:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>canvas绘图2</title>
    </head>

    <body>
        <canvas id="canvas1" width="800" height="600"></canvas>
        <script type="text/javascript">
            //获得画布元素
            var canvas1 = document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx = canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle = "blue";

            canvas1.onmousemove=function(e){
                //划线到当前客户端的x与y座标
                ctx.lineTo(e.clientX, e.clientY);
                //执行画线
                ctx.stroke();
            }
        </script>
    </body>

</html>

运作效果:

澳门葡京 11

举手投足手机端:

澳门葡京 12<!DOCTYPE
html> <html> <head> <meta charset=”utf-8″>
<title></title> <meta name=”viewport”
content=”width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no”
/> <script> var canvas1; var ctx; var width; var height; var
msg; window.onload = function() { canvas1 =
document.getElementById(“canvas1”); msg =
document.getElementById(“msg”); ctx = canvas1.getContext(“2d”); width =
canvas1.width; height = canvas1.height; ctx.fillRect(0, 0, width,
height); ctx.moveTo(0, 0); ctx.lineTo(100, 100); ctx.strokeStyle =
“red”; ctx.lineWidth = 2; ctx.stroke(); canvas1.onmousemove =
function(e) { ctx.lineTo(e.clientX, e.clientY); ctx.stroke(); }
canvas1.ontouchmove = function(e) { e.preventDefault(); var
touchE=e.targetTouches[0] msg.innerHTML +=
touchE.clientX+”,”+touchE.clientY+ “<br/>”;
ctx.lineTo(touchE.clientX, touchE.clientY); ctx.stroke(); }
canvas1.ontouchstart = function() { msg.innerHTML += “ontouchstart” +
“<br/>”; } canvas1.ontouchend = function() { msg.innerHTML +=
“ontouchend” + “<br/>”; } } </script> </head>
<body> <canvas id=”canvas1″ width=”500″
height=”500″>不支持</canvas> <div id=”msg”></div>
</body> </html> View
Code

1.2.1、路径与closePath,beginPath,fill

canvas的环境上下文中总有唯一一个路径,路径包蕴三个子路径,这一个子路径可以当做是一名目繁多点的会聚。
beginPath()

清空子路径,一般用于初叶路径的创制。在五遍巡回地创造路径的经过中,每趟初始创办时都要调用beginPath函数。

closePath()

要是当前子路径是打开的,就关门它。否则把子路径中的最后一个点和途径中的第二个点连接起来,形成闭合回路。

canvas绘图有三种格局,一种是fill,一种是stroke,fill是填充,stroke是描边线,fillstyle,strokeStyle指定绘图样式

演示代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>路径与closePath,beginPath,fill</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <script type="text/javascript">
            //获得画布元素
            var canvas1 = document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx = canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle = "blue";

            ctx.moveTo(0,0);  //移动画笔到0,0点
            ctx.lineTo(300,300);  //画线到300,300的位置
            ctx.stroke();  //执行描边

            ctx.beginPath();  //清空子路径,一般用于开始路径的创建
            ctx.strokeStyle = "red";
            ctx.moveTo(300,300);
            ctx.lineTo(0,595);  //画线到0,300的位置
            ctx.lineTo(595,595);  //画线到右下角
            ctx.closePath();  //闭合
            //ctx.stroke();  //执行描边
            ctx.fillStyle="lightgreen";  //设置填充颜色
            ctx.fill();  //执行填充
        </script>
    </body>
</html>

运转效果:

澳门葡京 13

勤学苦练:试着姣好一个象棋或围棋棋盘。

澳门葡京 14

1.2、画线

context.moveTo(x,y)

把画笔移动到x,y坐标,建立新的子路径。

context.lineTo(x,y)
确立上一个点到x,y坐标的直线,倘诺没有上一个点,则同样moveTo(x,y),把(x,y)添加到子路径中。

context.stroke()
描绘子路径

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle = "blue";
            //将画笔移到x0,y0处
            context.moveTo(x0, y0);
            //从x0,y0到x1,y1画一条线
            ontext.lineTo(x1, y1);
            //从x1,y1到x2,y2画条线
            ontext.lineTo(x2, y2);
            //执行填充
            ontext.fill();
            //执行画线
            context.stroke();

 澳门葡京 15

组成javascript事件完毕鼠标自由划线:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>canvas绘图2</title>
    </head>

    <body>
        <canvas id="canvas1" width="800" height="600"></canvas>
        <script type="text/javascript">
            //获得画布元素
            var canvas1 = document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx = canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle = "blue";

            canvas1.onmousemove=function(e){
                //划线到当前客户端的x与y座标
                ctx.lineTo(e.clientX, e.clientY);
                //执行画线
                ctx.stroke();
            }
        </script>
    </body>

</html>

运转效果:

澳门葡京 16

活出手机端:

澳门葡京 17<!DOCTYPE
html> <html> <head> <meta charset=”utf-8″>
<title></title> <meta name=”viewport”
content=”width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no”
/> <script> var canvas1; var ctx; var width; var height; var
msg; window.onload = function() { canvas1 =
document.getElementById(“canvas1”); msg =
document.getElementById(“msg”); ctx = canvas1.getContext(“2d”); width =
canvas1.width; height = canvas1.height; ctx.fillRect(0, 0, width,
height); ctx.moveTo(0, 0); ctx.lineTo(100, 100); ctx.strokeStyle =
“red”; ctx.lineWidth = 2; ctx.stroke(); canvas1.onmousemove =
function(e) { ctx.lineTo(e.clientX, e.clientY); ctx.stroke(); }
canvas1.ontouchmove = function(e) { e.preventDefault(); var
touchE=e.targetTouches[0] msg.innerHTML +=
touchE.clientX+”,”+touchE.clientY+ “<br/>”;
ctx.lineTo(touchE.clientX, touchE.clientY); ctx.stroke(); }
canvas1.ontouchstart = function() { msg.innerHTML += “ontouchstart” +
“<br/>”; } canvas1.ontouchend = function() { msg.innerHTML +=
“ontouchend” + “<br/>”; } } </script> </head>
<body> <canvas id=”canvas1″ width=”500″
height=”500″>不支持</canvas> <div id=”msg”></div>
</body> </html> View
Code

1.2.1、路径与closePath,beginPath,fill

canvas的环境上下文中总有唯一一个路子,路径包罗三个子路径,这一个子路径可以当做是一名目繁多点的集纳。
beginPath()

清空子路径,一般用于开始路径的始建。在一遍巡回地成立路径的经过中,每一遍早先创办时都要调用beginPath函数。

closePath()

假使当前子路径是开辟的,就倒闭它。否则把子路径中的最终一个点和路径中的首个点连接起来,形成闭合回路。

canvas绘图有三种情势,一种是fill,一种是stroke,fill是填充,stroke是描边线,fillstyle,strokeStyle指定绘图样式

示范代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>路径与closePath,beginPath,fill</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <script type="text/javascript">
            //获得画布元素
            var canvas1 = document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx = canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle = "blue";

            ctx.moveTo(0,0);  //移动画笔到0,0点
            ctx.lineTo(300,300);  //画线到300,300的位置
            ctx.stroke();  //执行描边

            ctx.beginPath();  //清空子路径,一般用于开始路径的创建
            ctx.strokeStyle = "red";
            ctx.moveTo(300,300);
            ctx.lineTo(0,595);  //画线到0,300的位置
            ctx.lineTo(595,595);  //画线到右下角
            ctx.closePath();  //闭合
            //ctx.stroke();  //执行描边
            ctx.fillStyle="lightgreen";  //设置填充颜色
            ctx.fill();  //执行填充
        </script>
    </body>
</html>

运行效果:

澳门葡京 18

磨练:试着完成一个象棋或围棋棋盘。

澳门葡京 19

1. OpenGL ES简介

        可以如此说,OpenGL
ES是OpenGL的嵌入式本子,OpenGL
ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API
的子集,针对手机、PDA和游玩主机等嵌入式设备而设计。该API由Khronos集团概念推广,Khronos是一个图形软硬件行业组织,该社团第一关切图形和多媒体方面的开放标准。

读书计算,学习笔记。        OpenGL
ES的本子差距,主要有八个版本,一个是OpenGL ES 1.X,一个是OpenGL ES
2.0本子,2.0的版本是不般配1.x版本,因为一个是永恒功效的管线(1.x),别的2.0是可编程功效管线,所以广大都分歧,来看看百科是怎么介绍的。OpenGL
ES 是从 OpenGL 裁剪的定制而来的,去除了
glBegin/glEnd,四边形(GL_QUADS)、多边形(GL_POLYGONS)等复杂图元等重重非相对须要的性状。经过长年累月更上一层楼,现在首要有三个版本,OpenGL
ES 1.x 针对固定管线硬件的,OpenGL ES 2.x 针对可编程管线硬件。OpenGL ES
1.0 是以 OpenGL 1.3 规范为底蕴的,OpenGL ES 1.1 是以 OpenGL 1.5
规范为底蕴的,它们分别又扶助
common 和 common
lite三种profile。lite profile只支持定点实数,而common
profile既帮衬定点数又协助浮点数。 OpenGL ES 2.0 则是参考 OpenGL 2.0
规范定义的,common profile发表于2005-8,引入了对可编程管线的支撑。

 

GCanvas 测试例子

上面给出一些 GCanvas 的案例。

  • GCanvas 与 H5 Canvas 质量相比

澳门葡京 20

  • Android 平台,左侧是 GCanvas,左边是 H5
    Canvas。同屏渲染图片更多,质量差别越鲜明。
  • Hilo 2D
    100
    条鱼依照Hilo 2D 动画库,满屏鱼的动画测试。
  • Chart 图标渲染
    Chart
    图标库的渲染效果据悉图表库,差异类型的图纸渲染测试。

1.3、绘制矩形

context.strokeRect(x,y,width,height)
以x,y为左上角,绘制宽度为width,中度为height的矩形。

context.fillRect(x,y,width,height)
以x,y为左上角,填充宽度为width,高度为height的矩形。

context.clearRect(x,y,width,height)
铲除以x,y为左上角,宽度为width,高度为height的矩形区域。

演示代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>绘制矩形</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <script type="text/javascript">
            //获得画布元素
            var canvas1 = document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx = canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle ="dodgerblue";

            //画一个空心的矩形,
            ctx.strokeRect(0,0,600,600);

            //画一个实心矩形
            ctx.fillStyle="aquamarine";
            ctx.fillRect(200,200,200,200);

            //清除指定的矩形区域
            ctx.clearRect(250,250,100,100);
        </script>
    </body>
</html>

运行效果: 

澳门葡京 21

1.3、绘制矩形

context.strokeRect(x,y,width,height)
以x,y为左上角,绘制宽度为width,高度为height的矩形。

context.fillRect(x,y,width,height)
以x,y为左上角,填充宽度为width,高度为height的矩形。

context.clearRect(x,y,width,height)
免去以x,y为左上角,宽度为width,高度为height的矩形区域。

以身作则代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>绘制矩形</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <script type="text/javascript">
            //获得画布元素
            var canvas1 = document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx = canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle ="dodgerblue";

            //画一个空心的矩形,
            ctx.strokeRect(0,0,600,600);

            //画一个实心矩形
            ctx.fillStyle="aquamarine";
            ctx.fillRect(200,200,200,200);

            //清除指定的矩形区域
            ctx.clearRect(250,250,100,100);
        </script>
    </body>
</html>

运转效果: 

澳门葡京 22

2. OpenGL ES 2.0概况:

澳门葡京 23

协理的阳台:

  - 支持iPad,
iPhone3GS
和继续版本,以及iPodTouch3代和再三再四版本。

  -
支持Android平台从Android
2.2本子初阶。

  - 支持android NDK从Android
2.0本子发轫。

  - 支持BlackBerry
PlayBook黑莓。

  -
支持Pandora潘Dora控制台的3D库。

  -
被WebGL协理:浏览器帮忙OpenGL

  -
帮忙少数新款红米诺基亚手机,比如N900上的Maemo和N8上的Symbian3塞班3系统。

  - 扶助多款三星手机,包括Galaxy
S和Wave。

  - 使用支付插件可以接济Palm webOS。

  - 援救Archos 爱可视台式机:70 IT, 101 IT

     opengl
es与android有着密切的关系,主要呈现在那二种接口的腾飞轨迹和研发集团。

    近期关于于OpenGL ES
2.0的素材依然蛮少的,就只有一本书介绍(OpenGL ES 2.0 Programming
Guide)是英文版,我有买了一本书,其实不会很难看懂。你要上学OpenGL ES
最好先把OpenGL 和 OpenGL Shading
Language通晓一下,毕竟这是基础的学问内容。

    OpenGL ES
书的网站:

附:GCanvas API 支持情状

最终附上 GCanvas Contex2D 和 WebGLAPI
的支撑列表,援助常用的接口。此外,WebGL 的 API
近日正在做补全开发,后续会支撑 WebGL1.0 API 的全覆盖。

  • Context2D API
API名称 API类型 状态
fillStyle Attribute getter/setter Implemented
strokeStyle Attribute getter/setter Empty
shadowColor Attribute getter/setter Empty
shadowBlur Attribute getter/setter Empty
shadowOffsetX Attribute getter/setter Empty
shadowOffsetY Attribute getter/setter Empty
createLinearGradient() Method Empty
createPattern() Method Empty
createRadialGradient() Method Empty
addColorStop() Method Empty
isPointInPath() Method Empty
createEvent() Method Empty
toDataURL() Method Empty
lineCap Attribute getter/setter Implemented
lineJoin Attribute getter/setter Implemented
lineWidth Attribute getter/setter Implemented
miterLimit Attribute getter/setter Implemented
font Attribute getter/setter Implemented
textAlign Attribute getter/setter Implemented
textBaseline Attribute getter/setter Implemented
globalAlpha Attribute getter/setter Implemented
globalCompositeOperation Attribute getter/setter Implemented
rect() Method Implemented
fillRect() Method Implemented
strokeRect() Method Implemented
clearRect() Method Implemented
fill() Method Implemented
stroke() Method Implemented
beginPath() Method Implemented
moveTo() Method Implemented
closePath() Method Implemented
lineTo() Method Implemented
clip() Method Implemented
quadraticCurveTo() Method Implemented
bezierCurveTo() Method Implemented
arc() Method Implemented
arcTo() Method Implemented
scale() Method Implemented
rotate() Method Implemented
translate() Method Implemented
transform() Method Implemented
setTransform() Method Implemented
fillText() Method Implemented
strokeText() Method Implemented
measureText() Method Implemented
drawImage() Method Implemented
createImageData() Method Implemented
getImageData() Method Implemented
putImageData() Method Implemented
save() Method Implemented
restore() Method Implemented
getContext() Method Implemented
loadTexture() Method Implemented
unloadTexture() Method Implemented
resetTransform() Method Implemented
render() Method Implemented
capture() Method Implemented
resetClip() Method Implemented
  • WebGL API
API名称 API类型 状态
viewport() Method Implemented
vertexAttribPointer() Method Implemented
vertexAttrib2fv() Method Implemented
useProgram() Method Implemented
uniformMatrix4fv() Method Implemented
uniformMatrix3fv() Method Implemented
uniformMatrix2fv() Method Implemented
uniform4iv() Method Implemented
uniform4i() Method Implemented
uniform4fv() Method Implemented
uniform4f() Method Implemented
uniform3iv() Method Implemented
uniform3i() Method Implemented
uniform3fv() Method Implemented
uniform3f() Method Implemented
uniform2iv() Method Implemented
uniform2i() Method Implemented
uniform2fv() Method Implemented
uniform2f() Method Implemented
uniform1iv() Method Implemented
uniform1i() Method Implemented
uniform1fv() Method Implemented
uniform1f() Method Implemented
texParameteri() Method Implemented
texImage2D() Method Implemented
shaderSource() Method Implemented
scissor() Method Implemented
renderbufferStorage() Method Implemented
pixelStorei() Method Implemented
linkProgram() Method Implemented
lineWidth() Method Implemented
getUniformLocation() Method Implemented
getShaderParameter() Method Implemented
getAttribLocation() Method Implemented
generateMipmap() Method Implemented
frontFace() Method Implemented
framebufferTexture2D() Method Implemented
flush() Method Implemented
enableVertexAttribArray() Method Implemented
enable() Method Implemented
drawElements() Method Implemented
disableVertexAttribArray() Method Implemented
disable() Method Implemented
depthMask() Method Implemented
depthFunc() Method Implemented
deleteTexture() Method Implemented
deleteShader() Method Implemented
deleteRenderbuffer() Method Implemented
deleteProgram() Method Implemented
deleteFramebuffer() Method Implemented
deleteBuffer() Method Implemented
cullFace() Method Implemented
createTexture() Method Implemented
createShader() Method Implemented
createRenderbuffer() Method Implemented
createProgram() Method Implemented
createFramebuffer() Method Implemented
createBuffer() Method Implemented
compileShader() Method Implemented
colorMask() Method Implemented
clearStencil() Method Implemented
clearDepth() Method Implemented
clearColor() Method Implemented
clear() Method Implemented
bufferData() Method Implemented
blendFuncSeparate() Method Implemented
blendFunc() Method Implemented
blendEquationSeparate() Method Implemented
blendEquation() Method Implemented
bindRenderbuffer() Method Implemented
bindFramebuffer() Method Implemented
bindBuffer() Method Implemented
bindAttribLocation() Method Implemented
attachShader() Method Implemented
activeTexture() Method Implemented
validateProgram() Method Empty
texSubImage2D() Method Empty
texParameterf() Method Empty
stencilOpSeparate() Method Empty
stencilOp() Method Empty
stencilMaskSeparate() Method Empty
stencilMask() Method Empty
stencilFuncSeparate() Method Empty
stencilFunc() Method Empty
sampleCoverage() Method Empty
readPixels() Method Empty
polygonOffset() Method Empty
isTexture() Method Empty
isShader() Method Empty
isRenderbuffer() Method Empty
isProgram() Method Empty
isFramebuffer() Method Empty
isEnabled() Method Empty
isContextLost() Method Empty
isBuffer() Method Empty
getVertexAttribOffset() Method Empty
getVertexAttrib() Method Empty
getUniform() Method Empty
getTexParameter() Method Empty
getSupportedExtensions() Method Empty
getShaderSource() Method Empty
getShaderPrecisionFormat() Method Empty
getShaderInfoLog() Method Empty
getRenderbufferParameter() Method Empty
getProgramParameter() Method Empty
getProgramInfoLog() Method Empty
getParameter() Method Empty
getFramebufferAttachmentParameter() Method Empty
getExtension() Method Empty
getError() Method Empty
getContextAttributes() Method Empty
getBufferParameter() Method Empty
getAttachedShaders() Method Empty
getActiveUniform() Method Empty
getActiveAttrib() Method Empty
drawArrays / drawArraysInstancedANGLE() Method Empty
detachShader() Method Empty
depthRange() Method Empty
copyTexSubImage2D() Method Empty
copyTexImage2D() Method Empty
compressedTexSubImage2D() Method Empty
compressedTexImage2D() Method Empty
checkFramebufferStatus() Method Empty
bufferSubData() Method Empty
blendColor() Method Empty
bindTexture() Method Undefined
commit() Method Undefined
finish() Method Undefined
framebufferRenderbuffer() Method Undefined
hint() Method Undefined

1 赞 1 收藏
评论

澳门葡京 24

1.4、绘制圆弧

context.arc(x,y,radius,startAngle,endAngle,anticlockwise)

arc方法用来绘制一段圆弧路径,以(x,y)圆心地方radius为半径、startAngle为发端弧度、endAngle为平息弧度来,而在画圆弧时的团团转方向则由最终一个参数
anticlockwise 来指定,假设为 true 就是逆时针,false 则为顺时针,Math.PI
* 2 刚好为一周。

演示代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>绘制圆弧</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <script type="text/javascript">
            //获得画布元素
            var canvas1 = document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx = canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle ="dodgerblue";

            //画一段圆弧,300,300是圆心,200是半径,0是超始角度,Math.PI是结束角度,是否逆时钟
            ctx.arc(300,300,200,0,Math.PI,false);
            //闭合
            ctx.closePath();
            ctx.stroke();
            ctx.beginPath();
            ctx.fillStyle="aquamarine";
            ctx.arc(300,300,100,0,Math.PI*2,false);
            ctx.fill();
        </script>
    </body>
</html>

运转效果:

 澳门葡京 25

练习:

a、模拟钟表的时,分,秒

b、模拟水波,一个藏蓝色的显示器,四个从着力随机爆发彩色的圈不断的拓宽,接触到显示屏甘休。

1.4、绘制圆弧

context.arc(x,y,radius,startAngle,endAngle,anticlockwise)

arc方法用来绘制一段圆弧路径,以(x,y)圆心地方radius为半径、startAngle为初阶弧度、endAngle为平息弧度来,而在画圆弧时的旋转方向则由最终一个参数
anticlockwise 来指定,假诺为 true 就是逆时针,false 则为顺时针,Math.PI
* 2 刚好为七天。

演示代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>绘制圆弧</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <script type="text/javascript">
            //获得画布元素
            var canvas1 = document.getElementById("canvas1");
            //获得2维绘图的上下文
            var ctx = canvas1.getContext("2d");

            //设置线宽
            ctx.lineWidth = 10;
            //设置线的颜色
            ctx.strokeStyle ="dodgerblue";

            //画一段圆弧,300,300是圆心,200是半径,0是超始角度,Math.PI是结束角度,是否逆时钟
            ctx.arc(300,300,200,0,Math.PI,false);
            //闭合
            ctx.closePath();
            ctx.stroke();
            ctx.beginPath();
            ctx.fillStyle="aquamarine";
            ctx.arc(300,300,100,0,Math.PI*2,false);
            ctx.fill();
        </script>
    </body>
</html>

运转效果:

 澳门葡京 26

练习:

a、模拟钟表的时,分,秒

b、模拟水波,一个紫色的显示器,多少个从基本随机爆发彩色的圈不断的加大,接触到显示屏为止。

三. WebGL

1.5、绘制图像

context.drawImage(image,x,y)

把image图像绘制到画布上x,y坐标地方。

context.drawImage(image,x,y,w,h)

把image图像绘制到画布上x,y坐标地方,图像的宽度是w,中度是h。

context.drawImage(image,sx,sy,sw,sh,dx,dy,dw,dh)
截取image图像以sx,sy为左上角坐标,宽度为sw,高度为sh的一块矩形区域绘制到画布上以dx,dy坐标地点,图像宽度是dw,高度是dh。
其中image可以是htmlImageElement元素,htmlcanvasElement元素,htmlVideoElement元素

演示代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>绘制图像</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <img src="img/apple.png" id="apple" hidden="hidden" />
        <script type="text/javascript">
           //必须当页面中的图片资源加载成功
            window.onload = function() {
                //获得画布元素
                var canvas1 = document.getElementById("canvas1");
                //获得2维绘图的上下文
                var ctx = canvas1.getContext("2d");

                //设置线宽
                ctx.lineWidth = 10;
                //设置线的颜色
                ctx.strokeStyle = "dodgerblue";
                ctx.moveTo(0,0);
                ctx.strokeRect(0,0,600,600);

                //图片
                var apple = document.getElementById("apple");
                //将图像绘制到画布的,图片的左上角
                ctx.drawImage(apple, 300-52, 300-63);
            }
        </script>
    </body>

</html>

运行效果:

澳门葡京 27

1.5、绘制图像

context.drawImage(image,x,y)

把image图像绘制到画布上x,y坐标位置。

context.drawImage(image,x,y,w,h)

把image图像绘制到画布上x,y坐标地点,图像的增幅是w,中度是h。

context.drawImage(image,sx,sy,sw,sh,dx,dy,dw,dh)
截取image图像以sx,sy为左上角坐标,宽度为sw,中度为sh的一块矩形区域绘制到画布上以dx,dy坐标地点,图像宽度是dw,高度是dh。
其中image可以是htmlImageElement元素,htmlcanvasElement元素,htmlVideoElement元素

示范代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>绘制图像</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <img src="img/apple.png" id="apple" hidden="hidden" />
        <script type="text/javascript">
           //必须当页面中的图片资源加载成功
            window.onload = function() {
                //获得画布元素
                var canvas1 = document.getElementById("canvas1");
                //获得2维绘图的上下文
                var ctx = canvas1.getContext("2d");

                //设置线宽
                ctx.lineWidth = 10;
                //设置线的颜色
                ctx.strokeStyle = "dodgerblue";
                ctx.moveTo(0,0);
                ctx.strokeRect(0,0,600,600);

                //图片
                var apple = document.getElementById("apple");
                //将图像绘制到画布的,图片的左上角
                ctx.drawImage(apple, 300-52, 300-63);
            }
        </script>
    </body>

</html>

运作效果:

澳门葡京 28

1. WebGL 简介

       
WebGL是一种3D绘图标准,那种绘图技术标准允许把JavaScript和OpenGL
ES 2.0结缘在共同,通过增加OpenGL ES
2.0的一个javascript绑定,WebGL可以为HTML5
Canvas提供硬件3D加快渲染,那样Web开发人士就可以依靠系统显卡来在浏览器里更流畅地显示3D场景和模型了,仍可以创设复杂的领航和数据视觉化。显著,WebGL技术标准免去了支出网页专用渲染插件的劳动,可被用于创建具有复杂性3D结构的网站页面,甚至足以用来统筹3D网页游戏之类。

       
WebGL一应俱全地化解了现有的Web交互式三维动画的八个难点:第一,它经过HTML脚本本身完毕Web交互式三维动画的制作,无需任何浏览器插件援救;第二,它选取底层的图样硬件加速功效举办的图片渲染,是由此联合的、标准的、跨平台的OpenGL接口达成的。

1.6、绘制文字

context.fillText(text,x,y,[maxWidth])

在canvas上填写文字,text表示要求绘制的文字,x,y分别代表绘制在canvas上的横,纵坐标,最后一个参数可选,表示突显文字的最大开间,幸免文字呈现溢出。

context.strokeText(text,x,y,[maxWidth])

在canvas上描边文字,参数的意义同fillText
使用context.font属性设置字体
context.font=’italic bolder 48px 黑体’;

示范代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>绘制文字</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <img src="img/apple.png" id="apple" hidden="hidden" />
        <script type="text/javascript">
           //必须当页面中的图片资源加载成功
            window.onload = function() {
                //获得画布元素
                var canvas1 = document.getElementById("canvas1");
                //获得2维绘图的上下文
                var ctx = canvas1.getContext("2d");

                //设置线宽
                ctx.lineWidth = 1;
                //设置线的颜色
                ctx.strokeStyle = "dodgerblue";
                ctx.moveTo(0,0);
                ctx.strokeRect(0,0,600,600);

                //绘制文字
                //描边
                ctx.font="50px microsoft yahei";
                ctx.strokeText("Hello Zhangguo",20,100);
                //填充
                ctx.fillStyle=
                ctx.fillText("Hello Zhangguo",20,200);
            }

        </script>
    </body>

</html>

运行结果:

澳门葡京 29

1.6、绘制文字

context.fillText(text,x,y,[maxWidth])

在canvas上填写文字,text表示必要绘制的文字,x,y分别代表绘制在canvas上的横,纵坐标,最终一个参数可选,表示展现文字的最大开间,防止文字呈现溢出。

context.strokeText(text,x,y,[maxWidth])

在canvas上描边文字,参数的意义同fillText
使用context.font属性设置字体
context.font=’italic bolder 48px 黑体’;

以身作则代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>绘制文字</title>
    </head>
    <body>
        <canvas id="canvas1" width="600" height="600"></canvas>
        <img src="img/apple.png" id="apple" hidden="hidden" />
        <script type="text/javascript">
           //必须当页面中的图片资源加载成功
            window.onload = function() {
                //获得画布元素
                var canvas1 = document.getElementById("canvas1");
                //获得2维绘图的上下文
                var ctx = canvas1.getContext("2d");

                //设置线宽
                ctx.lineWidth = 1;
                //设置线的颜色
                ctx.strokeStyle = "dodgerblue";
                ctx.moveTo(0,0);
                ctx.strokeRect(0,0,600,600);

                //绘制文字
                //描边
                ctx.font="50px microsoft yahei";
                ctx.strokeText("Hello Zhangguo",20,100);
                //填充
                ctx.fillStyle=
                ctx.fillText("Hello Zhangguo",20,200);
            }

        </script>
    </body>

</html>

运作结果:

澳门葡京 30

2. WebGL 的例子

    
其实自己有做了一个WebGL的事例,是用WebGL画了一个色立体,当然如今还很粗糙,简单的来说,它就是html5+OpenGL
ES的组合,但是Html5还不成熟,所以关于WebGL的不少例子还只是在不成熟的DEMO上,但是我想这在其后还一种趋势,当然IT业哪个人也说不清楚,WebGL可以说是OpenGL的网页版,近来关于WebGL的图书照旧尚未的,官网有一个是学习WebGL的教程,当然是英文了。。呵呵

此时此刻IE还不接济WebGL,有FireFox还有谷歌(Google)浏览器等协理。。。

10大WebGL应用示范网站案例http://www.fadianzhan.com/index.php/archives/208

学习网站:http://learningwebgl.com/blog/

 

1.7、随机颜色与简便动画

一言九鼎结合随机形式与定时器、时钟已毕简单的卡通。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>随机颜色与简单动画</title>
    </head>
    <body>
        <canvas id="canvas1" width="1000" height="650"></canvas>
        <img src="img/apple.png" id="apple" hidden="hidden" />
        <script type="text/javascript">
            var magicCircle = {
                randomColor: function() {
                    return "#" + parseInt(Math.random() * 16777216).toString(16);
                },
                getNum: function(min, max) {
                    return parseInt(Math.random() * (max - min)) + min;
                },
                r: 10,
                run: function() {
                    //获得画布元素
                    this.canvas1 = document.getElementById("canvas1");
                    //获得2维绘图的上下文
                    this.ctx = this.canvas1.getContext("2d");
                    //运行
                    setInterval(this.draw, 100);
                    this.bindEvent();
                },
                draw: function() {
                    magicCircle.ctx.beginPath();
                    magicCircle.ctx.lineWidth = magicCircle.getNum(1,10);
                    magicCircle.ctx.strokeStyle = magicCircle.randomColor();
                    magicCircle.ctx.arc(magicCircle.getNum(1,1000), magicCircle.getNum(1,600), magicCircle.r, 0, Math.PI * 2);
                    magicCircle.ctx.stroke();
                    magicCircle.r += 10;
                    if(magicCircle.r > 300) magicCircle.r = 10;
                },
                bindEvent:function()
                {
                    this.canvas1.onmousemove=function(e){
                        magicCircle.ctx.lineWidth = magicCircle.getNum(1,10);
                        magicCircle.ctx.strokeStyle = magicCircle.randomColor();
                        magicCircle.ctx.arc(e.clientX, e.clientY, magicCircle.r, 0, Math.PI * 2);
                        magicCircle.ctx.stroke();
                        magicCircle.r += 10;
                        if(magicCircle.r > 300) magicCircle.r = 10;
                    }
                }
            };

            magicCircle.run();
        </script>
    </body>

</html>

运转效果:

澳门葡京 31

1.7、随机颜色与简便动画

主要结合随机形式与定时器、时钟已毕简单的卡通片。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>随机颜色与简单动画</title>
    </head>
    <body>
        <canvas id="canvas1" width="1000" height="650"></canvas>
        <img src="img/apple.png" id="apple" hidden="hidden" />
        <script type="text/javascript">
            var magicCircle = {
                randomColor: function() {
                    return "#" + parseInt(Math.random() * 16777216).toString(16);
                },
                getNum: function(min, max) {
                    return parseInt(Math.random() * (max - min)) + min;
                },
                r: 10,
                run: function() {
                    //获得画布元素
                    this.canvas1 = document.getElementById("canvas1");
                    //获得2维绘图的上下文
                    this.ctx = this.canvas1.getContext("2d");
                    //运行
                    setInterval(this.draw, 100);
                    this.bindEvent();
                },
                draw: function() {
                    magicCircle.ctx.beginPath();
                    magicCircle.ctx.lineWidth = magicCircle.getNum(1,10);
                    magicCircle.ctx.strokeStyle = magicCircle.randomColor();
                    magicCircle.ctx.arc(magicCircle.getNum(1,1000), magicCircle.getNum(1,600), magicCircle.r, 0, Math.PI * 2);
                    magicCircle.ctx.stroke();
                    magicCircle.r += 10;
                    if(magicCircle.r > 300) magicCircle.r = 10;
                },
                bindEvent:function()
                {
                    this.canvas1.onmousemove=function(e){
                        magicCircle.ctx.lineWidth = magicCircle.getNum(1,10);
                        magicCircle.ctx.strokeStyle = magicCircle.randomColor();
                        magicCircle.ctx.arc(e.clientX, e.clientY, magicCircle.r, 0, Math.PI * 2);
                        magicCircle.ctx.stroke();
                        magicCircle.r += 10;
                        if(magicCircle.r > 300) magicCircle.r = 10;
                    }
                }
            };

            magicCircle.run();
        </script>
    </body>

</html>

运转效果:

澳门葡京 32

二、WebGL

WebGL(全写Web Graphics
Library)是一种3D绘图标准,那种绘图技术标准允许把JavaScript和OpenGL ES
2.0整合在联合,通过增加OpenGL ES
2.0的一个JavaScript绑定,WebGL可以为HTML5
Canvas提供硬件3D加快渲染,那样Web开发人士就可以凭借系统显卡来在浏览器里更流畅地浮现3D场景和模型了,还是能创建复杂的领航和数目视觉化。显著,WebGL技术标准免去了支出网页专用渲染插件的辛劳,可被用于成立具有复杂性3D结构的网站页面,甚至足以用来布置3D网页游戏之类。

WebGL完美地缓解了现有的Web交互式三维动画的三个难题:

首先,它通过HTML脚本自己完毕Web交互式三维动画的创设,无需任何浏览器插件支持;

其次,它利用底层的图样硬件加速作用举办的图片渲染,是透过联合的、标准的、跨平台的OpenGL接口落成的。

开头说WebGL中canvas绘图中的3D版本。因为原生的WebGL很复杂,大家平常会使用一些三方的库,如three.js等,这几个库多数用以HTML5游戏支付。

澳门葡京 33

Three.js的以身作则代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Three.js</title>
    </head>
    <body>
        <script src="js/three.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var scene = new THREE.Scene();

            var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

            var renderer = new THREE.WebGLRenderer();

            renderer.setSize(window.innerWidth, window.innerHeight);

            document.body.appendChild(renderer.domElement);
            var geometry = new THREE.CubeGeometry(1, 1, 1);
            var material = new THREE.MeshBasicMaterial({
                color: 0x0000ff
            });
            var cube = new THREE.Mesh(geometry, material);
            scene.add(cube);
            camera.position.z = 5;

            function render() {
                requestAnimationFrame(render);
                cube.rotation.x += 0.1;
                cube.rotation.y += 0.1;
                renderer.render(scene, camera);
            }
            render();
        </script>
    </body>

</html>

three.js示例运行结果:

澳门葡京 34

二、WebGL

WebGL(全写Web Graphics
Library)是一种3D绘图标准,那种绘图技术标准允许把JavaScript和OpenGL ES
2.0整合在一块,通过增添OpenGL ES
2.0的一个JavaScript绑定,WebGL可以为HTML5
Canvas提供硬件3D加速渲染,那样Web开发人士就足以器重系统显卡来在浏览器里更流畅地展现3D场景和模型了,还可以成立复杂的导航和多少视觉化。显明,WebGL技术标准免去了付出网页专用渲染插件的难为,可被用来创造具有复杂性3D结构的网站页面,甚至可以用来统筹3D网页游戏之类。

WebGL完美地解决了现有的Web交互式三维动画的五个难题:

先是,它经过HTML脚本我已毕Web交互式三维动画的制作,无需任何浏览器插件匡助;

第二,它使用底层的图形硬件加快功能拓展的图样渲染,是经过统一的、标准的、跨平台的OpenGL接口达成的。

通俗说WebGL中canvas绘图中的3D版本。因为原生的WebGL很复杂,大家日常会采取一些三方的库,如three.js等,那些库多数用以HTML5游玩开发。

澳门葡京 35

Three.js的演示代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Three.js</title>
    </head>
    <body>
        <script src="js/three.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var scene = new THREE.Scene();

            var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

            var renderer = new THREE.WebGLRenderer();

            renderer.setSize(window.innerWidth, window.innerHeight);

            document.body.appendChild(renderer.domElement);
            var geometry = new THREE.CubeGeometry(1, 1, 1);
            var material = new THREE.MeshBasicMaterial({
                color: 0x0000ff
            });
            var cube = new THREE.Mesh(geometry, material);
            scene.add(cube);
            camera.position.z = 5;

            function render() {
                requestAnimationFrame(render);
                cube.rotation.x += 0.1;
                cube.rotation.y += 0.1;
                renderer.render(scene, camera);
            }
            render();
        </script>
    </body>

</html>

three.js示例运行结果:

澳门葡京 36

2.1、HTML5嬉戏支付

乘势HTML5的开拓进取与硬件品质的提拔HTML5玩耍开发越发受到游戏开发者的强调,因为WebGL存在一定的复杂度,所有暴发了广大精彩的开源HTML5游戏引擎,上面是github上开源免费的HTML5游玩引擎:

Name Updated Time Watch Star Fork Commits Contributors
Three.js 2016/3/28 1590 24041 7768 14825 588
Phaser 2016/2/18 837 11782 4095 4423 206
Pixi.js 2016/3/17 656 10063 1942 2860 161
egret 2016/3/30 215 1275 303 4268 25
enchantjs 2016/1/4 185 1445 301 1683 27
crafty 2016/3/21 134 2050 473 1807 106
turbulenz 2015/11/23 271 2544 406 1737 13
cocos2d-js 2016/3/30 162 1207 469 4559 45
playcanvas 2016/3/30 164 1784 368 5142 16
melonjs 2016/3/30 13 1579 371 3907 40
quintus 2016/2/3 136 1023 412 256 33
Hilo 2016/2/3 173 2449 340 20 2

2.1、HTML5玩耍支付

随着HTML5的前行与硬件质量的升高HTML5游玩支付尤其受到游戏开发者的青眼,因为WebGL存在一定的复杂度,所有发生了许多地道的开源HTML5娱乐引擎,上边是github上开源免费的HTML5戏耍引擎:

Name Updated Time Watch Star Fork Commits Contributors
Three.js 2016/3/28 1590 24041 7768 14825 588
Phaser 2016/2/18 837 11782 4095 4423 206
Pixi.js 2016/3/17 656 10063 1942 2860 161
egret 2016/3/30 215 1275 303 4268 25
enchantjs 2016/1/4 185 1445 301 1683 27
crafty 2016/3/21 134 2050 473 1807 106
turbulenz 2015/11/23 271 2544 406 1737 13
cocos2d-js 2016/3/30 162 1207 469 4559 45
playcanvas 2016/3/30 164 1784 368 5142 16
melonjs 2016/3/30 13 1579 371 3907 40
quintus 2016/2/3 136 1023 412 256 33
Hilo 2016/2/3 173 2449 340 20 2

2.2.1、Cocos2D-HTML5

开源,免费的HTML5
2D玩耍支付框架,Cocos2D拥有多少个主要版本,包含Cocos2D-酷派、Cocos2D-X,以及被社区普遍主张的Cocos2D-HTML5和JavaScriptbindings
for
Cocos2D-X。CocoStudio工具集是开源游戏引擎。特点:与Cocos2d的API类似,不难上手、汉语文档齐全,资料丰裕、基于MIT协议的开源引擎。它由国内Cocos2d-x着力团队骨干开发和维护,行业首脑、HTML5矢志不渝牵动者谷歌为那个体系提供援救。

github:

官网:

HelloWorld示例:

<!DOCTYPE html>
<html>
<head>
    <title>Hello Cocos2d-JS</title>
</head>
<body>   
    <canvas id="gameCanvas" width="800" height="450"></canvas>
    <script type="text/javascript" src="cocos2d-js-v3.12-lite.js" charset="UTF-8"></script>
    <script type="text/javascript">
          window.onload = function(){
              cc.game.onStart = function(){
                  //load resources
                  cc.LoaderScene.preload(["HelloWorld.png"], function () {
                      var MyScene = cc.Scene.extend({
                          onEnter:function () {
                              this._super();
                              var size = cc.director.getWinSize();
                              var sprite = cc.Sprite.create("HelloWorld.png");
                              sprite.setPosition(size.width / 2, size.height / 2);
                              sprite.setScale(0.8);
                              this.addChild(sprite, 0);

                              var label = cc.LabelTTF.create("Hello World", "Arial", 40);
                              label.setPosition(size.width / 2, size.height / 2);
                              this.addChild(label, 1);
                          }
                      });
                      cc.director.runScene(new MyScene());
                  }, this);
              };
              cc.game.run("gameCanvas");
          };
    </script>
</body>
</html>

运转结果:

澳门葡京 37

2.2.1、Cocos2D-HTML5

开源,免费的HTML5
2D游戏开发框架,Cocos2D拥有多少个至关主要版本,包罗Cocos2D-一加、Cocos2D-X,以及被社区广大看好的Cocos2D-HTML5和JavaScriptbindings
for
Cocos2D-X。CocoStudio工具集是开源游戏引擎。特点:与Cocos2d的API类似,不难上手、中文文档齐全,资料丰盛、基于MIT协议的开源引擎。它由国内Cocos2d-x基本团队为主开发和保险,行业领袖、HTML5全力牵动者谷歌为这么些项目提供支撑。

github:

官网:

HelloWorld示例:

<!DOCTYPE html>
<html>
<head>
    <title>Hello Cocos2d-JS</title>
</head>
<body>   
    <canvas id="gameCanvas" width="800" height="450"></canvas>
    <script type="text/javascript" src="cocos2d-js-v3.12-lite.js" charset="UTF-8"></script>
    <script type="text/javascript">
          window.onload = function(){
              cc.game.onStart = function(){
                  //load resources
                  cc.LoaderScene.preload(["HelloWorld.png"], function () {
                      var MyScene = cc.Scene.extend({
                          onEnter:function () {
                              this._super();
                              var size = cc.director.getWinSize();
                              var sprite = cc.Sprite.create("HelloWorld.png");
                              sprite.setPosition(size.width / 2, size.height / 2);
                              sprite.setScale(0.8);
                              this.addChild(sprite, 0);

                              var label = cc.LabelTTF.create("Hello World", "Arial", 40);
                              label.setPosition(size.width / 2, size.height / 2);
                              this.addChild(label, 1);
                          }
                      });
                      cc.director.runScene(new MyScene());
                  }, this);
              };
              cc.game.run("gameCanvas");
          };
    </script>
</body>
</html>

运作结果:

澳门葡京 38

2.2.2、Egret(白鹭引擎)

是一个根据TypeScript语言开发的HTML5游乐引擎,围住神经猫就是用这几个框架开发的。

澳门葡京 39

官网:

特点:

a)、基于TypeScript及JavaScript技术,协理Flash到Egret高效转换,引擎、工具、运行时完全工作流
b)、跨平台:HTML5,iOS,Android,Windows Phone
c)、全汉语文档:文档与开发者社区全称
d)、开源免费,BSD开源协议、任意定制及扩张

2.2.2、Egret(白鹭引擎)

是一个根据TypeScript语言开发的HTML5娱乐引擎,围住神经猫就是用这些框架开发的。

澳门葡京 40

官网:

特点:

a)、基于TypeScript及JavaScript技术,帮助Flash到Egret高效转换,引擎、工具、运行时完全工作流
b)、跨平台:HTML5,iOS,Android,Windows Phone
c)、全中文文档:文档与开发者社区全称
d)、开源免费,BSD开源协议、任意定制及增添

三、SVG

SVG可缩放矢量图形(Scalable Vector
Graphics)是按照可扩张标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG是W3C(“World
Wide Web ConSortium” 即 ”
国际网络标准协会”)在2000年六月制定的一种新的二维矢量图形格式,也是正式中的网络矢量图形标准。SVG严苛遵守XML语法,并用文本格式的描述性语言来叙述图像内容,因而是一种和图像分辨率无关的矢量图形格式。SVG
于 2003 年 1 月 14 日成为 W3C 推荐标准。

澳门葡京 41

特点:

1.随机放缩
用户可以肆意缩放图像展现,而不会毁掉图像的清晰度、细节等。
2.文本独立
SVG图像中的文字独立于图像,文字保留可编制和可寻找的情景。也不会再有字体的界定,用户系统就是没有安装某一字体,也会看到和她俩制作时完全相同的画面。
3.较小文件
完全来讲,SVG文件比那多少个GIF和JPEG格式的文书要小很多,因此下载也很快。
4.超强突显效果
SVG图像在屏幕上连年边缘清晰,它的清晰度适合任何显示器分辨率和打印分辨率。
5.至上颜色控制
SVG图像提供一个1600万种颜色的调色板,支持ICC颜色描述文件标准、RGB、线X填充、渐变和蒙版。
6.交互X和智能化。SVG面临的严重性难题一个是哪些和曾经占据主要市场份额的矢量图形格式Flash竞争的难点,另一个难点就是SVG的本地运行环境下的厂家帮衬程度。

浏览器扶助:

Internet Explorer9,火狐,谷歌Chrome,Opera和Safari都支持SVG。
IE8和初期版本都亟需一个插件 – 如Adobe SVG浏览器,那是免费提供的。

三、SVG

SVG可缩放矢量图形(Scalable Vector
Graphics)是按照可增加标记语言(XML),用于描述二维矢量图片的一种图形格式。SVG是W3C(“World
Wide Web ConSortium” 即 ”
国际互连网标准社团”)在2000年十一月制定的一种新的二维矢量图形格式,也是明媒正娶中的网络矢量图形标准。SVG严峻遵守XML语法,并用文本格式的描述性语言来叙述图像内容,由此是一种和图像分辨率毫不相关的矢量图形格式。SVG
于 2003 年 1 月 14 日成为 W3C 推荐标准。

澳门葡京 42

特点:

1.无限制放缩
用户可以无限制缩放图像突显,而不会损坏图像的清晰度、细节等。
2.文本独立
SVG图像中的文字独立于图像,文字保留可编制和可搜索的图景。也不会再有字体的限制,用户系统就是没有设置某一字体,也相会到和他们创设时完全相同的镜头。
3.较小文件
完全来讲,SVG文件比那么些GIF和JPEG格式的文书要小很多,因此下载也很快。
4.超强突显效果
SVG图像在屏幕上连年边缘清晰,它的清晰度适合任何显示屏分辨率和打印分辨率。
5.特级颜色控制
SVG图像提供一个1600万种颜色的调色板,扶助ICC颜色描述文件标准、RGB、线X填充、渐变和蒙版。
6.交互X和智能化。SVG面临的要害难题一个是何等和曾经占据主要市场份额的矢量图形格式Flash竞争的难点,另一个难点就是SVG的本地运行环境下的厂家匡助程度。

浏览器援助:

Internet Explorer9,火狐,谷歌Chrome,Opera和Safari都支持SVG。
IE8和初期版本都亟需一个插件 – 如Adobe SVG浏览器,那是免费提供的。

3.1、SVG Hello Wrold

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>SVG Hello World</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
            <circle cx="100" cy="100" r="30" stroke="blue" stroke-width="2" fill="red" />
        </svg>
    </body>
</html>

运行结果:

澳门葡京 43

svg是一个新扩充标签,xmlns是命名空间,version是svg的版本,circle标签就是对svg要出示的图像举办描述,cx与cy代表地点,r表示半径,stroke是描边样式,stroke-width就线宽,fill是填充样式。浏览器包容性很好:

澳门葡京 44

3.1、SVG Hello Wrold

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>SVG Hello World</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
            <circle cx="100" cy="100" r="30" stroke="blue" stroke-width="2" fill="red" />
        </svg>
    </body>
</html>

运转结果:

澳门葡京 45

svg是一个新扩大标签,xmlns是命名空间,version是svg的版本,circle标签就是对svg要出示的图像实行描述,cx与cy表示地方,r表示半径,stroke是描边样式,stroke-width就线宽,fill是填写样式。浏览器包容性很好:

澳门葡京 46

3.2、七种引入SVG的办法

SVG 文件可因此以下标签嵌入 HTML 文档:<embed>、<object> 或者
<iframe>。
SVG的代码可以直接嵌入到HTML页面中,或你可以直接链接到SVG文件

引入方式如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>引入SVG的方法</title>
        <style type="text/css">
            body{
                background:url(me.svg);
            }
        </style>
    </head>
    <body>
        <h2>embed</h2>
        <embed src="me.svg" type="image/svg+xml" width="108" height="108" /> 优势:所有主要浏览器都支持,并允许使用脚本 缺点:不推荐在HTML4和XHTML中使用(但在HTML5允许)
        <h2>object</h2>
        <object data="me.svg" type="image/svg+xml" width="108" height="108"></object> 优势:所有主要浏览器都支持,并支持HTML4,XHTML和HTML5标准 缺点:不允许使用脚本。
        <h2>iframe</h2>
        <iframe src="me.svg" frameborder="0" width="108" height="108"></iframe> 优势:所有主要浏览器都支持,并允许使用脚本 缺点:不推荐在HTML4和XHTML中使用(但在HTML5允许)
        <h2>直接嵌入</h2>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="108" height="108">
            <circle cx="54" cy="54" r="50" stroke="blue" stroke-width="2" fill="blue" />
        </svg>
        在Firefox、Internet Explorer9、谷歌Chrome和Safari中,你可以直接在HTML嵌入SVG代码。 注意:SVG不能直接嵌入到Opera。
        <h2>image</h2>
        <img src="me.svg" width="108" height="108" />
    </body>

</html>

运行结果:

澳门葡京 47

3.2、二种引入SVG的主意

SVG 文件可经过以下标签嵌入 HTML 文档:<embed>、<object> 或者
<iframe>。
SVG的代码可以一向嵌入到HTML页面中,或你可以间接链接到SVG文件

引入格局如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>引入SVG的方法</title>
        <style type="text/css">
            body{
                background:url(me.svg);
            }
        </style>
    </head>
    <body>
        <h2>embed</h2>
        <embed src="me.svg" type="image/svg+xml" width="108" height="108" /> 优势:所有主要浏览器都支持,并允许使用脚本 缺点:不推荐在HTML4和XHTML中使用(但在HTML5允许)
        <h2>object</h2>
        <object data="me.svg" type="image/svg+xml" width="108" height="108"></object> 优势:所有主要浏览器都支持,并支持HTML4,XHTML和HTML5标准 缺点:不允许使用脚本。
        <h2>iframe</h2>
        <iframe src="me.svg" frameborder="0" width="108" height="108"></iframe> 优势:所有主要浏览器都支持,并允许使用脚本 缺点:不推荐在HTML4和XHTML中使用(但在HTML5允许)
        <h2>直接嵌入</h2>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="108" height="108">
            <circle cx="54" cy="54" r="50" stroke="blue" stroke-width="2" fill="blue" />
        </svg>
        在Firefox、Internet Explorer9、谷歌Chrome和Safari中,你可以直接在HTML嵌入SVG代码。 注意:SVG不能直接嵌入到Opera。
        <h2>image</h2>
        <img src="me.svg" width="108" height="108" />
    </body>

</html>

运作结果:

澳门葡京 48

3.3、画直线

示范代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Line</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500" height="500">
            <line x1="0" y1="0" x2="500" y2="500" style="stroke:rgb(0,0,255);stroke-width:3" />
        </svg>
    </body>
</html>

参数:

x1 属性在 x 轴定义线条的发端
y1 属性在 y 轴定义线条的起来
x2 属性在 x 轴定义线条的利落
y2 属性在 y 轴定义线条的了断

运行结果:

澳门葡京 49

3.3、画直线

演示代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Line</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500" height="500">
            <line x1="0" y1="0" x2="500" y2="500" style="stroke:rgb(0,0,255);stroke-width:3" />
        </svg>
    </body>
</html>

参数:

x1 属性在 x 轴定义线条的开端
y1 属性在 y 轴定义线条的早先
x2 属性在 x 轴定义线条的终结
y2 属性在 y 轴定义线条的了断

运作结果:

澳门葡京 50

3.4、画椭圆

以身作则代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>椭圆</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500" hidden="500">
            <ellipse cx="300" cy="80" rx="100" ry="50" style="fill:yellow;stroke:dodgerblue;stroke-width:5" />
        </svg>
    </body>
</html>

参数:

CX属性定义的扁圆形主旨的x坐标
CY属性定义的扁圆形中央的y坐标
RX属性定义的程度半径
RY属性定义的垂直半径

运转结果:

澳门葡京 51

3.4、画椭圆

以身作则代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>椭圆</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500" hidden="500">
            <ellipse cx="300" cy="80" rx="100" ry="50" style="fill:yellow;stroke:dodgerblue;stroke-width:5" />
        </svg>
    </body>
</html>

参数:

CX属性定义的扁圆形中央的x坐标
CY属性定义的扁圆形主旨的y坐标
RX属性定义的水准半径
RY属性定义的垂直半径

运转结果:

澳门葡京 52

3.5、文本与矩形

示范代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>文本与矩形</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="800" height="500">
            <text x="0" y="50" fill="blue" style="font-size:30px; font-family: 'microsoft yahei';">My Teacher Zhangguo</text>
            <rect x="40" y="60" width="260" height="260" style="fill:blue;stroke:pink;stroke-width:5;
fill-opacity:0.1;stroke-opacity:0.9" />
        </svg>
    </body>
</html>

 

运行结果:

 澳门葡京 53

3.5、文本与矩形

以身作则代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>文本与矩形</title>
    </head>
    <body>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="800" height="500">
            <text x="0" y="50" fill="blue" style="font-size:30px; font-family: 'microsoft yahei';">My Teacher Zhangguo</text>
            <rect x="40" y="60" width="260" height="260" style="fill:blue;stroke:pink;stroke-width:5;
fill-opacity:0.1;stroke-opacity:0.9" />
        </svg>
    </body>
</html>

 

运作结果:

 澳门葡京 54

3.6、向下包容与图标

IE8并不直接包容SVG,就算需求突显则可以利用插件,即使不选拔插件也有向下包容的点子。

以身作则代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>向下兼容与图标</title>
    </head>
    <body>
        <svg width="78" height="78">
            <image xlink:href="money.svg" width="78" height="78" src="money.png"></image>
        </svg>
    </body>
</html>

 

运作结果:

澳门葡京 55

澳门葡京 56

参数:

image本身就是svg中引入外部图像的元素,刚好在ie8下又能被分析。

3.6、向下包容与图标

IE8并不直接包容SVG,固然急需出示则足以选拔插件,倘诺不使用插件也有向下包容的法门。

演示代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>向下兼容与图标</title>
    </head>
    <body>
        <svg width="78" height="78">
            <image xlink:href="money.svg" width="78" height="78" src="money.png"></image>
        </svg>
    </body>
</html>

 

运转结果:

澳门葡京 57

澳门葡京 58

参数:

image本身就是svg中引入外部图像的因素,刚好在ie8下又能被解析。

四、示例下载

以身作则代码:

参照:

学习笔记(四)——canvas绘图、WebGL、SVG,html5webgl 一、Canvas
canvas是HTML5中新增一个HTML5标签与操作canvas的javascript
API,它可以完结在网…

四、示例下载

以身作则代码:

学习统计(四)——canvas绘图、WebGL、SVG,html5webgl 一、Canvas
canvas是HTML5中新增一个HTML5标签与操作canvas的javascript
API,它能够兑现在网…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website