<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>小球 喷泉运动</title>
<meta name="Keywords" content="关键词1,关键词2">
<meta name="description" content="果断,是一种教养和能力">
<!--响应式mate标签-->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black"> <style>
* {
padding:0;margin:0;
}
body{font-size: 14px;}
</style>
</head>
<body> <canvas id="canvas"></canvas> <script type="text/javascript">
window.onload = function(){
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d"); //定义画布样式
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
canvas.style.background = "#333"; var cw = canvas.width;
var ch = canvas.height; //定义小球个数
var ballNum = 360;
var r = 0.2;
//
var balls = [];
for(var i=0;i<ballNum;i++){
var ball = new Ball();
ball.x = cw/2;
ball.y = ch; ball.vy = Math.random()*-10-10;
ball.vx = Math.random()*2-1; ball.color = getRgb16();
ball.radius = rangeRandom(1,6);
balls.push(ball);
} function drawCanvas(ball){
cw = window.innerWidth;
ch = window.innerHeight; //每个小球方向的改变
ball.vy += r;
//每个小球的位置
ball.x += ball.vx;
ball.y += ball.vy; ball.color = getRgb16();
ball.radius = rangeRandom(1,6); //边界的控制
if(ball.y-ball.radius > ch ||
ball.y+ball.radius<0 ||
ball.x-ball.radius > cw ||
ball.x+ball.radius<0
){
//从新初始化
ball.x = cw/2;
ball.y = ch;
ball.vy = Math.random()*-10-10;
ball.vx = Math.random()*2-1;
}
ball.draw(context);
} setInterval(function () {
context.clearRect(0,0,cw,ch);
balls.forEach(function(ball){
drawCanvas(ball);
});
},33);
}; function Ball(){
this.x = 0;
this.y = 0;
this.vx = 0;
this.vy = 0;
this.radius = 6;
} Ball.prototype.draw = function(context){
context.beginPath();
context.fillStyle = this.color;
context.arc(this.x,this.y,this.radius,0,Math.PI*2);
context.fill();
}; function getRgb(){
//0-255
var r = tRandom(256);
var g = tRandom(256);
var b = tRandom(256);
return "rgb("+r+","+g+","+b+")";
} function getRgb16(){
//0-255
var r = tRandom(256).toString(16);
var g = tRandom(256).toString(16);
var b = tRandom(256).toString(16);
if(r.length<2)r=r+""+r;
if(g.length<2)g=g+""+g;
if(b.length<2)b=b+""+b;
return "#"+r+""+g+""+b;
} function rangeRandom(start,end){
return Math.floor(Math.random()*(end-start+1)+start);
} function tRandom(start){
return Math.floor(Math.random()*start);
}
</script>
</body> </html>

效果图:

IT技术和行业交流群 417691667

Canvas 实现七彩喷泉的更多相关文章

  1. canvas梦幻七彩泡泡

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...

  2. [js高手之路]html5 canvas动画教程 - 边界判断与小球粒子模拟喷泉,散弹效果

    备注:本文后面的代码,如果加载了ball.js,那么请使用这篇文章[js高手之路] html5 canvas动画教程 - 匀速运动的ball.js代码. 本文,我们要做点有意思的效果,首先,来一个简单 ...

  3. WPF 简易的喷泉效果

    这两天领导让我做个喷泉的效果,要把一个个UserControl从一个位置喷出,然后,最后落在最终需要在的位置. 喷泉效果说白了,就是两个步骤:1.放大,从0放大到需要的倍数:2.缩小,平移,从放大的倍 ...

  4. [js高手之路]html5 canvas动画教程 - 边界判断与反弹

    备注:本文后面的代码,如果加载了ball.js,那么请使用这篇文章[js高手之路] html5 canvas动画教程 - 匀速运动的ball.js代码. 边界反弹: 当小球碰到canvas的四个方向的 ...

  5. 基于Android的rgb七彩环颜色采集器

    代码地址如下:http://www.demodashi.com/demo/11892.html 一.前言. 在大学期间,看到这个rgb灯,蛮好奇的,这么漂亮的颜色采集,并且可以同步到设备rbg灯颜色, ...

  6. JavaScript图形实例:七彩线团

    1.线团图案 设立坐标计算公式为: X=R1*COS(3α)+R2*COS(14α)) Y=R1*SIN(3α)+R2 *SIN(14α)) 再用循环依次取α值为0~2π(每次增量为0.01),计算出 ...

  7. 【30分钟学完】canvas动画|游戏基础(4):边界与碰撞

    前言 本系列前几篇中常出现物体跑到画布外的情况,本篇就是为了解决这个问题. 阅读本篇前请先打好前面的基础. 本人能力有限,欢迎牛人共同讨论,批评指正. 越界检测 假定物体是个圆形,如图其圆心坐标即是物 ...

  8. 【30分钟学完】canvas动画|游戏基础(5):重力加速度与模拟摩擦力

    前言 解决运动和碰撞问题后,我们为了让运动环境更加自然,需要加入一些环境因子,比如常见的重力加速度和模拟摩擦力. 阅读本篇前请先打好前面的基础. 本人能力有限,欢迎牛人共同讨论,批评指正. 重力加速度 ...

  9. html5 canvas常用api总结(三)--图像变换API

    canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...

随机推荐

  1. CentOS下安装JDK1.7

    1.安装包准备: 首先到官网下载jdk,http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.h ...

  2. SQLite返回码

    SQLite返回码 返回码含义 宏 值 含义 SQLITE_OK 0 返回成功 SQLITE_ERROR 1 SQL错误或数据库不存在 SQLITE_INTERNAL 2 SQLite内部逻辑错误 S ...

  3. Mysql数据库的使用总结之Innodb简介(一)

       最近在对开发的软件的服务器部分制作安装包,但服务器部分需要有mysql数据库的支持.因此,采用免安装版的mysql策略:将mysql数据库需要的文件在安装程序中进行设置和打包即可.但也遇到了很多 ...

  4. MSSQL-to-MySQL v5.3, 从MSSQL迁移到mySQL的最佳工具

    将现有的MSSQL数据库迁移到MySQL数据库,尝试了很多种工具 MySQL Workbench / MSSQL to MySQL Export / DB Converter / openDBcopy ...

  5. 用 nssm 把 Nginx 安装成 Windows 服务方法

    总之:用 nssm 比 srvany.exe 简便多了.1. 下载nginx windows版本:http://nginx.org/ 2. 下载 nssm :http://nssm.cc/3. 安装N ...

  6. 【krpano】汉化Web VR设置界面

    欢迎加入qq群551278936讨论krpano解密技术以及获取最新软件 krpano 1.19支持了Web VR功能,允许以VR的方式查看全景图,配合上VR设备可以实现VR效果. 在VR方式查看时, ...

  7. spring mvc redis消息队列

    通常情况下,为了提高系统开发的灵活性和可维护度,我们会采用消息队列队系统进行解耦.下面是一个采用spring redis实现的消息队列实例,但此实例会由于网络延迟和阻塞等情况导致消息处理的延时,因而不 ...

  8. mysql 在windows下,使用 net start mysql 命令发生错误 服务名无效 或 1067

    mysql 在windows下,使用 net start mysql 命令发生错误 :服务名无效 或 1067  先使用mysqld -install安装一下 删除data目录下的日志等文件(因为之前 ...

  9. js实现判断大写锁定是否开启(转)

    转载地址:http://www.cnblogs.com/xiaoao808/archive/2008/07/31/1257624.html 在用户登录输入密码时,常常会有因为大写锁定开启而造成输入密码 ...

  10. 3.通过现有的PDB创建一个新的PDB

    实验说明:创建PDB除了可以通过种子PDB创建外,现在测试通过一个现有的用户PDB克隆创建新的PDB数据库 实验步骤: 1.创建测试数据 SQL> alter session set conta ...