html5实现的一个简单的下雨效果
来源:互联网 发布:淘宝神笔怎么关联 编辑:程序博客网 时间:2024/06/08 16:52
<style type="text/css">html, body{width: 100%; height: 100%; padding: 0; margin: 0; overflow: hidden;}canvas{background: black;}</style><canvas></canvas><script type="text/javascript" src="js/base.js"></script><script>var Rain = Rain || (function(){var _canvas = document.getElementsByTagName('canvas')[0];var _context = _canvas.getContext('2d');var _raindrop_count = 1;var _raindrop_group = [];var _wave_group = [];var _env = {floor_height: 100,canvas_width: 0,canvas_height: 0};var _raindrop = function(mx, my/*, lx, ly*/, lw, vx, vy, ax, ay){this.mx = mx;// 起点Xthis.my = my;// 起点Y//this.lx = lx;// 结束点X//this.ly = ly;// 结束点Ythis.lw = lw;// 线宽this.vx = vx;// 水平速度this.vy = vy;// 垂直速度this.ax = ax;// 水平加速度this.ay = ay;// 垂直加速度};var _wave = function(x, y, rx, ry, vx, vy, a, va){this.x = x;this.y = y;this.rx = rx;this.ry = ry;this.vx = vx;this.vy = vy;this.a = a;this.va = va;};// 方法来自http://www.cnblogs.com/shn11160/archive/2012/08/27/2658057.htmlfunction BezierEllipse1(context, x, y, a, b, s){ //关键是bezierCurveTo中两个控制点的设置 //0.5和0.6是两个关键系数(在本函数中为试验而得) var ox = 0.5 * a, oy = 0.6 * b; context.save(); context.translate(x, y); context.beginPath(); context.strokeStyle = s; //从椭圆纵轴下端开始逆时针方向绘制 context.moveTo(0, b); context.bezierCurveTo(ox, b, a, oy, a, 0); context.bezierCurveTo(a, -oy, ox, -b, 0, -b); context.bezierCurveTo(-ox, -b, -a, -oy, -a, 0); context.bezierCurveTo(-a, oy, -ox, b, 0, b); context.closePath(); context.stroke(); context.restore();};var _onResize = function(){_canvas.width = document.width;_canvas.height = document.height;_env.canvas_width = document.width;_env.canvas_height = document.height;}var _createRaindrop = function(){var mx = Math.random() * _env.canvas_width;var my = Math.random() * (- _env.floor_height);var vx = Math.random() * -1 - 1;var vy = Math.random() * 2 + 14;var ax = Math.random() * 0;var ay = Math.random() * 0.2;return new _raindrop(mx, my, 1, vx, vy, ax, ay);}var _createWave = function(x, y, vx, vy){return new _wave(x, y, 2, 1, 2, 1, 1, .05);}var _waving = function(){_wave_group.each(function(index, wave){wave.rx += wave.vx;wave.ry += wave.vy;wave.a -= wave.va;if(wave.a <= 0){_wave_group.remove(index);return false;}BezierEllipse1(_context, wave.x, wave.y, wave.rx, wave.ry, 'rgba(255, 255, 255, {0})'.format(wave.a));});}var _Rainning = function(){for (var i = 0; i < _raindrop_count; i++){var _raindrop = _createRaindrop();_raindrop_group.push(_raindrop);}_raindrop_group.each(function(index, raindrop){raindrop.lx = raindrop.mx;raindrop.ly = raindrop.my;raindrop.vx += raindrop.ax;raindrop.vy += raindrop.ay;raindrop.mx += raindrop.vx;raindrop.my += raindrop.vy;if(raindrop.my > (_env.canvas_height - _env.floor_height)){var wave = _createWave(raindrop.mx, raindrop.my);_raindrop_group.remove(index);_wave_group.push(wave);return false;}_context.beginPath();_context.lineWidth = raindrop.lw;_context.moveTo(raindrop.mx, raindrop.my);_context.lineTo(raindrop.lx, raindrop.ly);_context.stroke();});}return {init: function(){window.onresize = _onResize;_onResize();_context.strokeStyle = '#999';setInterval(function(){_context.clearRect(0, 0, _env.canvas_width, _env.canvas_height);_Rainning();_waving();}, 33);}}})();Rain.init();</script>
base.js的代码请从该文章获取http://blog.csdn.net/coderq/article/details/7229050
- html5实现的一个简单的下雨效果
- 使用 SurfaceView 实现一个下雨的天气效果
- 有趣的下雨效果
- 一个下雨的下午
- 【设计教程】在PS里面制作简单的下雨效果!
- rainday.js实现canvas绘制下雨的效果
- 简单PS下雨效果
- 一个下雨的星期天哦
- 十一月一个下雨的早晨
- HTML5源码-实现一个简单的个人主页
- unity3D 下雨效果实现
- Html5的CSS3的transition实现简单动画效果
- 实现一个简单的手机拍照效果
- 实现一个简单的 页面划入效果
- 制作一个下雨的仿真系统
- 又是一个下雨的晚上
- 用js实现下雨效果
- 一个简单的html5画板
- 项目管理软件
- 判断文本框输入的数字类型,正整数、浮点数、
- 统计数字在排序数组中出现的次数
- ios开发 升级App
- WinCE debug Q&A
- html5实现的一个简单的下雨效果
- INI文件编程,WINAPI函数WritePrivateProfileString,GetPrivateProfileString
- 什么是Socket?
- 比丰厚薪水更重要的10件事
- java----Java面向对象
- [Django1.5]TemplateSyntaxError: 'comments' is not a valid tag library错误
- 多线程断点续传文件下载原理
- Merge change requests
- completion