当前位置:首页 > 日记 > 正文

JavaScript之Canvas_动力节点Java学院整理

JavaScript之Canvas_动力节点Java学院整理

Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表、动画等。

没有Canvas的年代,绘图只能借助Flash插件实现,页面不得不用JavaScript和Flash进行交互。有了Canvas,我们就再也不需要Flash了,直接使用JavaScript完成绘制。

一个Canvas定义了一个指定尺寸的矩形框,在这个范围内我们可以随意绘制:

<canvas id="test-canvas" width="300" height="200"></canvas>

由于浏览器对HTML5标准支持不一致,所以,通常在<canvas>内部添加一些说明性HTML代码,如果浏览器支持Canvas,它将忽略<canvas>内部的HTML,如果浏览器不支持Canvas,它将显示<canvas>内部的HTML:

<canvas id="test-stock" width="300" height="200">  <p>Current Price: 25.51</p></canvas>

在使用Canvas前,用canvas.getContext来测试浏览器是否支持Canvas:

<!-- HTML代码 --><canvas id="test-canvas" width="200" heigth="100">  <p>你的浏览器不支持Canvas</p></canvas>
'use strict';var canvas = document.getElementById('test-canvas');if (canvas.getContext) {  alert('你的浏览器支持Canvas!');} else {  alert('你的浏览器不支持Canvas!');}

getContext('2d')方法让我们拿到一个CanvasRenderingContext2D对象,所有的绘图操作都需要通过这个对象完成。

var ctx = canvas.getContext('2d');

如果需要绘制3D怎么办?HTML5还有一个WebGL规范,允许在Canvas中绘制3D图形:

gl = canvas.getContext("webgl");

本节我们只专注于绘制2D图形。

绘制形状

我们可以在Canvas上绘制各种形状。在绘制前,我们需要先了解一下Canvas的坐标系统:

Canvas的坐标以左上角为原点,水平向右为X轴,垂直向下为Y轴,以像素为单位,所以每个点都是非负整数。

CanvasRenderingContext2D对象有若干方法来绘制图形:

'use strict';var  canvas = document.getElementById('test-shape-canvas'),ctx = canvas.getContext('2d');ctx.clearRect(0, 0, 200, 200); // 擦除(0,0)位置大小为200x200的矩形,擦除的意思是把该区域变为透明ctx.fillStyle = '#dddddd'; // 设置颜色ctx.fillRect(10, 10, 130, 130); // 把(10,10)位置大小为130x130的矩形涂色// 利用Path绘制复杂路径:var path=new Path2D();path.arc(75, 75, 50, 0, Math.PI*2, true);path.moveTo(110,75);path.arc(75, 75, 35, 0, Math.PI, false);path.moveTo(65, 65);path.arc(60, 65, 5, 0, Math.PI*2, true);path.moveTo(95, 65);path.arc(90, 65, 5, 0, Math.PI*2, true);ctx.strokeStyle = '#0000ff';ctx.stroke(path);

绘制文本

绘制文本就是在指定的位置输出文本,可以设置文本的字体、样式、阴影等,与CSS完全一致:

'use strict';var  canvas = document.getElementById('test-text-canvas'),ctx = canvas.getContext('2d');ctx.clearRect(0, 0, canvas.width, canvas.height);ctx.shadowOffsetX = 2;ctx.shadowOffsetY = 2;ctx.shadowBlur = 2;ctx.shadowColor = '#666666';ctx.font = '24px Arial';ctx.fillStyle = '#333333';ctx.fillText('带阴影的文字', 20, 40);

Canvas除了能绘制基本的形状和文本,还可以实现动画、缩放、各种滤镜和像素转换等高级操作。如果要实现非常复杂的操作,考虑以下优化方案:

  1. 通过创建一个不可见的Canvas来绘图,然后将最终绘制结果复制到页面的可见Canvas中;
  2. 尽量使用整数坐标而不是浮点数;
  3. 可以创建多个重叠的Canvas绘制不同的层,而不是在一个Canvas中绘制非常复杂的图;
  4. 背景图片如果不变可以直接用<img>标签并放到最底层。

相关文章

vue2.0开发入门笔记之.vue文件的生

vue2.0开发入门笔记之.vue文件的生

文件,入门,笔记,电脑软件,vue,这几天新项目用vue2.0开发,由于之前没用过vue,拿到项目框架看到都是.vue文件,不知道怎么用,以下是关于.vue文件的发现:1、一个.vue文件是一个封装的组件,在.vue文件里可以写 html, css, js其中template 中写html 代…

jQuery实现的手风琴侧边菜单效果

jQuery实现的手风琴侧边菜单效果

菜单,手风琴,侧边,效果,电脑软件,本文实例讲述了jQuery实现的手风琴侧边菜单效果。分享给大家供大家参考,具体如下:动手做了一个简单手风琴菜单,上图:点击 B 可收缩 C 列表,点击 C 改变自身和父节点 B 的样式,悬浮时均有不同的样式改变。先看页面…

js设计模式之结构型享元模式详解

js设计模式之结构型享元模式详解

享元模式,设计模式,结构型,详解,电脑软件,运用共享技术有效地支持大量的细粒度的对象,避免对象间拥有相同内容造成多余的开销。享元模式主要是对其数据、方法共享分离,将数据和方法分成内部数据、内部方法和外部数据、外部方法。内部方法与内…

jQuery点击头像上传并预览

jQuery点击头像上传并预览

头像上传,电脑软件,jQuery,先给大家展示下效果图: HTML代码<div class="img_show img_show1"> <img src="img2/img06.jpg" width="103" height="103" alt=""> <input type="file" class="upfile" accept="*/*"></div>jQue…

http200、301、304等状态码详解

http200、301、304等状态码详解

状态码,详解,电脑软件,当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求HTTP状态码的英文为HTTP Status…

React中jquery引用的实现方法

React中jquery引用的实现方法

方法,引用,电脑软件,React,jquery,在React中引用Jquery比较好玩,获取元素的数据更多1.引入方法举例:import $ from 'jquery';import { Button } from 'antd';class testJquery extends React.Component {  constructor(props) {   …

如何将应用所有的PPT页面

如何将应用所有的PPT页面

页面,如何将,图片,电脑软件,PPT,  快速将图片应用到所有PPT页面,有两种方法可以解决这个问题。第一种用母板。第二种用PPT背景功能。以下是小编为您带来的关于将图片应用所有的PPT页面,希望对您有所帮助。将图片应用所有的PPT页面方法1:母板…

PPT如何排版才能突出中心主题PPT排

PPT如何排版才能突出中心主题PPT排

方法,主题,中心,技巧,电脑软件,  好的ppt会让人一眼就抓住重点,不会让观众在不重要的内容上浪费太多的时间而忽视演讲者的演讲。也行你已经知道如何吸引观众的眼球,但是你是否了解如何快速抓住观众的心呢?以下小编整理的PPT突出中心的排版…

Webpack实现按需打包Lodash的几种

Webpack实现按需打包Lodash的几种

详解,按需,几种方法,电脑软件,Webpack,前言在数据操作时,Lodash 就是我的弹药库,不管遇到多复杂的数据结构都能用一些函数轻松拆解。ES6 中也新增了诸多新的对象函数,一些简单的项目中 ES6 就足够使用了,但还是会有例外的情况引用了少数的 Loda…

清空元素html |  innerHTML= 与 em

清空元素html | innerHTML= 与 em

推荐,元素,清空,区别,电脑软件,一、清空元素的区别 1、错误做法一: $("#test").html("");//该做法会导致内存泄露 2、错误做法二: $("#test")[0].innerHTML=""; ;//该做法会导致内存泄露 3、正确做…

qq安全中心如何设置禁止登陆游戏qq

qq安全中心如何设置禁止登陆游戏qq

方法,安全中心,登录,设置,游戏,  如果我们不喜欢玩qq游戏,为了保护自己qq账号的安全,我们可以在qq安全中心中设置禁止登陆游戏。你知道qq安全中心如何设置禁止登陆游戏吗?下面就让小编告诉大家qq安全中心设置禁止登陆游戏 的方法。qq安全中…

ppt如何添加重叠动画效果图解

ppt如何添加重叠动画效果图解

动画效果,方法,重叠,叠加,电脑软件,  你知道在ppt里怎样设置叠加动画效果 吗?对于大多数人来说还是不太懂添加叠加动画的方法,下面就让小编告诉你ppt叠加动画效果的方法,欢迎大家来到学习。ppt添加叠加动画效果的方法一ppt添加叠加动画效果…