zoukankan      html  css  js  c++  java
  • javascript雪花效果 注释版

      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                 // <html> 
     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 = false
    135     };
    136  
    137 })();  

     源代码:snow.zip   页面内容节选自 阿狸-梦之城堡

  • 相关阅读:
    PHP利用CURL_MULTI实现多线程
    PHP也玩并发,巧用curl 并发减少后端访问时间
    Mysql 地区经纬度 查询
    Cron表达式简单学习
    定时任务实现
    Android ListView简单实用
    关于分布式事物 转
    关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究 转载
    数据库范式
    配置org.springframework.scheduling.quartz.CronTriggerBean (转载)
  • 原文地址:https://www.cnblogs.com/mushishi/p/3566711.html
Copyright © 2011-2022 走看看