JS实现雪花效果
演示效果
http://www.9696e.com/demo/snow/
春节之前新一博客也会一直挂着的。
加载链接
<script src="http://www.9696e.com/demo/snow/snow.js" type="text/javascript"></script>
源码奉上
1
|
( function (){ var t,e,n,a,o,i,r=[],s=[],u=0;requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame|| function (e){ var n=( new Date).getTime(); var a=Math.max(0,16-(n-u));t=setTimeout( function (){e(n+a)},a);u=n+a};cancelAnimationFrame=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame||window.oCancelAnimationFrame|| function (){clearTimeout(t)}; function l(){ if (!( this instanceof l)){ throw new Error( "please use new() create instance" ); return } if (m.call( this )== false ){ return } this .status=0; this .start()} function m(){ var t=document.createElement( "canvas" ); this .canvas=t; var e=document.createElement( "x" );e.style.cssText= "pointer-events:auto" ; return !!(t.getContext&&t.getContext( "2d" )&&e.style.pointerEvents=== "auto" )}l.prototype.start= function (){ var t= this ; if ( this .status===1){ return false } this .status=1; this .snowCanvas(); this .createFlakes();requestAnimationFrame(c)};l.prototype.stop= function (){ if ( this .status===2) return ; this .status=2;cancelAnimationFrame()};l.prototype.snowCanvas= function (){ var t= this .canvas;e=window.innerWidth;n=window.innerHeight;t.id= "J_snowfall" ;t.width=e;t.height=n;t.setAttribute( "style" , "position: fixed; top: 0; left: 0; z-index: 9000; pointer-events: none;" );document.body.appendChild(t);o=t;i=t.getContext( "2d" );i.strokeStyle= "none" ;window.onresize= function (){e=window.innerWidth;n=window.innerHeight;t.width=e;t.height=n;flakeCount=e*n/6e3;h.createFlakes()}};l.prototype.createFlakes= function (){ var t,n,o,r,u= "#FFF" ,l=[.45,.55,.8,.9,1];r=[40,50,60,80,100]; for ( var m=0;m<5;m++){t=document.createElement( "canvas" );t.width=r[m];t.height=r[m];n=t.getContext( "2d" );n.font=r[m]/2+ "px sumson" ;o=n.createRadialGradient(r[m]/2,r[m]/2,0,r[m]/2,r[m]/2,r[m]/2);o.addColorStop(0,u);o.addColorStop(.1,u);o.addColorStop(.85,f(u,l[m]));o.addColorStop(1,f(u,0));n.fillStyle=o;n.fillText( "*" ,r[m]/2,r[m]/2);s.push(t)}a=i.createLinearGradient(0,0,0,e);d()}; function d(){ var t; var a=(e-940)/2;flakeCount=e*n/6e3; for ( var o=0;o<flakeCount;o++){t=o<flakeCount*.6?0:o<flakeCount*.8?1:o<flakeCount*.9?2:o<flakeCount*.98?3:4; var i=Math.floor(Math.random()*10)>=5?a+940:a; var s=i<940?Math.random()*i:940+a+Math.random()*a;r[o]=[s,Math.random()*n,t]}} function c(t){i.fillStyle=a,i.clearRect(0,0,e,n),i.beginPath(); for ( var o=0;o<flakeCount;o++){ var u=r[o][0]; var l=r[o][1]; var m=s[r[o][2]];i.drawImage(m,u,l)}i.fill();w();requestAnimationFrame(c)} function f(t,e){ var n,a,o;t=t.replace(/^s*#|s*$/g, "" );t.length===3&&(t=t.replace(/([0-9a-fA-F])/g, "$1$1" ));n=parseInt(t.substr(0,2),16);a=parseInt(t.substr(2,2),16);o=parseInt(t.substr(4,2),16); return "rgba(" +n+ ", " +a+ ", " +o+ ", " +e+ ")" } function w(){ var t,a,o,i,s,u,l;p=.01;a=Math.sin(p);l=(e-940)/2; for ( var m=0;m<flakeCount;m++){u=r[m];o=Math.sin(4*p+m);u[1]+=(u[2]/2+(2+o))/2;u[0]+=6*(a+o/2)/(10/u[2]);s=Math.floor(Math.random()*10)>=5?l+940:l;i=s<940?Math.random()*s:940+l+Math.random()*l;u[1]>n&&(u[1]=-20,u[0]=i); if (u[0]>l&&u[0]<940+l||u[0]>e||u[0]<-20){u[0]>e?u[0]=-20:u[0]=e-20}r[m]=u}} var h= new l})(); |
来自:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.9696e.com%2Farchives%2F1573
JS实现雪花效果的更多相关文章
- js实现雪花飘落效果的代码
使用js实现雪花飘落的效果,用html5绘布加js写的雪花飘效果 . 代码: <html> <head> <script> /** * js与html5实现的雪花飘 ...
- js之雪花飘落
有很多网站都有雪花或花瓣飘落的特效,看上去很好看.我来用js实现这个效果. 在写代码之前可以先引入bass.css对样式做下处理: 1.html部分 先建一个文件夹,在body中插入如下代码 < ...
- Html页面雪花效果的实现
简单介绍 昨天修改了一下博客所用的模板,冬天来了,给自己的博客加点雪花,感觉更有意境. 百度找到了非常多的结果,最终还是选用了cfs.snow.js,很赞压缩之后只有1kb左右,而且不会影响页面使用, ...
- React.js实现原生js拖拽效果及思考
一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...
- 用js实现动画效果核心方式
为了做好导航菜单,有时候需要在菜单下拉的时候实现动画效果,所以这几天就研究了研究如何用js实现动画效果,实现动画核心要用到两个函数,一个是setTimeOut,另一个是setInterval. 下边我 ...
- CAEmitterLayer实现雪花效果
CAEmitterLayer 简介 在iOS5.0中,Apple引入了CAEmitterLayer层,CAEmitterLayer是一个高性能的粒子效果引擎,被用来创建实时粒子动画,如:烟雾,火,雨等 ...
- js拖拽效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 原生JS实现分页效果2.0(新增了上一页和下一页,添加当前元素样式)
虽然写的很烂,但至少全部都是自己写的,因为这个没有固定的顺序,所以就没有封装,如果你技术好的话,可以你写的分享给我,谢谢. <!DOCTYPE html><html lang=&qu ...
- 原生JS实现分页效果1.0
不太完整,写的太急,等等加上完整注释,写起来还是有些难度的,写的有点水,后面再改进改进. <!DOCTYPE html><html lang="en">&l ...
随机推荐
- Activity之间传递参数(一)
-------siwuxie095 传递简单数据 (1)首先创建一个项目:SendArgs (2)选择API:21 Android 5.0 (3)选择 Empty Activity (4)默认 (5) ...
- [转] Android 4.4中播放HTML5视频<video>的Bug
近期Nexus 4手机自动升级到Android4.4,本来挺好的一件事儿,结果发现自己的应用中出现一个Bug,应用中使用了Webview播放HTML5视频,代码如下: <video width= ...
- ASP.NET MVC4中@model使用多个类型实例的方法
转http://blog.csdn.net/hulihui/article/details/48199897
- 黑科技项目:英雄无敌III Mod <<Fallen Angel>>介绍
英雄无敌三简介(Heroes of Might and Magic III) 英3是1999年由New World Computing在Windows平台上开发的回合制策略魔幻游戏,其出版商是3DO. ...
- Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的关系
转载请包含网址:http://blog.csdn.net/pathuang68/article/details/7351317 一.Surface Surface就是“表面”的意思.在SDK的文档中, ...
- 第五章 springboot + mybatis(转载)
本编博客转发自:http://www.cnblogs.com/java-zhao/p/5350021.html springboot集成了springJDBC与JPA,但是没有集成mybatis,所以 ...
- CentOS 6.5升级Python和安装IPython
<转自:http://www.noanylove.com/2014/10/centos-6-5-sheng-ji-python-he-an-zhuang-ipython/>自己常用.以做备 ...
- Linux新建用户无法使用tab补全的修改办法
原因: Root用的是/bin/bash 新增用户默认用的是/bin/sh,用ls -l /bin/sh发现 ->dash,修改下连接即可正常使用:
- 选择本地照片之后即显示在Img中(客户体验)
最近转战MVC项目,然后又再次遇到照片上传的实现,之前都是使用ASP.NET,虽然也有照片上传,而且出于客户体验考虑, 也实现了选择本地照片之后即时显示在IMG中,在这里就简单介绍其实现(ASP.NE ...
- sql月份销售统计
1.SELECT MONTH(SellTime) as selltime,SUM(TotalPrice) as total FROM Sell WHERE YEAR(SellTime)=CON ...