特效描述:利用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空中闪电动画特效相关推荐

  1. html5绘制草,利用html5实现canvas海底水草动画特效

    特效描述:利用html5实现 canvas海底水草动画特效.利用html5实现canvas海底水草动画特效 代码结构 1. HTML代码 var canvas, ctx, width, height, ...

  2. html5 实现波浪效果图,利用HTML5实现Canvas流动的波浪特效

    特效描述:利用HTML5实现 Canvas 流动的 波浪特效.利用HTML5实现Canvas流动的波浪特效 代码结构 1. 引入JS 2. HTML代码 'use strict'; var gui = ...

  3. html 5抽奖特效,利用HTML5实现Canvas大转盘抽奖特效

    特效描述:利用HTML5实现 Canvas 大转盘 抽奖特效.利用HTML5实现Canvas大转盘抽奖特效 代码结构 1. 引入JS 2. HTML代码 当前浏览器版本过低,请使用其他浏览器尝试 va ...

  4. 英文字母html,利用HTML5实现英文字母ABCD动画特效

    特效描述:利用HTML5实现 英文字母 ABCD 动画特效.利用HTML5实现英文字母ABCD动画特效 代码结构 1. HTML代码 function foreach(array, callback) ...

  5. html5如何写出圆背景,利用HTML5实现Canvas虚幻圆点背景特效

    特效描述:利用HTML5实现 Canvas 虚幻圆点 背景特效.利用HTML5实现Canvas虚幻圆点背景特效 代码结构 1. 引入JS 2. HTML代码 (function($){ var can ...

  6. html5 照片汇聚logo,利用HTML5实现Canvas粒子汇聚文字特效

    特效描述:利用HTML5实现 Canvas 粒子汇聚 文字特效.利用HTML5实现Canvas粒子汇聚文字特效 代码结构 1. HTML代码 jQuery Chinaz // WRITTEN BY T ...

  7. HTML画布太阳代码,利用HTML5实现Canvas水面下太阳特效

    特效描述:利用HTML5实现 Canvas 水面下 太阳特效.利用HTML5实现Canvas水面下太阳特效 代码结构 1. 引入JS 2. HTML代码 void main() { gl_Positi ...

  8. html霓虹灯效果图,利用HTML5实现Canvas霓虹灯蜂巢特效

    特效描述:利用HTML5实现 Canvas 霓虹灯 蜂巢特效.利用HTML5实现Canvas霓虹灯蜂巢特效 代码结构 1. HTML代码 /* because me lazy */ Object.ge ...

  9. html5手电筒样式,利用HTML5实现SVG模拟手电筒照明特效

    特效描述:利用HTML5实现 SVG 模拟手电筒 照明特效.利用HTML5%20实现SVG模拟手电筒照明特效 代码结构 1. HTML代码 xmlns="http://www.w3.org/ ...

最新文章

  1. 交换函数swap的三种实现方法
  2. 用Log Parser Studio分析IIS日志
  3. MATLAB图像中添加标记
  4. [圣诞记]HULK七周年庆
  5. 基于JAVA+SpringMVC+Mybatis+MYSQL的流浪宠物救助系统
  6. SAP License:BWBCS学习记录
  7. 实验吧web-易-what a fuck!这是什么鬼东西?
  8. 原来更新A的一列为B列的一列,这样简单呀
  9. python没基础能自学吗-python自学没有基础会不会不好学?
  10. django xadmin 集成DjangoUeditor富文本编辑器
  11. win7 虚拟wifi服务器,w7虚拟wifi在哪里设置_win7虚拟wifi怎么开启
  12. 计算机无法访问网络位置,共享不能访问网络位置的解决方法
  13. python有趣小程序-搞几款由quot;Python”语言编写的quot;有趣、恶搞、好玩”的程序代码!...
  14. 《Cisco防火墙》一6.5 虚拟防火墙的管理访问
  15. imprecise external abort
  16. k8s怎么学习?:带你入门到实战
  17. k8s v1.17 新特性预告: 拓扑感知服务路由
  18. 解决锐捷校园网环境下VMware虚拟机无法上网问题
  19. 立创EDA电路设计与制作
  20. 神州泰岳测试试题(笔试)

热门文章

  1. 关于二叉树结点的小公式
  2. c#字符串按位转成asc_C#中string和ASCII相互转换
  3. 【CAD学习笔记】CAD快捷键
  4. npm 报错汇总(一)npm WARN ajv-keywords@3.4.1 requires a peer of ajv@^6.9.1 but none is installed. You must
  5. STM32 ADC电路输入阻抗问题
  6. IOS工具篇 swift 机型判断 含iPhone14系列
  7. 如何用手机拍摄自媒体短视频?这几个技巧你必须知道
  8. 机器学习分类常见评价标准
  9. 微软骂人:请勿TM关闭......
  10. 笔记本电脑启动计算机出现了页面,笔记本电脑开机弹出广告解决方法