js基础(使用Canvas画图)

摘要:
HTML5的元素提供了一组JavaScriptAPI,让我们可以动态地创建图形和图像。图形是在一个特定的上下文中创建的,而上下文对象目前有两种。WebGL是从OpenGLES2.0移植到浏览器中的,而OpenGLES2.0是游戏开发人员在创建计算机图形图像时经常使用的一种语言。目前,主流浏览器的较新版本大都已经支持标签。但对于WebGL而言,目前还只有Firefox4+和Chrome支持它。DOCTYPEhtml˃使用Canvas绘图canvas{border:1pxsoliddodgerblue;}您的浏览器不支持canvas。您的浏览器不支持canvas。

HTML5的元素提供了一组JavaScript API,让我们可以动态地创建图形和图像。

图形是在一个特定的上下文中创建的,而上下文对象目前有两种。第一种是2D上下文,可以执行原始的绘图操作,

比如:

  1. 设置填充、描边颜色和模式;
  2. 绘制矩形;
  3. 绘制路径;
  4. 绘制文本;
  5. 创建渐变和模式。

第二种是3D上下文,即WebGL上下文。WebGL是从OpenGLES2.0移植到浏览器中的,而OpenGLES2.0是游戏开发人员在创建计算机图形图像时经常使用的一种语言。WebGL支持比2D上下文更丰富和更强大的图形图像处理能力,

比如:

  1. 用GLSL编写的顶点和片段着色器;
  2. 支持类型化数组,即能够将数组中的数据限定为某种特定的数组类型;
  3. 创建和操作纹理。

    目前,主流浏览器的较新版本大都已经支持标签。同样地,这些版本的浏览器基本上也都支持2D上下文。

但对于WebGL而言,目前还只有Firefox4+和Chrome支持它。

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>使用Canvas绘图</title>  
    <style>canvas{  
            border:1px solid dodgerblue;  
        }  
    </style>  
</head>  
<body>  
<canvas id="drawing1" width="200" height="200">您的浏览器不支持canvas。</canvas>  
<canvas id="drawing2" width="200" height="200">您的浏览器不支持canvas。</canvas>  
<canvas id="drawing3" width="200" height="200">您的浏览器不支持canvas。</canvas>  
<canvas id="drawing4" width="200" height="200">您的浏览器不支持canvas。</canvas>  
<canvas id="drawing5" width="200" height="200">您的浏览器不支持canvas。</canvas>  
<canvas id="drawing6" width="600" height="200">您的浏览器不支持canvas。</canvas>  
<img src="result.png" id="result" hidden/>  
<script src="l15.js"></script>  
</body>  
</html>  
/** 
 * 使用Canvas绘图 
 */  

/** 
 * 15.1 基本用法 
 */  
    //绘制图形  
var drawing1=document.getElementById("drawing1");  
//确定浏览器支持<canvas>元素  
if(drawing1.getContext){  
    var context1=drawing1.getContext("2d");  
    var imageElem=document.getElementById("result");  
    context1.drawImage(imageElem,10,10,180,180);  
}  

/** 
 *15.2 2D上下文 
 */  
//15.2.1 填充和描边  
//15.2.2 绘制矩形  
var drawing2=document.getElementById("drawing2");  
if(drawing2.getContext){  
    var context2=drawing2.getContext("2d");  
    //绘制矩形  
    context2.fillStyle="#ff0000";  
    context2.fillRect(10,10,50,50);  
    //绘制半透明的蓝色矩形  
    context2.fillStyle="rgba(0,0,255,0.5)";  
    context2.fillRect(50,50,50,50);  
    //绘制红色描边矩形  
    context2.strokeStyle="#ff0000";  
    context2.strokeRect(130,10,50,50);  
    //绘制半透明的蓝色描边矩形  
    context2.strokeStyle="rgba(0,0,255,0.5)";  
    context2.strokeRect(130,70,50,50);  
    //描边线条的属性有lineWidth、lineCap、lineJoin  
    context2.lineWidth=2;  
    //在两个矩形重叠的地方清除一个小矩形  
    context2.clearRect(50,50,10,10);  
}  
//15.2.3 绘制路径  
//15.2.4 绘制文本  
//15.2.5 变换  
//绘制一个时钟表盘:  
var drawing3=document.getElementById("drawing3");  
if(drawing3.getContext){  
    var context3=drawing3.getContext("2d");  
    //开始路径  
    context3.beginPath();  
    //绘制外圆  
    context3.arc(100,100,99,0,2*Math.PI,false);  
    //绘制内圆  
    context3.moveTo(194,100);  
    context3.arc(100,100,94,0,2*Math.PI,false);  
    //绘制文本  
    context3.font="bold 14px Arial";  
    context3.textAlign="center";  
    context3.textBaseline="middle";  
    context3.fillText("12",100,20);  
    context3.fillText("3",180,100);  
    context3.fillText("6",100,180);  
    context3.fillText("9",20,100);  
    //变换原点  
    context3.translate(100,100);  
    //旋转表针  
    context3.rotate(1);  
    //绘制分针  
    context3.moveTo(0,0);  
    context3.lineTo(0,-85);  
    //绘制时针  
    context3.moveTo(0,0);  
    context3.lineTo(-65,0);  
    //描边路径  
    context3.stroke();  
}  
//15.2.6 绘制图像  
//15.2.7 阴影  
var context4=document.getElementById("drawing4").getContext("2d");  
//设置阴影  
context4.shadowOffsetX=5;  
context4.shadowOffsetY=5;  
context4.shadowBlur=4;  
context4.shadowColor="rgba(0,0,0,0.5)";  
//绘制红色矩形  
context4.fillStyle="#ff0000";  
context4.fillRect(10,10,50,50);  
//绘制蓝色矩形  
context4.fillStyle="rgba(0,0,255,1)";  
context4.fillRect(30,30,50,50);  
//15.2.8 渐变  
var context5=document.getElementById("drawing5").getContext("2d");  
var gradient=context5.createLinearGradient(30,30,70,70);  
gradient.addColorStop(0,"white");  
gradient.addColorStop(1,"black");  
//绘制红色矩形  
context5.fillStyle="#ff0000";  
context5.fillRect(10,10,50,50);  
//绘制渐变矩形  
context5.fillStyle=gradient;  
context5.fillRect(30,30,50,50);  
//15.2.9 模式  
var context6=document.getElementById("drawing6").getContext("2d");  
var imageEle=document.getElementById("result");  
var pattern=context6.createPattern(imageEle,"repeat");  
//绘制矩形  
context6.fillStyle=pattern;  
context6.fillRect(0,0,560,150);  
//15.2.10 使用图像数据  
//getImageData()、putImageData()  
//15.2.11 合成  
//globalAlpha、globalCompositionOperation  

/** 
 * 15.3 WebGL 
 */  
//目前只适合实验性地学习,不适合真正开发和应用。  

感谢原作者的辛苦总结!
原文地址:

http://blog.csdn.net/bboyjoe/article/details/50381006

免责声明:文章转载自《js基础(使用Canvas画图)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇k8s zookeeper安装(集群版与非集群版)ubuntu 下安装boost库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

原生JS 和 JQ 获取滚动条的高度,以及距离顶部的高度

JQ:相对比较简便 获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 : $(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 : $(document).width(); 浏览器当前窗口...

js给select下拉框赋值触发change事件

感谢作者的无私分享! 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/Tong__wei/article/details/96289555HTML: <select οnchange="selectChange()">     <...

JS向后台传递json数组对象

           var Obj = [];            //一下代码可以循环插入            var returnObj = new Object();//创建一个对象 returnObj.id = “123”;             returnObj.money = 456“”...

在webView 中使用JS 调用 Android / IOS的函数 Function

最近做一个项目,混合了NativeCode 和 HTML,为了便于JS 调用App的一些方法,统一封装一个Js方法,记录如下 Android 端首先要再WebView中允许JS的调用 WebView myWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = myW...

js原型和原型链(用代码理解代码)

众所周知js原型及原型链是很多开发者的一个疼点(我也不例外),我也曾多次被问起,也问过不少其他人,如果在自己没有真正的去实践和理解过;那么突然之间要去用最简单的话语进行概述还真不是一件容易的事情;其实工作中看似神秘的js原型也并不是那么难以理解,最终其目的无非是为了达到方法、属性共享代码重用的目的;在我所了解的编程语言中都会用到object这个最顶层对象,...

HTML5触屏版多线程渲染模板技术分享

  前言: 了解js编译原理的屌丝们都知道,js是单线程的,想当年各路神仙为了实现js的多线程,为了解决innerHTML输出大段HTML卡页面的顽疾,纷纷设计了诸如假冒的“多线程“实现,我自己也在写开源框架KitJs时候,写过类似的组件http://www.cnblogs.com/xueduanyang/archive/2012/05/30/252642...