// 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);