http://jquery.com/
http://plugins.jquery.com/project/color
http://semooh.jp/jquery/api/effects/animate/params,+%5Bduration%5D,+%5Beasing%5D,+%5Bcallback%5D/
アニメーションのサンプルです。
クリックするとスタートします。
もう一度クリックするとストップします。
色を変化させるには追加のプラグインが必要です。もしくは手動です。
たまにブラウザ(firefox7で確認)によっては落ちます。ご注意下さい。
ⅠⅡⅢⅣⅤ
ⅥⅦⅧⅨⅩ
①②③④⑤
⑥⑦⑧⑨⑩
⑪⑫⑬⑭⑮
⑯⑰⑱⑲⑳
01234
56789
ⅥⅦⅧⅨⅩ
①②③④⑤
⑥⑦⑧⑨⑩
⑪⑫⑬⑭⑮
⑯⑰⑱⑲⑳
01234
56789
ソース。
<style type="text/css"> <!-- #wordTestTwitch002, #wordTestTwitch002 *, #wordTestTwitch002Result { border: 0px solid #676767; border-width: 0px; color: #181818; font-family: "MS ゴシック","Osaka-mono",monospace; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: 0px; line-height: 17px; margin: 0px; padding: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; word-spacing: 0px; word-wrap: normal; } #wordTestTwitch002, #wordTestTwitch002 * { -khtml-user-select: none; -moz-user-select: none; user-select: none; } #wordTestTwitch002 { background-color: #FFFFFF; border-width: 1px; cursor: pointer; height: 136px; overflow: hidden; padding: 100px 150px; position: absolute; vertical-align: middle; white-space: nowrap; width: 80px; z-index: 2; } #wordTestTwitch002Result { background-color: #FFFFFF; border-width: 1px; height: 8em; margin: 352px 0 0 0; overflow: auto; padding: 8px 0 8px 8px; width: auto; } --> </style> <div id="wordTestTwitch002"> ⅠⅡⅢⅣⅤ<br/> ⅥⅦⅧⅨⅩ<br/> ①②③④⑤<br/> ⑥⑦⑧⑨⑩<br/> ⑪⑫⑬⑭⑮<br/> ⑯⑰⑱⑲⑳<br/> 01234<br/> 56789<br/> </div> <div style="clear:both; display:block; font-size: 1px; height: 1px; line-height: 1px;"></div> <div id="wordTestTwitch002Result"></div> <script type="text/javascript"> //<![CDATA[<!-- try{(function(){ var divElem = document.getElementById("wordTestTwitch002"), resultElem = document.getElementById("wordTestTwitch002Result"), divElemOuterWidth = $(divElem).outerWidth(), divElemOuterHeight = $(divElem).outerHeight(), orderCount = 0, processCount = 0, loopCount = 8, maxFontSize = Math.min($(divElem).width(), $(divElem).height()) / 2, accelDiameter = 50, animateDuration = 500, loopSleep = 1000, animateWait = 50, startTime = null, checkStop = function(){ processCount--; if (processCount <= 0) { $(divElem).unbind("click").css("cursor", "default"); } }, wordTestTwitch002FuncTimeOverList = [], resultElemScrollCount = 0, resultElemScroll = function(){ resultElemScrollCount++; }, resultElemScrollProcess = function(){ var i; if (resultElemScrollCount == -100) { $(resultElem).animate( {scrollTop:0}, {"duration": 8000, "complete": function(){$(resultElem).css("background-color", "#BCDEFF"); $(divElem).css("background-color", "#BCDEFF");}}); } else if (resultElemScrollCount <= 0) { if (processCount <= 0) { for (i = 0; i < wordTestTwitch002FuncTimeOverList.length; i++) { $(resultElem).append("移動回数オーバー: " + wordTestTwitch002FuncTimeOverList[i] + "<" + "br/>"); } $(resultElem).animate({scrollTop:65535},"fast"); resultElemScrollCount = -100; setTimeout(resultElemScrollProcess, 2000); } else { setTimeout(resultElemScrollProcess, 2000); } } else { resultElemScrollCount--; $(resultElem).animate({scrollTop:65535},"fast"); setTimeout(resultElemScrollProcess, 500); } }, resultElemScrollProcessStart = function(){ $(divElem).unbind("click", resultElemScrollProcessStart); resultElemScrollProcess(); }, randFunc = function(division){ return ((Math.random() * 2) - 1) * division; }; $(divElem).each(function(){ $(this).html($(this).html().replace(/((?:<[^<>]+>)*)([^<])((?:<[^<>]+>)*)/g, function(){ if (arguments[2].match(/^[\x00-\x20]$/)) { return arguments[1] + arguments[2] + arguments[3]; } return arguments[1] + "<" + "span class='wordTestTwitch002Class'>" + arguments[2] + "<" + "/span>" + arguments[3]; })); }).find(".wordTestTwitch002Class").each(function(){ $(this) .css("position", "relative") .css("z-index", "1") .bind("selectstart",function(){ return false; }).mousedown(function(){ return false; }); var cnt = 0, elem = $(this), top = 0, left = 0, fontSize = parseFloat(elem.css("font-size")), stopFlag = false, animateFlag = false, setTransparent = function(){ elem .css("color", "#FFFFFF").css("z-index", "0") .css("filter", "alpha(opacity=0)") .css("-ms-filter", "alpha(opacity=0)") .css("opacity", "0") ; }, elemRemove = function(){ if (processCount <= 0) { elem.remove(); } else { setTimeout(elemRemove, 8000); } }, wordTestTwitch002FuncStop = function(){ setTransparent(); checkStop(); if (processCount <= 0) { $(resultElem).append("ストップ<" + "br/>").css("background-color", "#FFEDCB"); } elemRemove(); }, wordTestTwitch002FuncTimeOver = function(){ setTransparent(); wordTestTwitch002FuncTimeOverList.push(elem.text()); checkStop(); resultElemScroll(); elemRemove(); }, wordTestTwitch002FuncArrival = function(){ setTransparent(); orderCount++; $(resultElem).append( (" " + orderCount).slice(-2).replace(" ", " ") + "位: " + elem.text() + " (font-size:" + (" " + Math.round(fontSize)).slice(-3).replace(" ", " ") + "px" + " time:" + String(((new Date().getTime()) - startTime) / 1000).replace(/^([0-9]+)(?:\.([0-9]+))?$/,function(){ var ret = "", decimal = arguments[2]; if (parseInt(arguments[1], 10) >= 1000) { ret += arguments[1]; } else { ret += (" " + arguments[1]).slice(-3).replace(" ", " "); } if (typeof decimal !== "string") { decimal = ""; } return ret + "." + (decimal + "00").substr(0, 2); }) + "秒" + ")<" + "br/>" ); checkStop(); resultElemScroll(); elemRemove(); }, wordTestTwitch002FuncExecute = function(){ var accel, fontSizeOld, randSleep = function(){ return Math.round(Math.random() * (animateDuration + loopSleep) / 0.25); }; if (animateFlag === false) { if (stopFlag) { wordTestTwitch002FuncStop(); return; } if (++cnt > loopCount) { wordTestTwitch002FuncTimeOver(); return; } accel = Math.pow(accelDiameter * cnt / loopCount, 2) / accelDiameter; if (fontSize < 5) { accel *= (6 - fontSize); } else if ((maxFontSize - fontSize) < 5) { accel /= (6 - (maxFontSize - fontSize)); } fontSizeOld = fontSize; fontSize += randFunc(1 + accel + ((maxFontSize <= fontSize) ? (maxFontSize * 3) : 0)); fontSize = Math.max(1, Math.min(maxFontSize, fontSize)); top += randFunc(1 + accel) + ((fontSizeOld - fontSize) / 0.125); left += randFunc(1 + (accel * 8)) + ((fontSizeOld - fontSize) / 2); animateFlag = true; elem.animate({"top": Math.round(top) + "px", "left": Math.round(left) + "px", "font-size": Math.round(fontSize) + "px", "line-height": Math.round(fontSize) + "px"} ,{"duration": animateDuration + randSleep(), "complete": function(){animateFlag = false;}}); if ((divElemOuterWidth < elem.position().left) || (0 > (elem.position().left + elem.outerWidth())) || (divElemOuterHeight < elem.position().top) || (0 > (elem.position().top + elem.outerHeight()))) { wordTestTwitch002FuncArrival(); return; } setTimeout(wordTestTwitch002FuncExecute, loopSleep + randSleep()); } else { setTimeout(wordTestTwitch002FuncExecute, animateWait); } }, startFunc = function(){ $(divElem).unbind("click", startFunc); setTimeout(wordTestTwitch002FuncExecute, Math.round(Math.random() * 8000)); $(divElem).click(stopFunc); if (startTime === null) { startTime = new Date().getTime(); } }, stopFunc = function(){ $(divElem).unbind("click", stopFunc); stopFlag = true; }; $(divElem).click(startFunc); processCount++; }); $(divElem) .bind("selectstart",function(){ return false; }).mousedown(function(){ return false; }) .click(resultElemScrollProcessStart); })();}catch(e){window.document.write("<"+"pre>Error: " + e + "<"+"/pre>");} //-->]]> </script>
0 件のコメント:
コメントを投稿