这个元素负责在页面中设定一个区域,然后就可以通过JS动态的在这个区域中绘制图形。

<canvas>由几组API构成。

<canvas>还建议一个名为WebGL的3D上下文

(1)基本用法

<canvas id="drawing" width="200" height="200">a drawing of something</canvas>

var drawing = document.getElementById("drawing");

if(drawing.getContext){

  var context = drawing.getContext("2d");//为html规范之外的元素创建默认的html元素

}

(2)2D上下文

填充和描边

var drawing = document.getElementById("drawing");

if(drawing.getContext){

  var context = drawing.getContext("2d");//为html规范之外的元素创建默认的html元素

  context.strokeStyle = "red";

  context.fillStyle = "#0000ff";

}

绘制矩形

context.fillStyle = "#ff0000";

context.fillRect(10,10,50,50);

context.strokeStyle = "rgba(0,0,255,0.5)";//描边

context.strokeRect(30,30,50,50);

绘制路径

通过路径可以创造出复杂的形状和线条。

//开始路径

context.beginPath();

//绘制外圆

context.arc(100,100,99,0,2*Math.PI,false);

//绘制内圆

context.moveTo(194,100);

context.arc(100,100,94,0,2*Math.PI,false);

//绘制分针

context.moveTo(100,100);

context.lineTo(100,15);

//绘制时针

context.moveTo(100,100);

context.lineTo(35,100);

//描边路径

context.stroke();

绘制文本

context.font = "bold 14px Arial";

context.textAlign = "center";

context.textBaseline = "middle";

context.fillText("12",100,20);

变换

//开始路径

context.beginPath();

//绘制外圆

context.arc(100,100,99,0,2*Math.PI,false);

//绘制内圆

context.moveTo(194,100);

context.arc(100,100,94,0,2*Math.PI,false);

//变换原点

context.translate(100,100);

//绘制分针

context.moveTo(0,0);

context.lineTo(0,-85);

//绘制时针

context.moveTo(0,0);

context.lineTo(-65,0);

//描边路径

context.stroke();

====

context.rotate(1);

save();保存

restore();返回

绘制图像

var image = document.images[0];

context.drawImage(image,10,10);

context.drawImage(image,50,10,20,30);

context.drawImage(image,0,10,50,50,0,100,40,60);

//取得图像的数据URI

var imgURI = drawing.toDataURL("image/png");

//显示图像

var image = document.createElement("img");

image.src = imgURI;

document.body.appendChild(image);

阴影

阴影需要统一设置,在绘制前设置

//设置阴影

context.shadowOffsetX = 5;

context.shadowOffsetY = 5;

context.shadowBlur =4;

context.shadowColor = "rgba(0,0,0,0.5)";

渐变

var gradient = context.createLinearGradient(30,30,70,70);

gradient.addColorStop(0,"white");
gradient.addColorStop(1,"black");
 
context.fillStyle = gradient;
context.fillRect(30,30,50,50);
径向渐变
var gradient = context.createRadialGradient(55,55,10,55,55,30);
gradient.addColorStop(0,"white");
gradient.addColorStop(1,"black");

模式

是重复的图像。

var image = document.images[0];

pattern = context.createPattern(image,"repeat");

context.fillStyle = pattern;

context.fillRect(10,10,150,150);

使用图像数据

var image = document.images[0];

//绘制原始图像

context.drawImage(image,0,0);

//取得图像数据

imageData = context.getImageData(0,0,image.width,image.height);

data =imageData.data;

//回写图像数据并显示结果

imageData.data = data;

context.putImageData(imageData,0,0);

合成

//修改全局透明度

context.globalAlpha = 0.5;

//重置全局透明度

context.globalAlpha = 0;

WebGL是针对3D上下文。由于显卡,系统等原因,好多不支持。

canvas画图的更多相关文章

  1. html5之canvas画图基础

    HTML5+CSS3的好处是,你可以编写一个页面分别用于不同的平台,只需要设置不同的css样式就可以了,现在基本主流浏览器都支持全新的HTML5和CSS3,因为它的跨平台开发.因为是原生代码所以它的页 ...

  2. Canvas画图在360浏览器中跑偏的问题

    问题描述,canvas画图的js代码中编写的是画正方形的代码,结果在360浏览器上变成了长方形,不知道怎么回事,请问各位大神是否遇到过此类问题? <!DOCTYPE html> <h ...

  3. h5 canvas 画图

    h5 canvas 画图 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

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

    点击查看原文地址: html5 Canvas画图3:1px线条模糊问题 本文属于<html5 Canvas画图系列教程> 接上一篇canvas画线条教程 上次我们讲到,canvas有时候会 ...

  5. 使用 canvas 画图时图像文字模糊的解决办法

    最近在使用 canvas 画图的时候,遇到了图像文字模糊的问题,解决思路就是根据分辨率创建不同尺寸的画布.以下是创建高分辨率画布的代码: /** * 创建高分辨率画布 * @param w 画布宽 * ...

  6. html5 canvas 画图移动端出现锯齿毛边的解决方法

    使用HTML5的canvas元素画出来的.在移动端手机上测试都发现画图有一点锯齿问题 出现这个问题的原因应该是手机的宽是720像素的, 而这个canvas是按照小于720像素画出来的, 所以在720像 ...

  7. HTML5 canvas画图

    HTML5 canvas画图 HTML5 <canvas> 标签用于绘制图像(通过脚本,通常是 JavaScript).不过,<canvas> 元素本身并没有绘制能力(它仅仅是 ...

  8. HTML5 Canvas画图与动画学习59例

    HTML5 Canvas画图与动画学习59例 学习HTML5 动画,画图的好资料. HTML5 Canvas画图与动画学习59例

  9. html Canvas 画图 能够选择并能移动

    canvas 画图,能够选中所画的图片并且能够随意移动图片 <html xmlns="http://www.w3.org/1999/xhtml"> <head r ...

  10. 毕业设计总结(1)-canvas画图

    去年6月底完成的毕业设计,到现在也才开始给它做个总结,里面有很多可以学习和借鉴的东西. 我的毕业设计的题目是“一种路径规划算法的改进与设计”,具体的要求可参见下面的表格: 题目 一种路径规划算法的改进 ...

随机推荐

  1. JNI只C性能测试

    深入学习JNI之前,介绍一个比较好的学习文档:jni详细教程.我这里只是一个Demo测试性能,至于入门教程请看我前一篇博文. Demo展示 这个Demo用于从小到大的冒泡排序,App.java代码: ...

  2. 在 JavaScript 中 prototype 和 __proto__ 有什么区别

    本文主要讲三个 问题 prototype 和 proto function 和 object new 到底发生了什么 prototype 和 proto 首先我们说下在 JS 中,常常让我们感到困惑的 ...

  3. 详解Swing中JTree组件的功能

    JTree组件是另外一个复杂组件,它不像 JTable 那样难用,但是也不像 JList 那么容易.使用 JTree 时麻烦的部分是它要求的数据模型. JTree组件的功能来自树的概念,树有分支和叶子 ...

  4. Struts中数据处理

    对数据操作的3种方法(把数据保存到域中): 方式1:直接获取servletApi 核心类:ServletActionContext提供的静态方法 /** * 方式1:拿到servletApi,执行操作 ...

  5. wemall app商城源码中基于JAVA的Android异步加载图片管理器代码

    wemall doraemon是Android客户端程序,服务端采用wemall微信商城,不对原商城做任何修改,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可随意定制修改.本文分享其中 ...

  6. 初次接触java中的递归算法

    一道关于兔子繁衍的编程题: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 自己考虑了挺久,思路出现了问题,甚至连 ...

  7. 使用git部署服务器

    每回上传服务器是把我的web项目打包成war上传到服务器根目录下,总是觉得很麻烦,并且每次就算只添加或修改了一个文件,都要把整个服务器war包上传.于是我学着用git部署我的web项目 下面是详情: ...

  8. Docker 使用指南 (四)—— 数据卷的使用

    一.数据卷的使用 有时候需要使用数据库,但是又希望它的数据能保存在本地,Docker中提供了数据卷可以供你方便的操作数据.数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用 ...

  9. JAVA源码剖析(容器篇)HashMap解析(JDK7)

    Map集合: HashMap底层结构示意图: HashMap是一个“链表散列”,其底层是一个数组,数组里面的每一项都是一条单链表. 数组和链表中每一项存的都是一“Entry对象”,该对象内部拥有key ...

  10. javascript中常用的

    1.javascript中构造equals().trim()方法并应用 String.prototype.Trim = function() { return this.replace(/(^\s*) ...