jquery.snowfall.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /**
  2. * Created by JetBrains PhpStorm.
  3. * User: sul4bh
  4. * Date: 12/17/11
  5. * Time: 11:44 PM
  6. * To change this template use File | Settings | File Templates.
  7. */
  8. var intervalId;
  9. ( function ($) {
  10. $.fn.snowFall = function (options) {
  11. var settings = {
  12. 'color': '#eee',
  13. 'interval': 10,
  14. 'total': 20
  15. };
  16. // Override default values if values provided
  17. if ( options ) {
  18. $.extend(settings, options);
  19. }
  20. /*
  21. * Helper functions starts
  22. */
  23. function init( number ){
  24. if ( temp.currTotal <= settings.total ) {
  25. for ( i = 0; i < number; i++ ) {
  26. var obj = $("<div class='snow'>*</div>");
  27. obj.css('color', settings.color);
  28. obj.css('position', 'absolute');
  29. obj.css('opacity', '0.9');
  30. var rand = Math.random() * 15 + 8;
  31. obj.css('font-size', rand);
  32. obj.css('top', 0);
  33. var random = Math.floor(Math.random() * $(window).width() - 5);
  34. obj.css('left', random);
  35. obj.data('direction', Math.floor(Math.random() * 3) - 1);
  36. obj.data('speed', Math.floor(Math.random() * 2) + 1);
  37. obj.data('iter', 0);
  38. $('body').append(obj);
  39. temp.currTotal++;
  40. }
  41. }
  42. }
  43. var temp = {};
  44. temp.currTotal = 0;
  45. //start with 5 flakes
  46. init(5);
  47. setInterval(function () {
  48. $('.snow').each(function () {
  49. var speed = $(this).data('speed');
  50. var iter = $(this).data('iter');
  51. var dirn = $(this).data('direction');
  52. $(this).data('iter', iter + 1);
  53. if ( speed == iter ) {
  54. $(this).data('iter', 0);
  55. var p = $(this).position();
  56. if ((p.top + 40) < $(window).height()) {
  57. $(this).css('top', p.top + 1);
  58. } else {
  59. $(this).remove();
  60. temp.currTotal--;
  61. return 0;
  62. }
  63. if ((p.left + 20) < $(document).width() && p.left > 0) {
  64. $(this).css('left', p.left + dirn);
  65. } else {
  66. $(this).remove();
  67. temp.currTotal--;
  68. return 0;
  69. }
  70. }
  71. });
  72. }, settings.interval
  73. );
  74. intervalId = setInterval(function () {
  75. init(1);
  76. }, 1000);
  77. };
  78. $.fn.stopFall = function () {
  79. clearInterval(intervalId);
  80. };
  81. })(jQuery);