11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour!

je fais un "économiseur de page" et je vois pas pourquoi on ne peut pas "sortir de la veille" sur IE6 et IE7, le tout marche bien sur FF.


code CSS

#saver {
position:absolute;
z-index: 1000;
width:100%;
height:100%;
left:0;
top:0;
margin:0;
padding:0;
background:transparent url(./images/silver_transparency.png);
background:url(no-image);
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale src='./images/silver_transparency.png');
}


code js

function screen_saver(e){
	if (e == "activation") {
		clearInterval(delay_before_screensaver);
		var sp = document.createElement('div');
		sp.id = "saver";
		document.getElementsByTagName('body')[0].appendChild(sp);
		document.getElementsByTagName('body')[0].hasScreenSaver = sp;
		return;
	}
	else if (typeof this.delay_before_screensaver != 'undefined') {
		clearInterval(delay_before_screensaver);
		if (document.getElementsByTagName('body')[0].hasScreenSaver) {
			the_div = document.getElementById('saver');
			the_div.parentNode.removeChild(the_div);
			document.getElementsByTagName('body')[0].hasScreenSaver = null;
		}
		this.delay_before_screensaver = setInterval ("screen_saver(\"activation\")", 3000);
	}
	if (typeof this.delay_before_screensaver == 'undefined') {
		this.delay_before_screensaver = setInterval ("screen_saver(\"activation\")", 3000);
	}
}
window.onload = window.onmousemove = screen_saver;

Modifié par ChrisG (09 May 2007 - 12:15)
quelqu'un a essayé sur IE6 ou 7 ? Je suis pas loin du but j'ai besoin d'un coup de pouce d'un spécialiste Smiley sweatdrop
Modifié par ChrisG (09 May 2007 - 09:22)
j'ai vu que onmousemove ne marche pas sur IE7


<body onmousemove="javascript:mousePosition();">


avec

function mousePosition(){
	window.alert("toto");
}


quelqu'un a une idée ?
Modifié par ChrisG (09 May 2007 - 10:02)
merci!
mais j'ai cerné le problème


<body>
<div id="toto">essai</div>
</body>


function mousePosition(e){
	var posx = 0;
	var posy = 0;
	if (e == "alert") {
		clearInterval(delay_before_screensaver);
		document.getElementById('toto').innerHTML = "55555555555555555555555555";
		return;
	}
	else if (typeof this.delay_before_screensaver != 'undefined') {
		clearInterval(delay_before_screensaver);
		this.delay_before_screensaver = setInterval ("mousePosition(\"alert\")", 1000);
	}
	if (!e) var e = window.event;
	if (e.pageX || e.pageY){
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY){
		posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
	document.getElementById('toto').innerHTML = posx + " " + posy;
	if (typeof this.delay_before_screensaver == 'undefined') { this.delay_before_screensaver = setInterval ("mousePosition(\"alert\")", 1000); }
}
window.onload = window.onmousemove = mousePosition;


donc avec

window.onload = window.onmousemove = mousePosition;


ça marche bien sur FF, les coordonnées de la souris sont données et la boucle est bien stoppée quand on bouge la souris. Mais sur IE pas de coordonnées.

par contre avec

window.onload = window.document.onmousemove = mousePosition;


les coordonnées sont affichées sur FF ET IE, mais le clearInterval semble inactif !!
re Smiley smile

ça marche sur IE et FF maintenant. Il fallait mettre this.delay_before_screensaver pour remettre à 0 la variable protégée et window.document.onmousemove à la place de window.onmousemove, ce dernier ne marche que sur FF. J'ai juste un nouveau problème Smiley smile l'économiseur ajoute une nouvelle balise <div id="saver"> : on voit que le gris transparent devient de plus en plus foncé (superposition)


function screen_saver(e){
	if (e == "activation") {
		clearInterval(this.delay_before_screensaver);
		var sp = document.createElement('div');
		sp.id = "saver";
		document.getElementsByTagName('body')[0].appendChild(sp);
		document.getElementsByTagName('body')[0].hasScreenSaver = sp;
		return;
	}
	else if (typeof this.delay_before_screensaver != 'undefined') {
		clearInterval(this.delay_before_screensaver);
		if (document.getElementsByTagName('body')[0].hasScreenSaver) {
			the_div = document.getElementById('saver');
			the_div.parentNode.removeChild(the_div);
			document.getElementsByTagName('body')[0].hasScreenSaver = null;
		}
		this.delay_before_screensaver = setInterval ("screen_saver(\"activation\")", 3000);
	}
	if (typeof this.delay_before_screensaver == 'undefined') {
		this.delay_before_screensaver = setInterval ("screen_saver(\"activation\")", 3000);
	}
}
window.onload = window.document.onmousemove = screen_saver;


CSS pour FF

#saver {
position:absolute;
z-index: 1000;
width:100%;
height:100%;
left:0;
top:0;
margin:0;
padding:0;
background:transparent url(./images/silver_transparency.png);
}
l'économiseur de page fonctionne, et est un peu optimisé. Le code pour ceux que ça interesse :


function screen_saver(e){
	if (e == "activation") {
		clearInterval(delay_before_screensaver);
			var sp = document.createElement('div');
			sp.id = "saver";
			document.getElementsByTagName('body')[0].appendChild(sp);
			document.getElementsByTagName('body')[0].hasScreenSaver = sp;
	}
	else if (typeof delay_before_screensaver == 'undefined') {
		delay_before_screensaver = setInterval ("screen_saver(\"activation\")", 2000);
	}
	else {
		clearInterval(delay_before_screensaver);
		if (document.getElementsByTagName('body')[0].hasScreenSaver) {
			the_div = document.getElementById('saver');
			the_div.parentNode.removeChild(the_div);
			document.getElementsByTagName('body')[0].hasScreenSaver = null;
		}
		delay_before_screensaver = setInterval ("screen_saver(\"activation\")", 2000);
	}
}
window.onload = window.document.onmousemove = screen_saver;



pour le CSS il faut lire au dessus

je suis ouvert aux propositions, critiques positives et negatives