整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

16个富有创意的HTML5 Canvas动画特效集合

TML5技术正在不断的发展和更新,越来越多的开发者也正在加入HTML5阵营,甚至在移动开发上HTML5的地位也是越来越重要了。HTML5中的大部分动画都是通过Canvas实现,因为Canvas就像一块画布,我们可以通过调用脚本在Canvas上绘制任意形状,甚至是制作动画。本文就是收集了很多非常富有创意的一些canvas动画特效例子,这些例子都非常适合大家学习。

1、HTML5 Canvas高空瀑布下落湖面动画

HTML5 Canvas是一个神奇的网页技术,我们在Canvas画布上可以做任何有趣的事情。今天要分享的这款瀑布动画就是利用了HTML5 Canvas的相关特性实现的。记得我们在很早以前给大家介绍过一个超逼真的HTML5瀑布动画,也是在Canvas上完成的,非常酷。今天的这个瀑布更加美妙,因为它模拟了整个瀑布落入湖面的美妙景象,但是从逼真度上来说,还是稍微有待改进,不过个人觉得已经非常不错了。

2、HTML5/CSS3 3D雷达扫描动画

之前我们分享过一款纯CSS3雷达扫描模拟动画,看起来十分炫酷。这次我们分享的另外一款雷达动画更加让人震撼,它是基于HTML5和CSS3实现,它的一大特点是3D立体的视觉效果,鼠标点击雷达后将会展现一张3D立体地图,并且对地图上指定的几个地点进行坐标详细信息描述。

3、HTML5 Canvas 图片粒子沙漏动画

之前我们分享过很多款炫酷的HTML5 Canvas粒子动画,比如这款HTML5 Canvas 多种炫酷3D粒子图形动画和HTML5 Canvas文字粒子动画就都非常不错。这次我们要给大家带来的是一款基于HTML5 Canvas的图片粒子沙漏动画,主要是将一张图片打散成粒子,然后模拟沙漏将图片粒子掉落下来。

4、HTML5 Canvas火焰文字动画特效

HTML5技术确实挺强大的,特别是Canvas画布更是让网页动画变得丰富多彩。今天我们分享的是一款基于HTML5 Canvas的火焰文字动画特效,它可以让任意文字上方冒出密集的火焰,就像这些文字在熊熊燃烧一样。与这款火焰动画类似的还有以前分享的HTML5 Canvas幻彩火焰文字特效。

5、HTML5 WebGL粒子爆炸动画

之前我们分享过几款非常炫酷的HTML5粒子动画,比如这款HTML5像素粉碎图片动画和HTML5 Canvas彩色像素进度条动画,都是利用了HTML5的粒子渲染特性实现。今天我们要分享另外一款基于HTML5和WebGL的粒子爆炸动画特效,效果非常令人震撼。

6、超炫酷HTML5 Canvas蝴蝶飞舞动画

还记得很早以前我们为大家分享过一款非常炫酷的HTML5蝴蝶3D动画,它是基于HTML5和SVG实现的。这次我们要再一次为大家介绍另外一款同样也很酷的HTML5 Canvas蝴蝶飞舞动画,蝴蝶是在Canvas上绘制而成,利用HTML5的动画特性实现蝴蝶的飞舞,大家可以学习一下。

7、HTML5 Canvas 3D天体运行动画

今天我们要给大家分享一款基于HTML5 Canvas的3D星球天体运行动画,这里我们在Canvas画布上绘制了一颗较大的星球,然后在大星球周围有一圈很小的陨石区域,这些陨石会围绕着星球不停地旋转,而且配合黑色的背景后带有很强烈的3D视觉效果。

8、HTML5 Canvas 房间3D模型动画 可读取麦克风和摄像头

这是一款基于HTML5 Canvas的3D房间模拟动画,房间里有电视机、沙发、书柜、灯具以及一个人物模型,这些模型都是在Canvas上绘制而成。更重要的是,这款3D动画可以利用HTML5特性读取本地麦克风和摄像头,这样就可以通过摄像头将你自己投影到电视机上,看上去挺神奇的。

9、HTML5 Canvas 随机色彩光束爆炸动画特效

今天我们要给大家分享一款非常炫酷的HTML5 Canvas光束爆炸动画特效,它就像一朵光速爆炸开一样,动画效果非常绚丽。点击鼠标时,可以随机切换光速的颜色,当然你也可以在页面上放几个按钮,通过点击按钮来指定某一种颜色的光束。

10、HTML5 Canvas粒子数字时钟动画

还记得我们之前分享的几款HTML5粒子动画特效吗?比如这款HTML5文本输入框粒子动画特效和HTML5 Canvas生成粒子效果的人物头像,效果都非常炫酷。今天我们要给大家介绍的也是一款基于HTML5 Canvas的粒子数字时钟动画,时钟会读取本地时间,并且每变化一次均会出现粒子动画效果,这款粒子数字时钟非常适合在你的个性化博客中使用。

11、HTML5 Canvas 圆形进度条 显示数字百分比

记得以前为大家分享过很多样式各异的进度条插件,有基于jQuery的,也有基于HTML5和CSS3的。这次我们要介绍另外一款基于HTML5 Canvas的圆形进度条应用,在黑色的背景下,白色的进度条显得格外显眼,而且圆形中央会实时显示当前进度的数字百分比,非常实用。

12、HTTML5 Canvas心电图动画 可多参数控制

今天要给大家分享另外一个超炫酷的HTML5 Canvas动画,它是一个心电图动画效果,程序运行时就会模拟心电图在屏幕上打印当前心跳信息。同时动画中带有一些开关按钮来控制心电图中的各个参数,动画相当逼真。

13、HTML5 Canvas 梦幻树生长动画

今天我们要为大家分享一款基于HTML5 Canvas的动画特效,它是一颗逐渐生长的梦幻大树,生长过程中树枝将会产生随机的色彩,让整一棵大树显得非常具有梦幻的效果。本实例利用了HTML5 Canvas的动画技术,实现了渐变式动画的特效。

14、CSS3实现五彩3D旋转星球

之前我们有分享过很多纯CSS3和HTML5实现的球体动画,比如这款HTML5 3D球体斑点运动动画和HTML5 Canvas 地球旋转3D动画都非常不错。今天要给大家分享另外一款超炫酷的CSS3五彩3D旋转星球,旋转起来的视觉效果相当震撼。

15、HTML5 Canvas闪亮的3D蓝宝石动画

几天前,我们向大家分享过一款基于HTML5 Canvas的3D钻石动画,制作得十分逼真。今天我们要分享另外一个基于HTML5 Canvas的3D蓝宝石动画,我们可以通过鼠标的拖拽来实现蓝宝石的各个视角的观察,并且通过鼠标滚轮来缩放宝石的大小,同时蓝宝石的表面会不时地发出闪亮的光芒,不得不说,Canvas在网页绘制方面真的是无所不能。

16、HTML5 Canvas 蓝色3D钻石旋转动画

今天我们要在HTML5 Canvas画布上绘制一颗高贵典雅的蓝色3D钻石,我们在Canvas画布上通过绘制很多个不同大小的多边形组成了一颗钻石,然后通过CSS3的颜色渐变特性让钻石的表面产生白色发光的特效,同样再利用CSS3的动画属性让钻石不停地旋转,展现出3D的视觉效果,非常炫酷。

以上就是16个富有创意的HTML5 Canvas动画特效集合,如果你对HTML5感兴趣,欢迎下载源码学习。

迎来到【畅哥聊技术】前端图形学相关技术文章,更多精彩内容持续更新中,敬请关注。

在传统的Dom操作中,我们要给一个元素去绑定一个事件是特别容易的事情,那么在canvas图形学中,我们无法直接给一个图形去添加一些鼠标事件,原因就是因为图形和dom元素有着本质的区别。

拿我们一用在用的小球为例。我们无法直接给小球绑定任何的鼠标事件,而其实在我们的实际项目开发过程中,有很多情况是需要我们通过鼠标去操作图形的,比如拖拽。

所以我们的做法是直接给画布元素(Canvas标签就是一个dom元素)去添加鼠标事件,然后再去映射到对应的图形上即可。

主要有两种方法去实现,下面我分别举例。

鼠标到圆心的距离和圆的半径的比较

从上面的图中我们可以看到,如果鼠标点落在了红色小球的位置,则小球没有被点击到,相反,如果是鼠标点落在了白色小圆上,那么小球则是被点击到了。

换成程序语言就是:如果鼠标和小球中心点的距离大于小球的半径,则没有点击到,否则小球被点击到了。

小球的半径(ball.r)我们知道了,现在我们要计算出鼠标点和小球圆心的距离。这个距离要怎么求呢?

这个应该很容易想到,数学中的直角三角形满足勾股定理。a*a + b*b = c*c,现在我们可以很容易计算出a,b

核心代码;

canvas.addEventListener('click',e=>{
		var x = e.pageX - canvas.offsetLeft;
		var y = e.pageY - canvas.offsetTop;
		var a = x - ball.x;
		var b = y - ball.y;
		var c = Math.sqrt(Math.pow(a,2)+Math.pow(b,2));
		if(c<=ball.r){
			alert('点中了')
		}else{
			alert('没有点中')
		}
})

这种方式原理很简单,就是判断两个点之间的距离和半径相比即可。这种方法只适合用于圆形的判断,如果是其它的图形,这种方法就行不通了。

那么接下来,我们换一种方式去实现,canvas给我们提供了原生的Api:

context.isPointInPath(x,y)

从字面上很好理解,就是判断一个点坐标(x,y)是否在某个路径内。

看似比我们第一种实现方法要简单得很多,接下来我们来改造一下我们的小球类。

我们在render方法中添加两个参数,pointX,pointY,然后判断这两个坐标对应的点是否在小球内,并将结果挂载到当前小球类的对象上面。

核心代码:

render(context,pointX,pointY) {
		let { x, y, r, scaleX, scaleY, fillStyle, strokeStyle, opacity} = this;
		context.save();
		context.strokeStyle = strokeStyle;
		context.fillStyle = fillStyle;
		context.translate(x, y);
		context.globalAlpha = opacity;
		context.scale(scaleX, scaleY);
		context.beginPath();
		context.arc(0, 0, r, 0, Math.PI * 2, false);

		if(pointX && pointY){

			this.isPointInPath = context.isPointInPath(pointX,pointY);

		}

		context.fill();
		context.stroke();
		context.restore();
		return this;
	}

实现效果:

分别点击两个小球,可分别触发对应的事件

点击事件的调用方法

完整的小球类的代码:

小球类

总结:

  1. 这里不仅是通过鼠标的点击事件,像mouseover mouseout些事件都是一样的道理,我们获取鼠标事件,其实是要获取到一个点坐标。
  2. 数学知识,通过勾股定理去计算两点之间的距离。
  3. 大家可能有发现,我写的小球类从一开始简单的绘制,到后面给小球添加新的属性和方法内部的改造。这些都不是一次性就能写完整的,而是随着项目的不断迭代,我们再去不断的完善我们的代码程序。

以上是今天所有的分享内容。喜欢的请点赞关注,不喜欢的解散。。。

这里是【畅哥聊技术】前端图形学相关技术文章,更多精彩内容持续更新中。。。

未完待续。。。

记得在过去的Web前端开发中,如果你需要绘图或者生成相关图形的话,使用Flash可能是你唯一或者说最强大的实现方式,而在近些年的技术热点HTML5标准中,(画布)能够更加方便的帮助你实现2D绘制图形图像及其各种动画效果功能。

首先我们先来了解一下什么是HTML Canvas?

我们可以在HTML中使用属性width和height来定义Canvas。但是实现Canvas的相关功能主要还依赖于Javascript实现,即HTML5 Canvas API。我们使用javascript来访问和控制Canvas相关的区域,比如调用相关绘图的方法,用来动态的生成需要的动画或者图形。

接下来我们来看看canvas的特性:

互动性:Canvas支持互动,可以很好的响应用户的操作,我们可以通过Javascript来监键盘,鼠标,及其触摸设备相关事件。

动 画:任何被canvas绘制的图形都可以添加动画,简单的弹跳球或者复杂的HTML5游戏都可以实现

灵活性:开发人员可以使用Canvas来绘制任何的内容,比如,直线,图形,文字,图片等,可以包含动画或者不包含。同时你可以添加音频或者视频浏览器支持:几乎所有的现代浏览器都支持,并且被广泛的各种设备支持,例如,桌面,平板,智能手机等等。

流行度:canvas目前很流行,很多的开发人员都使用它来开发类似游戏或者绘图类应用

web标准:只需要有浏览器就可以运行,而非flash或者silverlight,需要安装相关的插件

开发一次,任何浏览器都可以运行(当然,不包括老式浏览器)

可以使用免费拥有大量的开发工具及其类库。

使用HTML5 Canvas我们能开发那些相关产品或者应用呢?

1 可视化数据: 各类统计图表,比如:百度的echart

2 场景秀:用Canvas实现动态的广告效果能够非常融洽的跨平台运行。如:手机中微产品.在移动端兼容性很好。

3 游戏:canvas在基于Web的图像显示方面比Flash更加立体、更加精巧,canvas成为HTML5小游戏开发首选。现阶段h5做游戏,营业方式不是很明确. 25 超棒的 HTML5 Canvas 游戏。

4 其他可嵌入网站的内容 (多用于活动页面、特效):类似图表、音频、视频,还有许多元素能够更好地与Web融合,并且不需要任何插件。

5 趋势=> 模拟器: 无论从视觉效果还是核心功能方面来说,模拟器产品可以完全由JavaScript来实现。模拟真实硬件环境,如移动端各种类型手机.

6 趋势=> 远程计算机控制: Canvas可以让开发者更好地实现基于Web的数据传输,构建一个完美的可视化控制界面。

7 趋势=> 图形编辑器: Photoshop图形编辑器将能够100%基于Web实现。

如何使用HTML5 Canvas?

使用HTML5 canvas其实非常简单, 每一个canvas都拥有一个上下文(context)。使用它你可以来调用相关的画布方法。

<canvas id="mycanvas" width="500" height ="400">

<p>您的浏览器不支持HTML5 Canvas</p>

</canvas>

以上代码我们在HTML中添加了一个canvas标签,如果浏览器不支持canvas,会显示<p>标签的内容,当然,如果你需要支持老式浏览器你也可以使用flash或者其它方法来做一个替代的解决方案。

var canvas = document.getElementById('mycanvas'),

context = canvas.getContext('2d');

以上代码我们通过canvas取到2D的context。

在HTML5 Canvas的2D结构中,坐标(0,0)在左上方,这和传统的坐标不太一样。大家需要注意一下,如下图所示:

下面来说一下canvas的API:

canvas的主要属性和方法:

save():保存当前环境的状态

restore():返回之前保存过的路径状态和属性

createEvent()

getContext():返回一个对象,指出访问绘图功能必要的API

toDateURL():返回canvas图像的URL

颜色、样式和阴影属性和方法:

fillStyle:设置或返回用于填充绘画的颜色、渐变或模式

strokeStyle:设置或返回用于笔触的颜色、渐变或模式

shadowColor:设置或返回用于阴影的颜色

shadowBlur:设置或返回用于阴影的模糊级别

shadowOffsetX:设置或返回阴影距形状的水平距离

shadowOffsetY:设置或返回阴影距形状的垂直距离

createLinearGradient():创建线性渐变(用在画布内容上)

createPattern():在指定的方向上重复指定的元素

createRadialGradient():创建放射状/环形的渐变(用在画布内容上)

addColorStop():规定渐变对象中的颜色和停止位置

线条样式属性和方法

lineCap:设置或返回线条的结束端点样式

lineJoin:设置或返回两条线相交时,所创建的拐角类型

lineWidth:设置或返回当前的线段宽度

miterLimit:设置或返回最大斜接长度

Canvas的API-路径方法

fill():填充当前绘图(路径)

stroke():绘制已定义的路径

beginPath():起始一条路径,或重置当前路径

moveTo():把路径移动到画布中的指定点,不创建线条

closePath():创建从当前点回到起始点的路径

lineTo():添加一个新点,创建从该点到最后指定点的线条

clip():从原始画布剪切任意形状和尺寸的区域

quadraticCurveTo():创建二次贝塞尔曲线

bezierCurveTo():创建三次贝塞尔曲线

arc():创建弧/曲线(用于创建圆形或部分圆)

arcTo():创建两切线之间的弧/曲线

isPointInPath():如果指定的点位于当前路径中,返回布尔值

Canvas的API-转换方法

scale():缩放当前绘图至更大或更小

rotate():旋转当前绘图

translate():重新映射画布上的(0,0)位置

transform():替换绘图的当前转换矩阵

setTransform():将当前转换重置为单位矩阵,然后运行transform()

Canvas的API-文本属性和方法

font:设置或返回文本内容的当前字体属性

textAlign:设置或返回文本内容的当前对齐方式

textBaseline:设置或返回在绘制文本时使用的的当前文本基线

fillText():在画布上绘制"被填充的"文本

strokeText():在画布上绘制文本(无填充)

measureText():返回包含指定文本宽度的对象

Canvas的API-图像绘制方法

drawImage():向画布上绘制图像、画布或视频

Canvas的API-像素操作方法和属性

width:返回ImageData对象的宽度

height:返回ImageData对象的高度

data:返回一个对象,其包含指定的ImageData对象的图像数据

createImageData():创建新的、空白的I马哥Data对象

getImageData():返回ImageData对象,该对象为画布上指定的矩形复制像素数据

putImageData():把图像数据(从指定的ImageData对象)放回画布上

Canvas的API-图像合成属性

globalAlpha:设置或返回绘图的当前alpha或透明值

globalCompositeOperation:设置或返回新图像如何绘制到已有的图像上

快速高效的创建HTML5画布图形?

直接使用Canvas来绘制图形相对来说比较乏味并且麻烦,所以在现代的HTML5 Canvas中我们使用一些现成的第三方类库帮助我们多快好省的实现图形绘制的功能:Echart.js