html 闪电的动态效果图,利用HTML5实现Canvas空中闪电动画特效
特效描述:利用HTML5实现 Canvas 空中闪电 动画特效。利用HTML5实现Canvas空中闪电动画特效
代码结构
1. 引入JS
2. HTML代码
/*=============================================================================*/
/* Canvas Lightning v1
/*=============================================================================*/
var canvasLightning = function(c, cw, ch){
/*=============================================================================*/
/* Initialize
/*=============================================================================*/
this.init = function(){
this.loop();
};
/*=============================================================================*/
/* Variables
/*=============================================================================*/
var _this = this;
this.c = c;
this.ctx = c.getContext('2d');
this.cw = cw;
this.ch = ch;
this.mx = 0;
this.my = 0;
this.lightning = [];
this.lightTimeCurrent = 0;
this.lightTimeTotal = 50;
/*=============================================================================*/
/* Utility Functions
/*=============================================================================*/
this.rand = function(rMi, rMa){return ~~((Math.random()*(rMa-rMi+1))+rMi);};
this.hitTest = function(x1, y1, w1, h1, x2, y2, w2, h2){return !(x1 + w1 < x2 || x2 + w2 < x1 || y1 + h1 < y2 || y2 + h2 < y1);};
/*=============================================================================*/
/* Create Lightning
/*=============================================================================*/
this.createL= function(x, y, canSpawn){
this.lightning.push({
x: x,
y: y,
xRange: this.rand(5, 30),
yRange: this.rand(5, 25),
path: [{
x: x,
y: y
}],
pathLimit: this.rand(10, 35),
canSpawn: canSpawn,
hasFired: false
});
};
/*=============================================================================*/
/* Update Lightning
/*=============================================================================*/
this.updateL = function(){
var i = this.lightning.length;
while(i--){
var light = this.lightning[i];
light.path.push({
x: light.path[light.path.length-1].x + (this.rand(0, light.xRange)-(light.xRange/2)),
y: light.path[light.path.length-1].y + (this.rand(0, light.yRange))
});
if(light.path.length > light.pathLimit){
this.lightning.splice(i, 1)
}
light.hasFired = true;
};
};
/*=============================================================================*/
/* Render Lightning
/*=============================================================================*/
this.renderL = function(){
var i = this.lightning.length;
while(i--){
var light = this.lightning[i];
this.ctx.strokeStyle = 'hsla(0, 100%, 100%, '+this.rand(10, 100)/100+')';
this.ctx.lineWidth = 1;
if(this.rand(0, 30) == 0){
this.ctx.lineWidth = 2;
}
if(this.rand(0, 60) == 0){
this.ctx.lineWidth = 3;
}
if(this.rand(0, 90) == 0){
this.ctx.lineWidth = 4;
}
if(this.rand(0, 120) == 0){
this.ctx.lineWidth = 5;
}
if(this.rand(0, 150) == 0){
this.ctx.lineWidth = 6;
}
this.ctx.beginPath();
var pathCount = light.path.length;
this.ctx.moveTo(light.x, light.y);
for(var pc = 0; pc < pathCount; pc++){
this.ctx.lineTo(light.path[pc].x, light.path[pc].y);
if(light.canSpawn){
if(this.rand(0, 100) == 0){
light.canSpawn = false;
this.createL(light.path[pc].x, light.path[pc].y, false);
}
}
}
if(!light.hasFired){
this.ctx.fillStyle = 'rgba(255, 255, 255, '+this.rand(4, 12)/100+')';
this.ctx.fillRect(0, 0, this.cw, this.ch);
}
if(this.rand(0, 30) == 0){
this.ctx.fillStyle = 'rgba(255, 255, 255, '+this.rand(1, 3)/100+')';
this.ctx.fillRect(0, 0, this.cw, this.ch);
}
this.ctx.stroke();
};
};
/*=============================================================================*/
/* Lightning Timer
/*=============================================================================*/
this.lightningTimer = function(){
this.lightTimeCurrent++;
if(this.lightTimeCurrent >= this.lightTimeTotal){
var newX = this.rand(100, cw - 100);
var newY = this.rand(0, ch / 2);
var createCount = this.rand(1, 3);
while(createCount--){
this.createL(newX, newY, true);
}
this.lightTimeCurrent = 0;
this.lightTimeTotal = this.rand(30, 100);
}
}
/*=============================================================================*/
/* Clear Canvas
/*=============================================================================*/
this.clearCanvas = function(){
this.ctx.globalCompositeOperation = 'destination-out';
this.ctx.fillStyle = 'rgba(0,0,0,'+this.rand(1, 30)/100+')';
this.ctx.fillRect(0,0,this.cw,this.ch);
this.ctx.globalCompositeOperation = 'source-over';
};
/*=============================================================================*/
/* Resize on Canvas on Window Resize
/*=============================================================================*/
$(window).on('resize', function(){
_this.cw = _this.c.width = window.innerWidth;
_this.ch = _this.c.height = window.innerHeight;
});
/*=============================================================================*/
/* Animation Loop
/*=============================================================================*/
this.loop = function(){
var loopIt = function(){
requestAnimationFrame(loopIt, _this.c);
_this.clearCanvas();
_this.updateL();
_this.lightningTimer();
_this.renderL();
};
loopIt();
};
};
/*=============================================================================*/
/* Check Canvas Support
/*=============================================================================*/
var isCanvasSupported = function(){
var elem = document.createElement('canvas');
return !!(elem.getContext && elem.getContext('2d'));
};
/*=============================================================================*/
/* Setup requestAnimationFrame
/*=============================================================================*/
var setupRAF = function(){
var lastTime = 0;
var vendors = ['ms', 'moz', 'webkit', 'o'];
for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x){
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];
};
if(!window.requestAnimationFrame){
window.requestAnimationFrame = function(callback, element){
var currTime = new Date().getTime();
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall);
lastTime = currTime + timeToCall;
return id;
};
};
if (!window.cancelAnimationFrame){
window.cancelAnimationFrame = function(id){
clearTimeout(id);
};
};
};
/*=============================================================================*/
/* Define Canvas and Initialize
/*=============================================================================*/
$(window).load(function(){
if(isCanvasSupported){
var c = document.getElementById('canvas');
var cw = c.width = window.innerWidth;
var ch = c.height = window.innerHeight;
var cl = new canvasLightning(c, cw, ch);
setupRAF();
cl.init();
}
});
html 闪电的动态效果图,利用HTML5实现Canvas空中闪电动画特效相关推荐
- html5绘制草,利用html5实现canvas海底水草动画特效
特效描述:利用html5实现 canvas海底水草动画特效.利用html5实现canvas海底水草动画特效 代码结构 1. HTML代码 var canvas, ctx, width, height, ...
- html5 实现波浪效果图,利用HTML5实现Canvas流动的波浪特效
特效描述:利用HTML5实现 Canvas 流动的 波浪特效.利用HTML5实现Canvas流动的波浪特效 代码结构 1. 引入JS 2. HTML代码 'use strict'; var gui = ...
- html 5抽奖特效,利用HTML5实现Canvas大转盘抽奖特效
特效描述:利用HTML5实现 Canvas 大转盘 抽奖特效.利用HTML5实现Canvas大转盘抽奖特效 代码结构 1. 引入JS 2. HTML代码 当前浏览器版本过低,请使用其他浏览器尝试 va ...
- 英文字母html,利用HTML5实现英文字母ABCD动画特效
特效描述:利用HTML5实现 英文字母 ABCD 动画特效.利用HTML5实现英文字母ABCD动画特效 代码结构 1. HTML代码 function foreach(array, callback) ...
- html5如何写出圆背景,利用HTML5实现Canvas虚幻圆点背景特效
特效描述:利用HTML5实现 Canvas 虚幻圆点 背景特效.利用HTML5实现Canvas虚幻圆点背景特效 代码结构 1. 引入JS 2. HTML代码 (function($){ var can ...
- html5 照片汇聚logo,利用HTML5实现Canvas粒子汇聚文字特效
特效描述:利用HTML5实现 Canvas 粒子汇聚 文字特效.利用HTML5实现Canvas粒子汇聚文字特效 代码结构 1. HTML代码 jQuery Chinaz // WRITTEN BY T ...
- HTML画布太阳代码,利用HTML5实现Canvas水面下太阳特效
特效描述:利用HTML5实现 Canvas 水面下 太阳特效.利用HTML5实现Canvas水面下太阳特效 代码结构 1. 引入JS 2. HTML代码 void main() { gl_Positi ...
- html霓虹灯效果图,利用HTML5实现Canvas霓虹灯蜂巢特效
特效描述:利用HTML5实现 Canvas 霓虹灯 蜂巢特效.利用HTML5实现Canvas霓虹灯蜂巢特效 代码结构 1. HTML代码 /* because me lazy */ Object.ge ...
- html5手电筒样式,利用HTML5实现SVG模拟手电筒照明特效
特效描述:利用HTML5实现 SVG 模拟手电筒 照明特效.利用HTML5%20实现SVG模拟手电筒照明特效 代码结构 1. HTML代码 xmlns="http://www.w3.org/ ...
最新文章
- 交换函数swap的三种实现方法
- 用Log Parser Studio分析IIS日志
- MATLAB图像中添加标记
- [圣诞记]HULK七周年庆
- 基于JAVA+SpringMVC+Mybatis+MYSQL的流浪宠物救助系统
- SAP License:BWBCS学习记录
- 实验吧web-易-what a fuck!这是什么鬼东西?
- 原来更新A的一列为B列的一列,这样简单呀
- python没基础能自学吗-python自学没有基础会不会不好学?
- django xadmin 集成DjangoUeditor富文本编辑器
- win7 虚拟wifi服务器,w7虚拟wifi在哪里设置_win7虚拟wifi怎么开启
- 计算机无法访问网络位置,共享不能访问网络位置的解决方法
- python有趣小程序-搞几款由quot;Python”语言编写的quot;有趣、恶搞、好玩”的程序代码!...
- 《Cisco防火墙》一6.5 虚拟防火墙的管理访问
- imprecise external abort
- k8s怎么学习?:带你入门到实战
- k8s v1.17 新特性预告: 拓扑感知服务路由
- 解决锐捷校园网环境下VMware虚拟机无法上网问题
- 立创EDA电路设计与制作
- 神州泰岳测试试题(笔试)
热门文章
- 关于二叉树结点的小公式
- c#字符串按位转成asc_C#中string和ASCII相互转换
- 【CAD学习笔记】CAD快捷键
- npm 报错汇总(一)npm WARN ajv-keywords@3.4.1 requires a peer of ajv@^6.9.1 but none is installed. You must
- STM32 ADC电路输入阻抗问题
- IOS工具篇 swift 机型判断 含iPhone14系列
- 如何用手机拍摄自媒体短视频?这几个技巧你必须知道
- 机器学习分类常见评价标准
- 微软骂人:请勿TM关闭......
- 笔记本电脑启动计算机出现了页面,笔记本电脑开机弹出广告解决方法