/** * jQuery coffee Tags * jQuery coffee Clouds plus v1.0 * * .jQuery{ float : cloud ;} * * 网址 : http://julying.com/lab/coffee/ * 类型: 原创脚本 * 邮箱 : i@julying.com) * 发布 : 2012-07-07 22:28 * 版权所有 2012 | julying.com * 此插件遵循 MIT、GPL2、GNU 许可. * http://julying.com/code/license/ * *************************** */ ;(function($){ $.extend( jQuery.easing ,{ flyFastSlow: function (x, t, b, c, d) { return -c * ((t=t/d-1)*t*t*t - 1) + b; } }); $.fn.coffee = function(option){ var $coffee = $(this); var opts = $.extend({},$.fn.coffee.defaults,option); var coffeeWidth = $coffee.width() + opts.coffeeHandleWidth - 100 ; $coffee.append('
'); var $coffeeSteamBox = $coffee.find('div.coffee-steam-box'); var coffeeSteamBoxWidth = $coffeeSteamBox.width(); var keyword_times = 0; var str_times = 0; var str_max_times = 0; var an_stop = 0 ; //最大次數 if( opts.steams.length > opts.steamsShowMax ){ str_max_times = opts.steamsShowMax; }else{ str_max_times = opts.steams.length; } //字大小配對 var max_size = opts.steamMaxSize; var min_size = opts.steamMinSize; var now_size = max_size; var SizeLayout = opts.steamMaxSize - opts.steamMinSize + 1 ; var SizeI = SizeLayout / opts.steams.length; var Size_Arr = new Array(); //跳段間距 if( SizeI < 1 ){ /* 1/(10/20) = 20/10 * max_size = 15 * min_size = 10 * opts.steams.length = 10 * print 15.15.14.14.13.13.12.12.11.11*/ SizeI = Math.ceil( 1 / SizeI ); for( var i = 0 ; i < opts.steams.length ; i++){ Size_Arr[opts.steams[i]] = now_size ; if( i % SizeI == SizeI - 1 ){ if( now_size - SizeI >= min_size ){//是否小於最小範圍 now_size--; } } } }else{ /* max_size = 24 * min_size = 10 * opts.steams.length = 10 * 印出結果24.22.20.18.16.14.12.10.10.10*/ SizeI = Math.ceil(SizeI); for( var i = 0 ; i < opts.steams.length ; i++){ Size_Arr[opts.steams[i]] = now_size ; if( now_size - SizeI >= min_size ){//是否小於最小範圍 now_size -= SizeI; } } } //亂數 for( var a = 0 ; a < opts.steams.length ; a++ ){ var ran = Math.floor(Math.random()*(opts.steams.length-1)); var tmp = opts.steams[a]; opts.steams[a] = opts.steams[ran]; opts.steams[ran] = tmp; } //opts.steams.sort(function(){return Math.random()>0.5?-1:1}); setInterval(function(){ if( str_max_times != keyword_times ){ steam(); }else if( opts.reKeywords ){ steam(); } }, rand( opts.makeSteamInterval / 2 , opts.makeSteamInterval * 2 ) ); if( opts.windSwitch ){ wind(); } return $coffee ; function steam(){ coffeeSteamBoxWidth = $coffeeSteamBox.width(); var fontSize = Size_Arr[opts.steams [keyword_times]];//rand( opts.steamMinSize , opts.steamMaxSize ) ; var xPos = rand( coffeeSteamBoxWidth - coffeeWidth , coffeeSteamBoxWidth - opts.coffeeHandleWidth - fontSize ); var rotate = rand(-10,10); var rotateStyle = ' -moz-transform:rotate('+rotate+'deg);-webkit-transform:rotate('+rotate+'deg);-o-transform:rotate('+rotate+'deg);transform:rotate('+rotate+'deg);'; var color = randoms( 1 , opts.steamFontColor )//'#'+ randoms(6 , '0123456789ABCDEF' ); var steamsFontFamily = randoms( 1, opts.steamsFontFamily ) var html = ''+ opts.steams [keyword_times] +''; //randoms( 1, opts.steams ) var html_txt = ''+ opts.steams [keyword_times] +''; var $fly = $(html); var $show_str = $(html_txt); var left = rand( 0 , coffeeSteamBoxWidth - opts.coffeeHandleWidth - fontSize ); //alert($fly.attr("style")); if( left > xPos ) left = rand( 150 , 268 );//left = rand( 0 , xPos ); $fly.appendTo($coffeeSteamBox).animate({ top : rand( opts.steamTopMax / 2 , 0 ), left : left, opacity : 0.05 } , rand( opts.SteamFlyTime / 3 * 2 , opts.SteamFlyTime * 1.2 ) , 'flyFastSlow' , function(){ if( str_max_times > str_times ){ $(opts.appendDIV ).append(' '+$show_str.html()+''); $(opts.appendDIV).children("a:last").hover(function(){ $(this).css({"font-size":"+=5px"}); },function(){ $(this).css({"font-size":"-=5px"}); } ) str_times++; } $fly.remove(); $fly = null; }); keyword_times++; //歸零 if( opts.steams.length == keyword_times && opts.reKeywords ){ keyword_times = 0 ; } }; function wind(){ var left = rand( - coffeeWidth + opts.coffeeHandleWidth , 0 ); //左右飄的感覺 $coffeeSteamBox.animate({ width : Math.abs(left) + coffeeWidth , left : left } , rand( 1000 , 3000) , rand( 1 , ['flyFastSlow' ]), function(){ setTimeout(function(){ wind(); }, rand( 100 , 3000 ) ) ; }); }; function randoms( length , chars ) { length = length || 1 ; var hash = ''; var maxNum = chars.length - 1; var num = 0; for( i = 0; i < length; i++ ) { num = rand( 0 , maxNum - 1 ); hash += chars.slice( num , num + 1 ); } return hash; }; function rand(mi,ma){ var range = ma - mi; var out = mi + Math.round( Math.random() * range) ; return parseInt(out); }; }; $.fn.coffee.defaults = { steams : ['jQuery','HTML5','HTML6','CSS2','CSS3','JS','$.fn()','char','short','if','float','else','type','case','function','travel','return','array()','empty()','eval','C++','JAVA','PHP','JSP','.NET','while','this','$.find();','float','$.ajax()','addClass','width','height','Click','each','animate','cookie','bug','Design','Julying','$(this)','i++','Chrome','Firefox','Firebug','IE6','Guitar' ,'Music' ,'攻城师' ,'旅行' ,'王子墨','啤酒'], steamsFontFamily : ['Verdana','Geneva','Comic Sans MS','MS Serif','Lucida Sans Unicode','Times New Roman','Trebuchet MS','Arial','Courier New','Georgia'], steamFontColor : ['#556699','#885544','#159864','#d98542','#ad9e65','#5b8c90'], SteamFlyTime : 5000 , /*Steam飞行的时间,单位 ms 。(决定steam飞行速度的快慢)*/ makeSteamInterval : 400 , /*制造Steam时间间隔,单位 ms.*/ steamMinSize : 8 ,/*字型最小.*/ steamMaxSize : 30 ,/*字型最大*/ steamTopMax : 200,/*字出現的高度*/ coffeeHandleWidth : 300,/*左右搖擺寬度*/ steamsShowMax : 10,/*最大出現字數*/ appendDIV : "#appendkeyword", windSwitch : true,/*左右搖擺開關*/ reKeywords : true/*重複*/ }; $.fn.coffee.version = '1.0.0'; })(jQuery);