JAVASCRIPT   16

5sec-snow.js

Guest on 29th July 2021 03:07:24 PM

  1. /*
  2.  * 5sec Snow
  3.  * (c) . Web factory Ltd
  4.  * http://www.webfactoryltd.com/
  5. **/
  6.  
  7. function Mash() {
  8.   var n = 0xefc8249d;
  9.  
  10.   var mash = function(data) {
  11.     data = data.toString();
  12.     for (var i = 0; i < data.length; i++) {
  13.       n += data.charCodeAt(i);
  14.       var h = 0.02519603282416938 * n;
  15.       n = h >>> 0;
  16.       h -= n;
  17.       h *= n;
  18.       n = h >>> 0;
  19.       h -= n;
  20.       n += h * 0x100000000; // 2^32
  21.     }
  22.     return (n >>> 0) * 2.3283064365386963e-10; // 2^-32
  23.   };
  24.  
  25.   mash.version = 'Mash 0.9';
  26.   return mash;
  27. }
  28.  
  29. function Alea() {
  30.   return (function(args) {
  31.     var s0 = 0;
  32.     var s1 = 0;
  33.     var s2 = 0;
  34.     var c = 1;
  35.  
  36.     if (args.length == 0) {
  37.       args = [+new Date];
  38.     }
  39.     var mash = Mash();
  40.     s0 = mash(' ');
  41.     s1 = mash(' ');
  42.     s2 = mash(' ');
  43.  
  44.     for (var i = 0; i < args.length; i++) {
  45.       s0 -= mash(args[i]);
  46.       if (s0 < 0) {
  47.         s0 += 1;
  48.       }
  49.       s1 -= mash(args[i]);
  50.       if (s1 < 0) {
  51.         s1 += 1;
  52.       }
  53.       s2 -= mash(args[i]);
  54.       if (s2 < 0) {
  55.         s2 += 1;
  56.       }
  57.     }
  58.     mash = null;
  59.  
  60.     var random = function() {
  61.       var t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32
  62.       s0 = s1;
  63.       s1 = s2;
  64.       return s2 = t - (c = t | 0);
  65.     };
  66.     random.uint32 = function() {
  67.       return random() * 0x100000000; // 2^32
  68.     };
  69.     random.fract53 = function() {
  70.       return random() +
  71.         (random() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53
  72.     };
  73.     random.version = 'Alea 0.9';
  74.     random.args = args;
  75.     return random;
  76.  
  77.   } (Array.prototype.slice.call(arguments)));
  78. };
  79.  
  80.  
  81. (function($) {
  82.   $.snow = function(options) {
  83.     var timer, tmp = 0;
  84.     var random = Alea();
  85.     var body_el = $('.notify');
  86.     var degree = new Array();
  87.     var set_winds = new Array();
  88.     var flakes = new Array();
  89.     var flake_size = 5;
  90.  
  91.     var xp = new Array();
  92.     var yp = new Array();
  93.     var sty = new Array();
  94.  
  95.     // default options
  96.     var defaults = {
  97.       'flake_number'  : 40, // max number of flakes on screen
  98.       'flake_folder'  : 'big-24/', // folder with flake images snowflake-%d.gif
  99.       'flake_imgs'    : 6,  // number of flakes in folder
  100.       'link'          : '', // flake link URL
  101.       'linked_flakes' : 0, // percent of linked flakes
  102.       'wind'          : 60, // 0 - straight fall; max horizontal delta
  103.       'speed'         : 10, // 5 (slow), 8 (normal), 20 (fast); max pixsel step in one frame
  104.       'rotation'      : 5, // 0 (off), 2 (slow), 5 (speedy), 10 (stormy)
  105.       'melt'          : 500, // 0 - off, >0 melting speed in miliseconds
  106.       '_window_width' : 0, // don't touch if you don't know what you're doing
  107.       '_window_height': 0, // don't touch if you don't know what you're doing
  108.       '_fps'          : 25 // don't touch if you don't know what you're doing
  109.     };
  110.     options = $.extend(defaults, options);
  111.  
  112.     options.flake_number  = parseInt(options.flake_number, 10);
  113.     options.flake_imgs    = parseInt(options.flake_imgs, 10);
  114.     options.link          = $.trim(options.link);
  115.     options.linked_flakes = parseInt(options.linked_flakes, 10);
  116.     options.wind          = parseInt(options.wind, 10);
  117.     options.speed         = parseInt(options.speed, 10);
  118.     options.rotation      = parseInt(options.rotation, 10);
  119.     options.melt          = parseInt(options.melt, 10);
  120.     options._fps          = parseInt(options._fps, 10);
  121.  
  122.     if (options.flake_folder.length > 4 && typeof(options.flake_folder) != 'object') {
  123.       options.flake_folder  = $.trim(options.flake_folder);
  124.       flake_size = parseInt(options.flake_folder.substr(options.flake_folder.length - 3, 2));
  125.     }
  126.  
  127.     // customize window size if needed
  128.     if (!options._window_width) {
  129.       options._window_width = $(window).width() + 100;
  130.     }
  131.     if (!options._window_height) {
  132.       options._window_height = $(window).height();
  133.     }
  134.  
  135.     // generate flakes
  136.     for (var i = 0; i < options.flake_number; i++) {
  137.       xp[i] = Math.round(random() * options._window_width); // initial X pos
  138.       yp[i] = Math.max(Math.round(random() * options._window_height / -2 - 20), -500); // initial Y pos
  139.       sty[i] = Math.round(options.speed/2 + random()*options.speed/2); // flake speed, Y step
  140.       degree[i] = 0; // initial rotation degree
  141.       set_winds[i] = Math.round(options.wind/2 + random()*options.wind/2);  // wind X dev
  142.  
  143.       // flake element
  144.       body_el.append('<div class="wf-flake" id="wf-flake-' + i +'" style="color: white; background-color: transparent!important; position: fixed; display: block; z-index: ' + (i+99999999) + '"></div>');
  145.  
  146.       if (typeof(options.flake_folder) == 'object') {
  147.         flake_elem = options.flake_folder[Math.floor(random() * options.flake_folder.length)];
  148.       } else {
  149.         flake_elem = '<img src="' + options.flake_folder + 'snowflake-' + (Math.floor(random() * options.flake_imgs)+1) + '.gif' + '" style="border:0!important; background-color:transparent!important; margin:0!important; padding:0!important;" width="' + flake_size + '" height="' + flake_size + '" />';
  150.       }
  151.  
  152.       if (Math.floor(random() * 100) < options.linked_flakes && options.link) {
  153.         // create linked flake
  154.         $('#wf-flake-' + i).append('<a href="' + options.link + '" style="background-color: transparent!important; border:0!important; text-decoration: none;">' + flake_elem + '</a>');
  155.       } else {
  156.         // create plain flake
  157.         $('#wf-flake-' + i).append(flake_elem);
  158.       }
  159.       // cache flake
  160.       flakes[i] = $('#wf-flake-' + i);
  161.     } // for all flakes
  162.  
  163.     var methods = {
  164.       snow: function() {
  165.         for (var i = 0; i < options.flake_number; i++) {
  166.           yp[i] += sty[i];
  167.           if (yp[i] > options._window_height - flake_size*0.75) {
  168.             if (options.melt) { // fade flake
  169.               flakes[i].fadeOut(options.melt, function(){
  170.                   xp[i] = Math.round(random() * options._window_width);
  171.                   //yp[i] = Math.round(random() * options._window_height / -2 + 20);
  172.                   yp[i] = Math.round(random() * options._window_height / -2);
  173.               });
  174.             } else { // no fade
  175.               if (yp[i] > options._window_height + flake_size) { // flake has fallen?
  176.                 xp[i] = Math.round(random() * options._window_width);
  177.                 //yp[i] = Math.max(Math.round(random() * options._window_height / -2 - 20), -500);
  178.                 yp[i] = Math.max(Math.round(random() * options._window_height / -2 ), -500);                
  179.               } else {
  180.                 if (options.wind) {
  181.                   if (i % 2) {
  182.                     tmp = Math.cos(yp[i]/100) * set_winds[i] + xp[i];
  183.                   } else {
  184.                     tmp = Math.sin(yp[i]/100) * set_winds[i] + xp[i];
  185.                   }
  186.                 } else {
  187.                   tmp = xp[i];
  188.                 }
  189.                 flakes[i].show()
  190.                          .css('top', yp[i])
  191.                          .css('left', tmp);
  192.               }
  193.             }
  194.           } else {
  195.             // flake X position
  196.             if (options.wind) {
  197.               if (i % 2) {
  198.                 tmp = Math.cos(yp[i]/100) * set_winds[i] + xp[i];
  199.               } else {
  200.                 tmp = Math.sin(yp[i]/100) * set_winds[i] + xp[i];
  201.               }
  202.             } else {
  203.               tmp = xp[i];
  204.             }
  205.             flakes[i].show()
  206.                      .css('top', yp[i])
  207.                      .css('left', tmp);
  208.             // rotation; no IE, thanks MS!
  209.             if (!navigator.appVersion.indexOf("MSIE") && options.rotation != 0)
  210.              {
  211.               if (i % 2) {
  212.                 degree[i] -= options.rotation;
  213.               } else {
  214.                 degree[i] += options.rotation;
  215.               }
  216.                 degree[i] %= 360;
  217.                 flakes[i].css({ WebkitTransform: 'rotate(' + degree[i] + 'deg)'})
  218.                          .css({ '-moz-transform': 'rotate(' + degree[i] + 'deg)'})
  219.                          .css({"transform": "rotate(" + degree[i] + "deg)"})
  220.                          .css({"-o-transform":"rotate(" + degree[i] + "deg)"})
  221.                          .css({"-ms-transform":"rotate(" + degree[i] + "deg)"});
  222.             } // if rotation
  223.           } // if in screen
  224.         }// for flakes
  225.       } // snow()
  226.     }; // methods
  227.  
  228.     // animation interval
  229.  
  230.     timer = setInterval(methods.snow, Math.round(1/parseInt(options._fps)*1000));
  231.   }; // fn.snow
  232. } (jQuery));

Raw Paste


Login or Register to edit or fork this paste. It's free.