转载一个炫酷的动态网页特效

先看看效果:

直接上代码:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>首页</title><style>
html,body{margin:0px;width:100%;height:100%;overflow:hidden;background:#000;
}#canvas{position:absolute;width:100%;height:100%;
}
</style></head>
<body><canvas id="canvas"></canvas><script>
function project3D(x,y,z,vars){var p,d;x-=vars.camX;y-=vars.camY-8;z-=vars.camZ;p=Math.atan2(x,z);d=Math.sqrt(x*x+z*z);x=Math.sin(p-vars.yaw)*d;z=Math.cos(p-vars.yaw)*d;p=Math.atan2(y,z);d=Math.sqrt(y*y+z*z);y=Math.sin(p-vars.pitch)*d;z=Math.cos(p-vars.pitch)*d;var rx1=-1000;var ry1=1;var rx2=1000;var ry2=1;var rx3=0;var ry3=0;var rx4=x;var ry4=z;var uc=(ry4-ry3)*(rx2-rx1)-(rx4-rx3)*(ry2-ry1);var ua=((rx4-rx3)*(ry1-ry3)-(ry4-ry3)*(rx1-rx3))/uc;var ub=((rx2-rx1)*(ry1-ry3)-(ry2-ry1)*(rx1-rx3))/uc;if(!z)z=0.000000001;if(ua>0&&ua<1&&ub>0&&ub<1){return {x:vars.cx+(rx1+ua*(rx2-rx1))*vars.scale,y:vars.cy+y/z*vars.scale,d:(x*x+y*y+z*z)};}else{return { d:-1 };}
}function elevation(x,y,z){var dist = Math.sqrt(x*x+y*y+z*z);if(dist && z/dist>=-1 && z/dist <=1) return Math.acos(z / dist);return 0.00000001;
}function rgb(col){col += 0.000001;var r = parseInt((0.5+Math.sin(col)*0.5)*16);var g = parseInt((0.5+Math.cos(col)*0.5)*16);var b = parseInt((0.5-Math.sin(col)*0.5)*16);return "#"+r.toString(16)+g.toString(16)+b.toString(16);
}function interpolateColors(RGB1,RGB2,degree){var w2=degree;var w1=1-w2;return [w1*RGB1[0]+w2*RGB2[0],w1*RGB1[1]+w2*RGB2[1],w1*RGB1[2]+w2*RGB2[2]];
}function rgbArray(col){col += 0.000001;var r = parseInt((0.5+Math.sin(col)*0.5)*256);var g = parseInt((0.5+Math.cos(col)*0.5)*256);var b = parseInt((0.5-Math.sin(col)*0.5)*256);return [r, g, b];
}function colorString(arr){var r = parseInt(arr[0]);var g = parseInt(arr[1]);var b = parseInt(arr[2]);return "#"+("0" + r.toString(16) ).slice (-2)+("0" + g.toString(16) ).slice (-2)+("0" + b.toString(16) ).slice (-2);
}function process(vars){if(vars.points.length<vars.initParticles) for(var i=0;i<5;++i) spawnParticle(vars);var p,d,t;p = Math.atan2(vars.camX, vars.camZ);d = Math.sqrt(vars.camX * vars.camX + vars.camZ * vars.camZ);d -= Math.sin(vars.frameNo / 80) / 25;t = Math.cos(vars.frameNo / 300) / 165;vars.camX = Math.sin(p + t) * d;vars.camZ = Math.cos(p + t) * d;vars.camY = -Math.sin(vars.frameNo / 220) * 15;vars.yaw = Math.PI + p + t;vars.pitch = elevation(vars.camX, vars.camZ, vars.camY) - Math.PI / 2;var t;for(var i=0;i<vars.points.length;++i){x=vars.points[i].x;y=vars.points[i].y;z=vars.points[i].z;d=Math.sqrt(x*x+z*z)/1.0075;t=.1/(1+d*d/5);p=Math.atan2(x,z)+t;vars.points[i].x=Math.sin(p)*d;vars.points[i].z=Math.cos(p)*d;vars.points[i].y+=vars.points[i].vy*t*((Math.sqrt(vars.distributionRadius)-d)*2);if(vars.points[i].y>vars.vortexHeight/2 || d<.25){vars.points.splice(i,1);spawnParticle(vars);}}
}function drawFloor(vars){var x,y,z,d,point,a;for (var i = -25; i <= 25; i += 1) {for (var j = -25; j <= 25; j += 1) {x = i*2;z = j*2;y = vars.floor;d = Math.sqrt(x * x + z * z);point = project3D(x, y-d*d/85, z, vars);if (point.d != -1) {size = 1 + 15000 / (1 + point.d);a = 0.15 - Math.pow(d / 50, 4) * 0.15;if (a > 0) {vars.ctx.fillStyle = colorString(interpolateColors(rgbArray(d/26-vars.frameNo/40),[0,128,32],.5+Math.sin(d/6-vars.frameNo/8)/2));vars.ctx.globalAlpha = a;vars.ctx.fillRect(point.x-size/2,point.y-size/2,size,size);}}}}       vars.ctx.fillStyle = "#82f";for (var i = -25; i <= 25; i += 1) {for (var j = -25; j <= 25; j += 1) {x = i*2;z = j*2;y = -vars.floor;d = Math.sqrt(x * x + z * z);point = project3D(x, y+d*d/85, z, vars);if (point.d != -1) {size = 1 + 15000 / (1 + point.d);a = 0.15 - Math.pow(d / 50, 4) * 0.15;if (a > 0) {vars.ctx.fillStyle = colorString(interpolateColors(rgbArray(-d/26-vars.frameNo/40),[32,0,128],.5+Math.sin(-d/6-vars.frameNo/8)/2));vars.ctx.globalAlpha = a;vars.ctx.fillRect(point.x-size/2,point.y-size/2,size,size);}}}}
}function sortFunction(a,b){return b.dist-a.dist;
}function draw(vars){vars.ctx.globalAlpha=.15;vars.ctx.fillStyle="#000";vars.ctx.fillRect(0, 0, canvas.width, canvas.height);drawFloor(vars);var point,x,y,z,a;for(var i=0;i<vars.points.length;++i){x=vars.points[i].x;y=vars.points[i].y;z=vars.points[i].z;point=project3D(x,y,z,vars);if(point.d != -1){vars.points[i].dist=point.d;size=1+vars.points[i].radius/(1+point.d);d=Math.abs(vars.points[i].y);a = .8 - Math.pow(d / (vars.vortexHeight/2), 1000) * .8;vars.ctx.globalAlpha=a>=0&&a<=1?a:0;vars.ctx.fillStyle=rgb(vars.points[i].color);if(point.x>-1&&point.x<vars.canvas.width&&point.y>-1&&point.y<vars.canvas.height)vars.ctx.fillRect(point.x-size/2,point.y-size/2,size,size);}}vars.points.sort(sortFunction);
}function spawnParticle(vars){var p,ls;pt={};p=Math.PI*2*Math.random();ls=Math.sqrt(Math.random()*vars.distributionRadius);pt.x=Math.sin(p)*ls;pt.y=-vars.vortexHeight/2;pt.vy=vars.initV/20+Math.random()*vars.initV;pt.z=Math.cos(p)*ls;pt.radius=200+800*Math.random();pt.color=pt.radius/1000+vars.frameNo/250;vars.points.push(pt);
}function frame(vars) {if(vars === undefined){var vars={};vars.canvas = document.querySelector("canvas");vars.ctx = vars.canvas.getContext("2d");vars.canvas.width = document.body.clientWidth;vars.canvas.height = document.body.clientHeight;window.addEventListener("resize", function(){vars.canvas.width = document.body.clientWidth;vars.canvas.height = document.body.clientHeight;vars.cx=vars.canvas.width/2;vars.cy=vars.canvas.height/2;}, true);vars.frameNo=0;vars.camX = 0;vars.camY = 0;vars.camZ = -14;vars.pitch = elevation(vars.camX, vars.camZ, vars.camY) - Math.PI / 2;vars.yaw = 0;vars.cx=vars.canvas.width/2;vars.cy=vars.canvas.height/2;vars.bounding=10;vars.scale=500;vars.floor=26.5;vars.points=[];vars.initParticles=700;vars.initV=.01;vars.distributionRadius=800;vars.vortexHeight=25;}vars.frameNo++;requestAnimationFrame(function() {frame(vars);});process(vars);draw(vars);
}
frame();
</script><div style="text-align:center;margin:50px 0; font:normal 14px/24px 'MicroSoft YaHei';">
</div>
</body>
</html>

大神超短代码实现超牛特效相关推荐

  1. 10个不到500行代码的超牛Python 练手项目

    10个不到500行代码的超牛Python 练手项目 图:内容概览.注:本文内容由实验楼搜集.整理自Github,实际项目版权归原作者所有. 以下10个练手项目均摘录自一本尚未出版的 Python 神书 ...

  2. python大神-Python代码怎么写,听听顶尖Python大神的建议

    了解K神( kennethreitz)是从它牛逼的requests库开始,号称最顶尖的Python程序员之一.大神有很多作品,而且还有一个非常励志的传奇故事,从一个胖胖的不修边幅的码农,励志减肥而变成 ...

  3. 【PC工具】大神级代码注释,漂亮实用的代码注释工具代码logo工具

    github上看各路大牛大神的项目代码,经常会看到各种神注释 ...... 那么问题就来了:大神是如何在代码里搞的这些图片代码呢? 打死我也不信是大牛大神一个一个打上去,这不是大牛大神的风格 . 今天 ...

  4. vs大神技巧—代码片断

    在视频中看到大神们编程奇快,经过仔细查找,发现大神们使用了 vs的"代码片断"的功能. 详见:https://docs.microsoft.com/zh-cn/visualstud ...

  5. 大神指导代码问题(二)

    请求方式问题 上周大神新开了一个项目要带着我做,大神看了我写的代码这次又和我说问题不大但是还是有些细节的问题.首当其冲就是请求方式问题,因为我是从某号称中国第一OA的黑砖窑出来的(被剥削的很惨).因为 ...

  6. IT大神提升代码效率的秘密,都私藏在这10个神仙软件里

    今天就拿出我的私藏工具送给你们,部分内容也适合职场人士.每款都是下了不后悔!而且光推工具不给下载地址的都是耍流氓~ 一.Everything 不光是程序员,这就是职场人都要拥有的!最强文件搜索神器.这 ...

  7. JavaScript大神用代码带你揭秘吉普赛古老神秘读心术

    javascript/HTML5课题:javascript开发读心术游戏 PS:大爆料!javascript解密读心术游戏背后故事 知识点: 读心术原理算法独家揭秘,HTML5最新选择器, 原生jav ...

  8. python画花的代码怎么打不开_怎么用python画玫瑰花,求大神贴代码,感激不尽

    满意答案 Exlibrisdc 2018.05.19 采纳率:59%    等级:8 已帮助:4259人 import turtle # 设置初始位置 turtle.penup() turtle.le ...

  9. 用python语言实现人工智能猴子摘香蕉的问题_【提问】求大神看看代码哪里错了 C语言猴子摘香蕉...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include int W; /*W -猴子的水平位置 */ int x; /*x -当猴子在箱子顶上时取 x=1 ...

最新文章

  1. 表格中td限宽溢出以省略号代替
  2. [Spring入门学习笔记][静态资源]
  3. 图像3A算法及伽马校正原理及部分实现
  4. 数据结构-顺序表(SqList)
  5. 迈高图手机版_迈高图(地图数据下载器)
  6. 华为2022校园赛——车道渲染
  7. c语言中power是什么变量,c语言学习新手必看 power by vcok.com[转载]
  8. openflow通信流程总结
  9. 【001】Zabbix学习笔记-Zabbix简介与部署
  10. 【干货】消费金融助贷业务实操全速览
  11. 练气第一层 踏入计算机修真界
  12. python 002 __小斌文档 | ipython的基本使用
  13. Hexo Icarus配置和美化升级
  14. 等比求和模版,下标从1开始
  15. Java:计算代码耗时的5种方法
  16. “没有定义根文件系统,请回到分区菜单以修正此错误”
  17. 简单做一段自己CSGO游戏的视频
  18. 【C语言】fwrite 写如0X0A时,自动添加0X0D的解决方法
  19. 同步下的资源互斥:停运保护(Run-Down Protection)机制
  20. Rouge | 自动文摘及机器翻译评价指标

热门文章

  1. 计算机玩电脑游戏,玩电脑游戏250字
  2. EDI X12 997 功能性确认 Functional Acknowledgment
  3. 工作中的Linux防火墙心得
  4. 数字化转型常见的5种问题:除了意识和能力问题,还有什么?
  5. 云服务器和网站租用哪个好,自己购买服务器和租用云哪个好?
  6. 计算机操作系统——银行家算法
  7. 社工小组 计算机小组活动,小组工作活动计划1
  8. LINUX下磁盘管理的基本流程与相关操作命令
  9. 2022年Spark基础学习笔记
  10. 自定义实现微信通讯录效果View