HTML荧光文字动态效果,利用HTML5实现文字放射发光动画特效
特效描述:利用HTML5实现 文字放射发光 动画特效。利用HTML5实现文字放射发光动画特效
代码结构
1. HTML代码
var txt = "51前端";
var txtH = 100;
var font = "sans-serif";
var bg = "#000";
var rayColor1 = "#e0f7fa";
var rayColor2 = "#18ffff";
var fade = 1000;
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var cw = canvas.width = window.innerWidth;
var ch = canvas.height = window.innerHeight;
var w2 = cw/2;
var h2 = ch/2;
var pi = Math.PI;
var pi2 = pi*.5;
var txtCanvas = document.createElement("canvas");
var txtCtx = txtCanvas.getContext("2d");
txtCtx.font = txtH + "px " + font;
txtCtx.textBaseline = "middle";
var txtW = Math.floor(txtCtx.measureText(txt).width);
txtCanvas.width = txtW;
txtCanvas.height = txtH*1.5;
var gradient = ctx.createRadialGradient(w2, h2, 0, w2, h2, txtW);
gradient.addColorStop(0, rayColor2);
gradient.addColorStop(1, rayColor1);
ctx.strokeStyle = gradient;
txtCtx.fillStyle = gradient;
txtCtx.font = txtH + "px " + font;
txtCtx.textBaseline = "middle";
txtCtx.fillText(txt,0,txtH*.5);
//dirty adjust for descends
txtH *= 1.5;
var bufferCanvas = document.createElement("canvas");
bufferCanvas.width = txtW;
bufferCanvas.height = txtH;
var buffer = bufferCanvas.getContext("2d");
//text start position
var sx = (cw-txtW)*0.5
var sy = (ch-txtH)*0.5
generate data
var rays = [];
var txtData = txtCtx.getImageData(0,0,txtW,txtH);
for (var i = 0; i < txtData.data.length; i+=4) {
var ii = i/4;
var row = Math.floor(ii/txtW)
var col = ii%txtW
var alpha = txtData.data[i+3]
if(alpha !== 0){
var c = "rgba("
c += [txtData.data[i],txtData.data[i+1],txtData.data[i+2], alpha/255 ]
c += ")";
rays.push(new Ray(Math.floor(ii/txtW), ii%txtW, c));
}
}
var current = 1;
//start animation
tick();
function tick() {
ctx.clearRect(0,0,cw,ch)
ctx.drawImage(bufferCanvas, 0, 0, current, txtH, sx, sy, current, txtH)
ctx.save()
ctx.globalAlpha = .07;
ctx.globalCompositeOperation = "lighter";
if(drawRays(current)){
current++;
current = Math.min(current, txtW)
window.requestAnimationFrame(tick)
}else{
fadeOut()
}
ctx.restore()
}
function fadeOut(){
ctx.clearRect(0,0,cw,ch)
ctx.globalAlpha *= .95;
ctx.drawImage(bufferCanvas, 0, 0, current, txtH, sx, sy, current, txtH)
if(ctx.globalAlpha > .01){
window.requestAnimationFrame(fadeOut)
}else{
window.setTimeout(restart, 500)
}
}
function restart(){
for(var i = 0; i < rays.length; i++){
rays[i].reset()
}
ctx.globalAlpha = 1
buffer.clearRect(0,0,txtW,txtH)
current = 1;
tick();
}
function drawRays(c){
var count = 0;
ctx.beginPath()
for(var i = 0; i < rays.length; i++){
var ray = rays[i];
if(ray.col < c){
count += ray.draw()
}
}
ctx.stroke()
return count !== rays.length;
}
function filterRays(r){
return Boolean(r);
}
function Ray(row, col, f){
this.col = col;
this.row = row;
var xp = sx + col;
var yp = sy + row;
var fill = f;
var ath = (txtH/1.5)
var a = pi2 * (this.row - ath*.5) / ath;
if(a === 0){
a = (Math.random() - .5) * pi2;
}
var da = .02 * Math.sign(a);
da += (Math.random() - .5) * .005;
var l = 0;
var dl = Math.random()*2 + 2;
var buffered = false;
this.reset = function(){
a = pi2 * (this.row - ath*.5) / ath;
if(a === 0){
a = -pi2*.5;
}
l = 0;
buffered = false
}
this.draw = function(){
if(l < 0){
if(!buffered){
buffer.fillStyle = fill;
buffer.fillRect(this.col, this.row, 1, 1);
buffered = true
}
return 1;
}else{
ctx.moveTo(xp, yp)
ctx.lineTo(xp + Math.cos(a) * l, yp + Math.sin(a) * l);
a += da;
l += Math.cos(a)*dl;
return 0;
}
}
}
HTML荧光文字动态效果,利用HTML5实现文字放射发光动画特效相关推荐
- 英文字母html,利用HTML5实现英文字母ABCD动画特效
特效描述:利用HTML5实现 英文字母 ABCD 动画特效.利用HTML5实现英文字母ABCD动画特效 代码结构 1. HTML代码 function foreach(array, callback) ...
- html5绘制草,利用html5实现canvas海底水草动画特效
特效描述:利用html5实现 canvas海底水草动画特效.利用html5实现canvas海底水草动画特效 代码结构 1. HTML代码 var canvas, ctx, width, height, ...
- html 闪电的动态效果图,利用HTML5实现Canvas空中闪电动画特效
特效描述:利用HTML5实现 Canvas 空中闪电 动画特效.利用HTML5实现Canvas空中闪电动画特效 代码结构 1. 引入JS 2. HTML代码 /*=================== ...
- html5 strongeaseinout,html5杯子里萤火虫发光动画特效
js代码 var numP = 50; TweenMax.set("#content", {transformOrigin:"50% -45%"}) //Twe ...
- html 萤火虫特效,html5杯子里萤火虫发光动画特效
js代码 var numP = 50; TweenMax.set("#content", {transformOrigin:"50% -45%"}) //Twe ...
- 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 ...
- html5手电筒样式,利用HTML5实现SVG模拟手电筒照明特效
特效描述:利用HTML5实现 SVG 模拟手电筒 照明特效.利用HTML5%20实现SVG模拟手电筒照明特效 代码结构 1. HTML代码 xmlns="http://www.w3.org/ ...
- html5如何写出圆背景,利用HTML5实现Canvas虚幻圆点背景特效
特效描述:利用HTML5实现 Canvas 虚幻圆点 背景特效.利用HTML5实现Canvas虚幻圆点背景特效 代码结构 1. 引入JS 2. HTML代码 (function($){ var can ...
- 面条html5,利用HTML5 Canvas实现一碗面条特效
特效描述:利用HTML5 Canvas实现一碗面条特效.利用HTML5 Canvas实现一碗面条特效 代码结构 1. HTML代码 // Initiate Canvas let can = docum ...
最新文章
- day3 python 学习随笔
- C# WinForm中 让控件全屏显示的实现代码
- 易语言 mysql 卡死_易语言操作MYsql 所有课程停发
- HashMap 和HashTable区别和实现原理。
- python aiohttp_aiohttp
- 多层图,dj+dp Gym 102501A Environment-Friendly
- 深入理解 AMQP 协议
- Flash和HTML5那点事:后者拿什么取代Flash?
- 必须重视针对SCADA系统的***
- 不使用任何判断比较两个整数
- 利用CDLinux里面的水滴破解路由器密码的教程
- CCF CSP认证201509-1数列分段
- WaveDrom 时序图编辑器
- 家庭局域网_看教程,自己搭建家庭监控系统!
- 跨模态行人重识别:RGB-Infrared Cross-Modality Person Re-Identification 学习记录笔记
- icp许可证到期续期注意事项
- Python运维开发入门到精通学习 Day3
- 电力公司SMS短信群发平台的设计与实现
- MSN, 迅雷等调用小红伞作为杀毒软件的方法
- numpy中的ndarray方法和属性