特效描述:利用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实现文字放射发光动画特效相关推荐

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

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

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

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

  3. html 闪电的动态效果图,利用HTML5实现Canvas空中闪电动画特效

    特效描述:利用HTML5实现 Canvas 空中闪电 动画特效.利用HTML5实现Canvas空中闪电动画特效 代码结构 1. 引入JS 2. HTML代码 /*=================== ...

  4. html5 strongeaseinout,html5杯子里萤火虫发光动画特效

    js代码 var numP = 50; TweenMax.set("#content", {transformOrigin:"50% -45%"}) //Twe ...

  5. html 萤火虫特效,html5杯子里萤火虫发光动画特效

    js代码 var numP = 50; TweenMax.set("#content", {transformOrigin:"50% -45%"}) //Twe ...

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

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

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

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

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

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

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

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

  10. 面条html5,利用HTML5 Canvas实现一碗面条特效

    特效描述:利用HTML5 Canvas实现一碗面条特效.利用HTML5 Canvas实现一碗面条特效 代码结构 1. HTML代码 // Initiate Canvas let can = docum ...

最新文章

  1. day3 python 学习随笔
  2. C# WinForm中 让控件全屏显示的实现代码
  3. 易语言 mysql 卡死_易语言操作MYsql 所有课程停发
  4. HashMap 和HashTable区别和实现原理。
  5. python aiohttp_aiohttp
  6. 多层图,dj+dp Gym 102501A Environment-Friendly
  7. 深入理解 AMQP 协议
  8. Flash和HTML5那点事:后者拿什么取代Flash?
  9. 必须重视针对SCADA系统的***
  10. 不使用任何判断比较两个整数
  11. 利用CDLinux里面的水滴破解路由器密码的教程
  12. CCF CSP认证201509-1数列分段
  13. WaveDrom 时序图编辑器
  14. 家庭局域网_看教程,自己搭建家庭监控系统!
  15. 跨模态行人重识别:RGB-Infrared Cross-Modality Person Re-Identification 学习记录笔记
  16. icp许可证到期续期注意事项
  17. Python运维开发入门到精通学习 Day3
  18. 电力公司SMS短信群发平台的设计与实现
  19. MSN, 迅雷等调用小红伞作为杀毒软件的方法
  20. numpy中的ndarray方法和属性

热门文章

  1. Android Orientation Sensor(方向传感器)详解与应用
  2. 服务器装系统bios设置方法,重装系统时BIOS的设置方法
  3. QML类型:Emitter、TrailEmitter
  4. c语言中用梯形法求定积分
  5. CertPathValidatorException:validity check failed
  6. 装箱与拆箱(TDB)
  7. 央行数字货币(数字人民币)DCEP
  8. 开启 Kerberos 安全的大数据环境中,Yarn Container 启动失败导致作业失败
  9. C#WinFormRS232串口工具
  10. uniapp之自定义顶部样式