博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript雪花效果 注释版
阅读量:5087 次
发布时间:2019-06-13

本文共 5181 字,大约阅读时间需要 17 分钟。

1 (function () {  2     // 添加事件监听器  3     function addEvent(a, b, c) {  4         if (a.addEventListener) a.addEventListener(b, c, false);  5         else a.attachEvent && a.attachEvent("on" + b, c)  6     }  7     // 向window.onload添加执行函数  8     function addToOnLoad(a) {  9         if (typeof window.onload != "function") window.onload = a; 10         else { 11             var b = window.onload; 12             window.onload = function () { 13                 b(); 14                 a() 15             } 16         } 17     } 18     // scroll top ,left 19     function getScrollDis() { 20         var scroll = {}; 21         for (var type in { 22             Top: "", 23             Left: "" 24         }) { 25             var b = type == "Top" ? "Y" : "X"; 26             if (typeof window["page" + b + "Offset"] != "undefined") scroll[type.toLowerCase()] = window["page" + b + "Offset"]; 27             else { 28                 //   29                 b = document.documentElement.clientHeight ? document.documentElement : document.body; 30                 scroll[type.toLowerCase()] = b["scroll" + type] 31             } 32         } 33         return scroll; 34     } 35  36     // 获取浏览器窗口高度(不包括工具栏/滚动条) 37     function getWinHeight() { 38         39         var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; 40         return height; 41     } 42  43     //构造函数 ,模拟雪花类 44     function SnowDot(a) { 45         this.parent = document.body; 46         this.createEl(this.parent, a); 47         this.size = Math.random() * 5 + 5; // 随机设置雪花的大小 48         this.el.style.width = Math.round(this.size) + "px"; 49         this.el.style.height = Math.round(this.size) + "px"; 50         this.maxLeft = document.body.offsetWidth - this.size; 51         this.maxTop = document.body.offsetHeight - this.size; 52         this.left = Math.random() * this.maxLeft; 53         this.top = getScrollDis().top + 1; 54         this.angle = 1.4 + 0.2 * Math.random(); 55         // PI/2 =1.57 56         this.minAngle = 1.4; 57         this.maxAngle = 1.6; 58         // 角度增量 59         this.angleDelta = 0.01 * Math.random(); 60         this.speed = 2 + Math.random() 61     } 62     // 原型 对象实例所共享 63     SnowDot.prototype = { 64         createEl: function (a, b) { 65             this.el = document.createElement("img"); 66             this.el.setAttribute("src", b + "snow" + Math.floor(Math.random() * 4) + ".gif"); 67             this.el.style.position = "absolute"; 68             this.el.style.display = "block"; 69             this.el.style.zIndex = "99999"; 70             this.parent.appendChild(this.el) 71         }, 72         move: function () { 73             if (this.angle < this.minAngle || this.angle > this.maxAngle) this.angleDelta = -this.angleDelta; 74             this.angle += this.angleDelta; 75             // 利用正弦波 余弦波(注意波形图在 pi/2 附近的取值) 76             this.left += this.speed * Math.cos(this.angle * Math.PI); 77             this.top -= this.speed * Math.sin(this.angle * Math.PI); 78             if (this.left < 0) this.left = this.maxLeft; 79             else if (this.left > this.maxLeft) this.left = 0 80         }, 81         draw: function () { 82             this.el.style.top = Math.round(this.top) + "px"; 83             this.el.style.left = Math.round(this.left) + "px" 84         }, 85         remove: function () { 86             this.parent.removeChild(this.el); 87             this.parent = this.el = null 88         } 89     } 90  91     var j = false; 92     addToOnLoad(function () { 93         j = true 94     }); 95  96     //开启/关闭 标志 97     var f = true; 98  99     // a : 雪花gif图片所在路径  100     // b : 雪花最大数目101     window.createSnow = function (a, b) {102         if (j) {103             var c = [],104             m = setInterval(function () {105                 // &&前的为false则后边的语句不再执行 106                 f && b > c.length && Math.random() < b * 0.0025 && c.push(new SnowDot(a));107                 !f && !c.length && clearInterval(m);108                 for (var e = getScrollDis().top, n = getWinHeight(), d = c.length - 1; d >= 0; d--) {109                     if (c[d]) {110                         // 雪花超出指定高度 111                         if (c[d].top > 700 || c[d].top + c[d].size + 1 > e + n) {112                             c[d].remove();113                             c[d] = null;114                             c.splice(d, 1) //移除数组索引d位置开始1个元素115                             //alert(c[d].top)116                         } else {117                             c[d].move();118                             c[d].draw()119                         }120                     }121                 }122             },123             40);124             // 窗口滚动时 雪花移动相应的距离125             addEvent(window, "scroll",126             function () {127                 for (var e = c.length - 1; e >= 0; e--) c[e].draw()128             })129         } else addToOnLoad(function () {130             createSnow(a, b)131         })132     };133     window.removeSnow = function () {134         f = false135     };136  137 })();  

    页面内容节选自 阿狸-梦之城堡

转载于:https://www.cnblogs.com/mushishi/p/3566711.html

你可能感兴趣的文章
Django组件——分页器和中间件
查看>>
scala 14 trait
查看>>
You need to run build with JDK or have tools.jar问题解决
查看>>
BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]
查看>>
HDU 3949 XOR [高斯消元XOR 线性基]
查看>>
LeetCode Best Time to Buy and Sell Stock III
查看>>
PHP变量引用赋值后unset 输出原始变量,值存在.
查看>>
简单的新浪微博爬虫-Python版-(下载部分)---(上)
查看>>
for-each用法误区(不能改变数组元素值)
查看>>
f.select
查看>>
SSH2各部分作用
查看>>
不设置默认网关,导致traceroute无法获取途经路由信息原因
查看>>
MySql优化—删除操作
查看>>
三天打渔两天晒网
查看>>
python编码的那些事
查看>>
5.MVC框架开发(强类型开发,控制器向界面传递数据的几种方法)
查看>>
编程语言分类
查看>>
[转]GIT PUSH Error 403的解决方法
查看>>
Unity 移动主角的时候,鼠标被固定在屏幕中心而且被隐藏
查看>>
自已接触过的数据访问方式总结
查看>>