canvas实现酷炫气泡效果
canvas实现动画主要是靠设置定时器(setinterval())和定时清除画布里的元素实现,canvas动画上手很简单,今天可以自己动手来实现一个酷炫气泡效果。
- 气泡炸裂效果(类似水面波纹)

代码如下:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>canvas实现气泡效果</title>
<style>
*{
margin: 0;
padding: 0;
}
html,body{
height: 100%;
overflow: hidden;
background: gray;
}
canvas{
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
background: white;
}
</style>
<script>
window.onload=function(){
var oc=document.querySelector("canvas");
if(oc.getContext){
var ctx=oc.getContext("2d");
// 定义一个数组,用来保存canvas中各个圆的信息;
var arr=[];
//随机取出数组中的圆,绘制在canvas中;
setInterval(function(){
for(var i=0;i<arr.length;i++){
arr[i].r++;
arr[i].apl-=0.01;
if(arr[i].apl<=0){
arr.splice(i,1);
}
}
ctx.clearRect(0,0,oc.width,oc.height);
for(var i=0;i<arr.length;i++){
ctx.save();
ctx.fillStyle="rgba("+arr[i].red+","+arr[i].green+","+arr[i].blue+","+arr[i].apl+")";
ctx.beginPath();
ctx.arc(arr[i].x,arr[i].y,arr[i].r,0,2*Math.PI);
ctx.fill();
ctx.restore();
}
},1000/60);
// 向数组中随机注入圆的信息;
setInterval(function(){
var red=Math.round(Math.random()*255);
var green=Math.round(Math.random()*255);
var blue=Math.round(Math.random()*255);
var apl=1;
var x=Math.random()*oc.width;
var y=Math.random()*oc.height;
var r=10;
arr.push(
{
red:red,
green:green,
blue:blue,
apl:apl,
x:x,
y:y,
r:r
}
);
},50);
}
}
</script>
</head>
<body>
<canvas width="400" height="400"></canvas>
</body>
</html>
- 气泡上升效果

代码如下:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>canvas实现气泡效果</title>
<style>
*{
margin: 0;
padding: 0;
}
html,body{
height: 100%;
overflow: hidden;
background: gray;
}
canvas{
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
background: white;
}
</style>
<script>
window.onload=function(){
var oc=document.querySelector("canvas");
if(oc.getContext){
var ctx=oc.getContext("2d");
// 定义一个数组,用来保存canvas中各个圆的信息;
var arr=[];
//随机取出数组中的圆,绘制在canvas中;
setInterval(function(){
for(var i=0;i<arr.length;i++){
arr[i].r++;
arr[i].apl-=0.01;
if(arr[i].apl<=0){
arr.splice(i,1);
}
}
ctx.clearRect(0,0,oc.width,oc.height);
for(var i=0;i<arr.length;i++){
ctx.save();
ctx.fillStyle="rgba("+arr[i].red+","+arr[i].green+","+arr[i].blue+","+arr[i].apl+")";
ctx.beginPath();
ctx.arc(arr[i].x,arr[i].y,arr[i].r,0,2*Math.PI);
ctx.fill();
ctx.restore();
}
},1000/60);
// 向数组中随机注入圆的信息;
setInterval(function(){
var red=Math.round(Math.random()*255);
var green=Math.round(Math.random()*255);
var blue=Math.round(Math.random()*255);
var apl=1;
var x=Math.random()*oc.width;
var y=Math.random()*oc.height;
var r=10;
arr.push(
{
red:red,
green:green,
blue:blue,
apl:apl,
x:x,
y:y,
r:r
}
);
},50);
}
}
</script>
</head>
<body>
<canvas width="400" height="400"></canvas>
</body>
</html>
canvas实现酷炫气泡效果的更多相关文章
- iOS酷炫动画效果合集
iOS酷炫动画效果合集 源码地址 https://github.com/YouXianMing/Animations 效果绝对酷炫,包含了多种多样的动画类型,如POP.Easing.粒子效果等等,虽然 ...
- html5+Canvas实现酷炫的小游戏
最近除了做业务,也在尝试学习h5和移动端,在这个过程中,学到了很多,利用h5和canvas做了一个爱心鱼的小游戏.点这里去玩一下 PS: 貌似有点闪屏,亲测多刷新两下就好了==.代码在本地跑都不会闪, ...
- 基于ViewPager的一些酷炫切换效果
1.ViewPager可以用于实现类似banner的功能,我曾经在“时间超市”项目中使用过.但如何在此基础上实现一些切换的酷炫效果呢?今天细细品读了鸿洋大神的相关博文,终于学会了如何自定义切换效果. ...
- 用canvas制作酷炫射击游戏--part3
今天介绍下 游戏中的sprite模块,也就是构建玩家及怪物的模块.有了这个模块,就可以在咱们的游戏里加入人物了. 想必用过css的朋友都知道sprite,一种将需要加载的图片拼接在一张图里以减少请求的 ...
- 用canvas制作酷炫射击游戏--part1
好久没写博客了,因为过年后一直在学游戏制作方面的知识.学得差不多后又花了3个月时间做了个作品出来,现在正拿着这个作品找工作. 作品地址:https://betasu.github.io/Crimonl ...
- 用canvas制作酷炫射击游戏--part2
今天这一部分主要讲游戏的实现原理与游戏循环的代码实现. 先说原理,大家都看过动画吧.在我看来,游戏就是玩家能人为控制动画剧情发展方向的动画.所以,我们的游戏引擎其实说白了就是个动画引擎再加上鼠标事件. ...
- HTML5 Canvas玩转酷炫大波浪进度图
如上图所见,本文就是要实现上面那种效果. 由于最近AlloyTouch要写一个下拉刷新的酷炫loading效果.所以首选大波浪进度图. 首先要封装一下大波浪图片进度组件.基本的原理是利用Canvas绘 ...
- 纯CSS3实现的一些酷炫效果
之前在网上看到一些用纯CSS3实现的酷炫效果,以为实现起来比较困难,于是想看看具体是怎么实现的. 一.笑脸猫动画 实现效果如下: 这个实现起来确实比较麻烦,很多地方需要花时间,有耐心地调整. 1.先看 ...
- css3实现酷炫的3D盒子翻转效果
简介 运用css3先在平面空间组成立方体盒子,再让整个盒子翻转起来,先来张效果图: 步骤 1.先用css将6张图片摆成下图的样子: 下面就是通过css3的3D变换将每个面进行翻转,使之成为一个立体的盒 ...
随机推荐
- SQL,NoSQL和NewSQL的区别
SQL(Structured Query Language):数据库,指关系型数据库.主要代表:SQL Server.Oracle.MySQL.PostgreSQL. NoSQL(Not Only S ...
- 【java编程】vo、po、dto、bo、pojo、entity、mode如何区分
Java Bean:一种可重用组件,即“一次编写,任何地方执行,任何地方重用”.满足三个条件 类必须是具体的和公共的 具有无参构造器 提供一致性设计模式的公共方法将内部域或暴露成员属性 VO valu ...
- 如何设置github的ssh key
目录 Generate SSH key in putty add key to github git setting How to add SSH key to github Generate SSH ...
- 【转】Revit二次开发——读取cad中的文字信息
Revit读取cad的文字信息需要借助Teigha的开源dll,在程序中添加下图中红色框的dll文件的引用,其他的dll文件全部放在同一个文件夹中即可,运行的时候,会自动把这些dll文件全部复制到bi ...
- C++ Set运用实例
C++ Set运用实例 #include <iostream> #include <set> #include <algorithm> #include <i ...
- MacOSX 虚拟机与宿主机的网络配置
环境:MacOSX.VMware Fusion11.5.CentOS6 比较重要的两个网卡 安装虚拟机后,宿主机会多出几个网卡,其中vmnet1对应的Bridge(桥接方式),vmnet8对应NAT方 ...
- MySQL数据类型:UNSIGNED注意事项(转)
原文地址:https://www.cnblogs.com/blankqdb/archive/2012/11/03/blank_qdb.html 1. UNSIGNED UNSIGNED属性就是将数字类 ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器版本打包方法介绍
EasyDSS流媒体解决方案是一套集流媒体点播.转码.管理.直播.录像.检索.时移回看于一体的一套完整的商用流媒体解决方案.EasyDSS软件以压缩包的形式提供给客户使用,同时支持Linux和 Win ...
- JAVA SpringBoot2 整合 ueditor 的 并实现前后端分离
1,下载 jsp 版本的 百度编辑器,点击此处下载 2,解压文件,解压后目录如下 3,我们将 jsp 目录暂时移动到别的地方,剩下的文件作为一个 H5 前端项目使用,笔者这边导入到 idea 进行开发 ...
- Invoke 和 BeginInvoke 的真正涵义
BeginInvoke 方法真的是新开一个线程进行异步调用吗? 参考以下代码: public delegate void treeinvoke(); private void UpdateTreeVi ...