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]用于提取组内最新数据,左连接,内连接,not exist三种方案中,到底谁最快?
本作代码下载:https://files.cnblogs.com/files/xiandedanteng/LeftInnerNotExist20191222.rar 人们总是喜欢给出或是得到一个简单明 ...
- 笔记-JFB:业务流程梳理
ylbtech-笔记-JFB:业务流程梳理 1.家政员找工作-->填写基本信息-->上岗申请--> 1.返回顶部 1. 2. 2. 2.返回顶部 3.返回顶部 4.返回顶部 ...
- Anaconda(二)
三.配置依赖包仓库 conda在安装依赖包的时候会检测已有包的版本与需要安装的版本是否匹配.以及相关包更新后的版本与现有的其他包是否会造成冲突. 添加清华镜像源(依赖包仓库),命令行中直接使用以下命令 ...
- Elasticsearch学习笔记——索引模板
在索引模板里面,date类型的字段的format支持多种类型,在es中全部会转换成long类型进行存储,参考 https://zhuanlan.zhihu.com/p/34240906 一个索引模板范 ...
- 【Linux基础】vim如何显示文件名称
前言 使用vim的时候有时候需要查看文件路径或者名称,本文对此进行记录. 操作过程 一般模式下 method1: :f method2: 快捷键CTRL+g/G(大小写均可); method3: 查看 ...
- Java之字符和字符串
字符类型 字符类型char是基本数据类型,它是character的缩写.一个char保存一个Unicode字符: char c1='A'; char c2='中'; 因为Java在内存中总是使用Uni ...
- 【Spring Cloud学习之六】断路器-Hystrix
环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 Spring Cloud 1.2 一.服务雪崩1.什么是服务雪崩分布式系统中经常会出现某个基础服务不可用造成整个系统不 ...
- Spring Cloud 微服务技术整合
微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些 ...
- 解决net core mvc 中文乱码问题
在Startup 配置文件下的ConfigureServices方法中添加: services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.All ...
- 如何在jupyter中使用Python2和Python3
首先通过 pip2 install ipython notebook pip3 install ipython notebook 分别安装ipython notebook,安装命令还是推荐使用国内的豆 ...