11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour les gens,

C'est mon premier post et je suis pas doué avec les forums donc il se peut que je n'ai pas trouvé un topic déjà existant pour mon problème ^^"

Alors voilà, je cherche désespérément à mettre en "suspension" (genre cailloux dans l’engrenage, je sais qu'une "pause proprement dite est impossible...) une des fonctions Javascript de mon site lorsque je passe la souris sur les éléments de la liste 'brands'...

Je suis étudiant et je m'y suis mis très récemment... mon prof m'aide beaucoup d'habitude mais là il est pas dispo x) (PS : Il fait beaucoup de pub pour ce site =p)

La fameuse :

function scroll_init() {
	window.setTimeout('scroll()', 50);
}

function scroll() {
	var e = document.getElementById('brands');
	var h = e.children[0].clientHeight;
	var delta = 1;

//	if(--mode <= 0) {
		var t = parseInt(e.style.top);
		if(!t) {t = 0;}
		t -= delta;
		if(Math.abs(t) >= (h + delta - 1)) {
			t = 0;
//			mode = 10;
			scroll_shift(e);
		}
		e.style.top = t + 'px';
//	}

	window.setTimeout('scroll()', 50);
}

function scroll_shift(e) {
	var ee = e;
	var len = ee.children.length -1;
	var temp = e.children[0].innerHTML;
	var tc   = e.children[0].className;

	for (var i = 0;i < len;i++) {
		ee.children[].innerHTML = e.children[i +1].innerHTML;
		ee.children[]'.className = e.children[i +1].className;
	}
	ee.children[len].innerHTML = temp;
	ee.children[len].className = tc;
	e = ee;
}


J'ai essayé de malmener set.Timeout mais sans succès je dois sans doute oublier un truc...

Merci d'avance... ^^"
Modifié par LuCube (07 Jun 2013 - 16:33)
Bonsoir,

tu pourrais utiliser une variable globale qui change de valeur quand la souris survole ta zone brands.

Ensuite au lieu d’appeler la fonction scroll dans tes setTimeout tu appelerais une fonction scrollSiHorsBrands.

Voici un bout de code que je n’ai pas testé :
var booBrandsSurvole = false, scroll, scrollSiHorsBrands, intDelaiScroll = 50;

scrollSiHorsBrands = function () {
	"use strict";
	if (booBrandsSurvole === false) {
		scroll();
	} else {
		window.setTimeout('scrollSiHorsBrands()', intDelaiScroll);
	}
};

function scroll_init() {
	window.setTimeout('scrollSiHorsBrands()', intDelaiScroll);
}

scroll = function () {
	var e = document.getElementById('brands');
	var h = e.children[0].clientHeight;
	var delta = 1;

//	if(--mode <= 0) {
		var t = parseInt(e.style.top);
		if(!t) {t = 0;}
		t -= delta;
		if(Math.abs(t) >= (h + delta - 1)) {
			t = 0;
//			mode = 10;
			scroll_shift(e);
		}
		e.style.top = t + 'px';
//	}

	window.setTimeout('scrollSiHorsBrands()', intDelaiScroll);
};

function scroll_shift(e) {
	var ee = e;
	var len = ee.children.length -1;
	var temp = e.children[0].innerHTML;
	var tc   = e.children[0].className;

	for (var i = 0;i < len;i++) {
		ee.children[].innerHTML = e.children[i +1].innerHTML;
		ee.children[].className = e.children[i +1].className;
	}
	ee.children Smiley len .innerHTML = temp;
	ee.children Smiley len .className = tc;
	e = ee;
}

window.onload =  function () {
	"use strict";
	document.getElementById("brands").onmouseover = function () {
		"use strict";
		booBrandsSurvole = true;
	};
	document.getElementById("brands").onmouseout = function () {
		"use strict";
		booBrandsSurvole = false;
	};
	scroll_init();
};

Modifié par adrien881 (07 Jun 2013 - 18:26)
Merci de répondre si promptement Smiley cligne

J'ai testé avec ton code sans succès... le script ne se lance plus...

J'avais essayé à partir de çà, le code était enrayé avec cette boucle Smiley fache :

	for( var i = 0; i < n; i++ ) {
		//	 'this' est une référence à l'objet [l'image]
		//	 qui va réagir au mouseover ou clique
		e.children[].setAttribute( 'onMouseOver','diaporama_pause(this);' );
		e.children[].setAttribute( 'onMouseOut','diaporama_go(this);' );
	}


function diaporama_pause( e ) {
	e.parentElement.setAttribute( 'data-pause',1 );
}


function diaporama_go( e ) {
	e.parentElement.setAttribute( 'data-pause',0 )
}

Modifié par LuCube (07 Jun 2013 - 18:43)
Bonjour,

si tu nomme ton setTimeout
function scroll_init() {
	window.myscroll = window.setTimeout('scrollSiHorsBrands()', intDelaiScroll);
}


tu pourras faire sur ta liste

	document.getElementById("brands").onmouseover = function () {
		clearTimeout (myscroll)
	};
	document.getElementById("brands").onmouseout = function () {
		scroll_init() 
	};

Modifié par olithom17 (13 Jun 2013 - 09:46)