1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
   | // Options (objet) :
//		elt		Requis		Elément HTML		Elément sur lequel s'applique le script
//		min		Optionnel	nombre ou chaine	Valeur de l'opacité sans survol								Défaut : 25
//		max		Optionnel	nombre ou chaine	Valeur de l'opacité au survol								Défaut : 100
//		speed	Optionnel	nombre ou chaine	Intervalle (ms) entre chaque changement						Défaut : 25
//		step	Optionnel	nombre ou chaine	Variation de la valeur d'opacité à chaque changement		Défaut : 5
//		evtOn	Optionnel	chaine				Evenement déclenchant le fading								Défaut : 'mouseover'
//		evtOff	Optionnel	chaine				Evenement déclenchant le fading inverse						Défaut : 'mouseout'
//		eltOn	Optionnel	Elément HTML				Elément déclenchant le fading						Défaut : options.elt
//
//	Exemple d'utilisation : new Fading({'elt': document.images[0], 'min': 50, 'max': '100', speed: 25, step: 5});
 
var Fading = function(options){
	this.elt = options.elt;
	this.min = options.min >= 0 ? +options.min : 25;
	this.max = options.max >= 0 ? +options.max : 100;
	this.courant = options.min >= 0 ? +options.min : 25;
	this.speed = +options.speed || 50;
	this.step = +options.step || 5;
	this.timer = null;
	this.evtOn = options.evtOn || 'mouseover';
	this.evtOn = this.evtOn.replace(/^on/, '');
	this.evtOff = options.evtOff || 'mouseout';
	this.evtOff = this.evtOff.replace(/^on/, '');
	this.eltOn = options.eltOn || options.elt;
	var that = this;
	if(this.elt.filters){
		this.elt.style.width = this.elt.style.width || this.elt.offsetWidth+'px';
		this.elt.style.filter = 'alpha(opacity='+this.min+')';
		this.elt.filters[0].opacity = this.min;
		this.propOp = this.elt.filters[0];
		this.coeff = 1;
	}
	else{
		this.elt.style.opacity = this.min / 100;
		this.propOp = this.elt.style;
		this.coeff = 100;
	}
	this.on = function(){
		clearTimeout(that.timer);
		that.removeEvent(that.eltOn, that.evtOn, that.on);
		that.addEvent(that.eltOn, that.evtOff, that.off);
		that.changeOp(that.courant, that.max);
	}
	this.off = function(){
		clearTimeout(that.timer);
		that.removeEvent(that.eltOn, that.evtOff, that.off);
		that.addEvent(that.eltOn, that.evtOn, that.on);
		that.changeOp(that.courant, that.min);
	}
	this.addEvent(this.eltOn, this.evtOn, this.on);
}
Fading.prototype.changeOp = function(from, to){
	var that = this;
	if(from == to){
		this.propOp.opacity = to / this.coeff;
		return false;
	}
	this.propOp.opacity = this.courant / this.coeff;
	var pas = from < to ? 1 : -1;
	this.courant = Math.abs(from - to) < this.step ? to : from + (this.step * pas);
	this.timer = setTimeout(function(){that.changeOp(that.courant, to)}, this.speed);
}
Fading.prototype.addEvent = function(element, type, callback){
	if (element.attachEvent) {
        element.attachEvent("on" + type, callback);
    }
    else {
        element.addEventListener(type, callback, false);
    }
};
Fading.prototype.removeEvent = function(elt, type, callback){
    if (elt.detachEvent) {
		elt.detachEvent("on" + type, callback);
    }
    else {
        elt.removeEventListener(type, callback, false);
    }
}; | 
Partager