// UTF-8 // クロスフェードするロールオーバー処理 // by KAZUMiX // http://d.hatena.ne.jp/KAZUMiX/20071017/rollover2 // // 2011.4.20 edited by fujimi // imgタグだけではなく、inputタグにも機能するように改修 // // 2011.4.22 edited by fujimi // jQuery化 (function($){ var overImages = []; $(function(){ $("a img, input[type=image]").each(function(e){ var target = $(this); var splitname = this.src.split('_n.'); if( splitname[1] ){ var rolloverImg = target.attr('type') ? $('').attr('type', 'image') : $(''); rolloverImg.attr('src', splitname[0]+'_o.'+splitname[1]) .css({"position": "absolute", "opacity":0}) .hover( function(){setFader(this,100);}, function(){setFader(this,0);} )[0].currentAlpha = 0; target.before(rolloverImg); overImages.push(rolloverImg[0]); } }); }); //unload時にロールオーバー画像を消す $(window).unload(function(){ var l = overImages.length; for( var i=0; i < l; i++ ){ faderEnd(overImages[i]); } }); // 指定要素を指定透明度にするためのフェードアニメを設定する関数 function setFader(targetObj,targetAlpha){ targetObj.targetAlpha = targetAlpha; if(targetObj.currentAlpha==undefined){ targetObj.currentAlpha = 100; } if(targetObj.currentAlpha==targetObj.targetAlpha){ return; } if(!targetObj.fading){ if(!targetObj.fader){ targetObj.fader = fader; } targetObj.fading = true; targetObj.fader(); } } // アルファ値をターゲット値に近づける関数 // ターゲット値になったら終了 function fader(){ this.currentAlpha += (this.targetAlpha - this.currentAlpha)*0.5; if(Math.abs(this.currentAlpha-this.targetAlpha)<1){ this.currentAlpha = this.targetAlpha; this.fading = false; } var alpha = parseInt(this.currentAlpha); this.style.opacity = alpha/10; this.style.filter = 'alpha(opacity='+alpha+')'; if(this.fading){ var scope = this; setTimeout(function(){fader.apply(scope)},10); } } // アルファ値を0にする function faderEnd(node){ node.currentAlpha = 0; node.fading = false; node.style.opacity = 0; node.style.filter = 'alpha(opacity=0)'; } })(jQuery);