(function($){ var SNOW_INTERVAL_KEY = 'snow-interval'; $.fn.snow = function(option){ // 销毁支持 if(option==='destroy'){ return this.each(function(){ var id = $(this).data(SNOW_INTERVAL_KEY); if(id) clearInterval(id); $('.snow-flake').remove(); }); } var opt = $.extend({ minSize: 8, maxSize: 18, newOn: 400, flakeColor: "#fff" }, option); // 生成雪花并下落 var timer = setInterval(function(){ var ww = window.innerWidth, wh = window.innerHeight; var size = opt.minSize + Math.random() * (opt.maxSize - opt.minSize); var startLeft = Math.random() * ww; var endLeft = startLeft + (Math.random() - .5) * 200; var dur = wh * 8 + Math.random() * 2500; $('').css({ position:'fixed', top:-size+'px', left:startLeft, zIndex:9999, fontSize: size, color: opt.flakeColor, opacity: .4 + Math.random() * .6, pointerEvents:'none' }).appendTo('body').animate({ top: wh+20, left: endLeft, opacity: 0.15 }, dur, 'linear', function(){$(this).remove();}); }, opt.newOn); // 返回自身,方便链式;记录定时器id以支持销毁 return this.each(function(){$(this).data(SNOW_INTERVAL_KEY, timer);}); }; })(jQuery); // 初始化 $(function(){ $(document).snow({ minSize: 6, maxSize: 28, newOn: 350 }); // 销毁方法示例: // setTimeout(()=>{$(document).snow('destroy');}, 10000); });