/** * Infos sur les variables * * mrqContWidth : Largeur du conteneur * mrqContHeight : Hauteur du conteneur * mrqContTop : Position y du conteneur * mrqContLeft : Position x du conteneur * mrqLoop : TRUE si le scroll boucle * mrqDecall : Nb de pixels de décalage * mrqSpeed : Fréquence entière en ms entre chaque décalage de mrqDecall pixels * mrqScrollVert : TRUE si scroll vertical, FALSE si horizontal * mrqScrollSens : -1 de droite à gauche ou de bas en haut, 1 de gauche à droite ou de haut en bas (selon la valeur de mrqScrollVert). * mrqString : Le texte du scroll (HTML possible, faire attention aux caractères " et ') * mrqNavErr : Message d'erreur si le navigateur n'est pas supporté. */ // Variables globales var mrqLeft = 0; var mrqTop = 0; var mrqStringWidth = 0; var mrqStringHeight = 0; var mrqTimerID; // Détection du type de navigateur. var ie4 = document.all && !document.getElementById; var dom2 = document.getElementById; // Démarrage, re-démarrage et arrêt du scroll. function mrqScroll(type) { // Démarrage if (type == 'start') { if (mrqScrollSens == -1) { mrqScrollVert ? mrqScrollIt(mrqContHeight) : mrqScrollIt(mrqContWidth); } else { mrqScrollVert ? mrqScrollIt(-mrqStringHeight) : mrqScrollIt(-mrqStringWidth); } } // Re-Démarrage else if (type == 'continue') { mrqScrollVert ? mrqScrollIt(mrqTop) : mrqScrollIt(mrqLeft); } // Arrêt else if (type == 'stop') { if (mrqTimerID != null) clearTimeout(mrqTimerID); } } // Initialisation function mrqInit() { if (dom2 || ie4) { // Taille du calque qui contient le texte, var objText = dom2 ? document.getElementById('mrqDivText'):document.all['mrqDivText']; mrqStringWidth = objText.offsetWidth; mrqStringHeight = objText.offsetHeight; objText.style.width = mrqStringWidth + 'px'; objText.style.height = mrqStringHeight + 'px'; objText.style.top = mrqTop + 'px'; objText.style.left = mrqLeft + 'px'; var objCont = dom2 ? document.getElementById('mrqDivCont'):document.all['mrqDivCont']; objCont.style.width = mrqContWidth + 'px'; objCont.style.height = mrqContHeight + 'px'; objCont.style.left = mrqContLeft + 'px'; objCont.style.top = mrqContTop + 'px'; objCont.style.clip = 'rect (0,' + objCont.style.width + ', ' + objCont.style.height + ', 0)'; objCont.style.visibility = 'visible'; } else // Non supporté { if (mrqNavErr != '') { document.open(); document.write(mrqNavErr); document.close(); } return; } // Centrage du calque texte dans le conteneur. mrqTop = (mrqContHeight-mrqStringHeight) / 2; mrqLeft = (mrqContWidth-mrqStringWidth) / 2; mrqScroll('start'); } // Cette fonction est chargée de faire défiler le calque function mrqScrollIt(intTopLeft) { if (mrqScrollVert) { mrqTop = intTopLeft + (mrqScrollSens * mrqDecal); } else { mrqLeft = intTopLeft + (mrqScrollSens * mrqDecal); } var objText = dom2 ? document.getElementById('mrqDivText') : document.all['mrqDivText']; objText.style.top = mrqTop + "px"; objText.style.left = mrqLeft + "px"; // Test pour revenir au début if (mrqLoop) { if (mrqScrollVert) { if (mrqTop <= -mrqStringHeight && mrqScrollSens == -1) { mrqTop = mrqContHeight; } else if (mrqTop >= mrqContHeight && mrqScrollSens != -1) { mrqTop = -mrqStringHeight; } } else { if (mrqLeft <= -mrqStringWidth && mrqScrollSens == -1) { mrqLeft = mrqContWidth; } else if (mrqLeft >= mrqContWidth && mrqScrollSens != -1) { mrqLeft = -mrqStringWidth; } } } // Timer si on est pas en bout de course if (mrqScrollVert) { if ((mrqTop > -mrqStringHeight) || (mrqTop < mrqContHeight)) mrqTimerID = setTimeout("mrqScrollIt(" + mrqTop + ")", mrqSpeed); } else { if ((mrqLeft > -mrqStringWidth) || (mrqLeft < mrqContWidth)) mrqTimerID = setTimeout("mrqScrollIt(" + mrqLeft + ")", mrqSpeed); } } function ScrollLaunch(mrqDivContVar, mrqDivTextVar) { document.open(); document.write(''); document.close(); /* onLoad de la fonction mrqInit() * * On utilise de préférence l'eventListener pour éviter le bug de NS6, NS6.01 qui "ignore" la * ligne window.onLoad = fonction(). */ if (window.addEventListener) { window.addEventListener('load', mrqInit, false); } else { window.onLoad = mrqInit(); } }