begin process at 2012 05 29 12:26:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

JavaScript et le navigateur

 > 

Autre

 > 

un javascript en cache un autre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

un javascript en cache un autre

jeudi 7 décembre 2006 à 10:42:07 | un javascript en cache un autre

cousinlol

Bonjour,

Assez nul en javascript, j'apprécie beaucoup les script que je trouves et que j'adapte ensuite à mon environnement. Cela me permet aussi petit à petit de comprendre comment cela fonctionne et je me surprends parfois à faire des choses qui fonctionnent.

Mais là je coince totalement.

J'ai 2 scripts pour l'affichage de popup que j'utilise  pour des contextes différents.

Le 1er fonctionne très bien, le 2ème aussi. Mais les 2 en même temps cela ne fonctionnent pas. Dès que je mets le 2ème en fonction le 1er est comme désactivé.

Voici le 1er :

<code>gk=window.Event?1:0; // navigateurs Gecko ou IE
D=document;popup=encours=0

function ctrl(e)
{
de=!D.documentElement.clientWidth?D.body:D.documentElement // IE6
sx=gk?pageXOffset:de.scrollLeft //scroll h
sy=gk?pageYOffset:de.scrollTop //scroll v
x=gk?e.pageX:event.clientX+sx; //curseur x
y=gk?e.pageY:event.clientY+sy; //curseur y
el=gk?e.target:event.srcElement;
if(!el.tagName)el=el.parentNode; // noeud #text
if(el.className == 'pop')
  {
  popup = D.getElementById(el.href.substring(el.href.lastIndexOf('#') + 1)).style;
  if(popup!=encours) // seulement si changement 
    {
    encours.display='none';
    with(popup){display="block";left=x+'px';top=y+10+'px';}
    encours=popup;
    }
  } else {encours.display='none';encours=0}
}

D.onmousemove=ctrl</code>

Le 2ème

<code>var IB=new Object;
var posX=0;posY=0;
var xOffset=10;yOffset=10;
function AffBulle(texte) {
  contenu="<TABLE border=0 cellspacing=0 cellpadding="+IB.NbPixel+"><TR bgcolor='"+IB.ColContour+"'><TD><TABLE border=0 cellpadding=2 cellspacing=0 bgcolor='"+IB.ColFond+"'><TR><TD><FONT size='-1' face='arial' color='"+IB.ColTexte+"'>"+texte+"</FONT></TD></TR></TABLE></TD></TR></TABLE>&nbsp;";
  var finalPosX=posX-xOffset;
  if (finalPosX<0) finalPosX=0;
  if (document.layers) {
    document.layers["bulle"].document.write(contenu);
    document.layers["bulle"].document.close();
    document.layers["bulle"].top=posY+yOffset;
    document.layers["bulle"].left=finalPosX;
    document.layers["bulle"].visibility="show";}
  if (document.all) {
    //var f=window.event;
    //doc=document.body.scrollTop;
    bulle.innerHTML=contenu;
    document.all["bulle"].style.top=posY+yOffset;
    document.all["bulle"].style.left=finalPosX;//f.x-xOffset;
    document.all["bulle"].style.visibility="visible";
  }
  // - NS6 : celui-ci ne supporte plus document.layers mais document.getElementById
  else if (document.getElementById) {
    document.getElementById("bulle").innerHTML=contenu;
    document.getElementById("bulle").style.top=posY+yOffset;
    document.getElementById("bulle").style.left=finalPosX;
    document.getElementById("bulle").style.visibility="visible";
  }
}
function getMousePos(e) {
  if (document.all) {
  posX=event.x+document.body.scrollLeft; // - IE : regrouper l'?v?nement
  posY=event.y+document.body.scrollTop;
  }
  else {
  posX=e.pageX; // NS6 : celui-ci ne supporte pas e.x et e.y
  posY=e.pageY;
  }
}
function HideBulle() {
    if (document.layers) {document.layers["bulle"].visibility="hide";}
    if (document.all) {document.all["bulle"].style.visibility="hidden";}
    else if (document.getElementById){document.getElementById("bulle").style.visibility="hidden";}
}

function InitBulle(ColTexte,ColFond,ColContour,NbPixel) {
    IB.ColTexte=ColTexte;IB.ColFond=ColFond;IB.ColContour=ColContour;IB.NbPixel=NbPixel;
    if (document.layers) {
        window.captureEvents(Event.MOUSEMOVE);window.onMouseMove=getMousePos;
        document.write("<LAYER name='bulle' top=0 left=0 visibility='hide'></LAYER>");
    }
    if (document.all) {
        document.write("<DIV id='bulle' style='position:absolute;top:0;left:0;visibility:hidden'></DIV>");
        document.onmousemove=getMousePos;
    }
    // - NS6 : celui-ci ne supporte plus document.layers mais document.getElementById
    else if (document.getElementById) {
            document.onmousemove=getMousePos;
            document.write("<DIV id='bulle' style='position:absolute;top:0;left:0;visibility:hidden'></DIV>");
    }

}</code>

J'ai pensé à un conflit de nom de zones, mais je ne vois pas.

Merci d'avance
jeudi 7 décembre 2006 à 11:10:20 | Re : un javascript en cache un autre

bultez

Membre Club




Bonjour,

>>Le 1er fonctionne très bien, le 2ème aussi. Mais les 2 en même temps cela ne fonctionne pas.

    et tu nous donnes les 2 script....
    et non pas comment ils sont "mis en même temps"


                                            Cordialement             Bul         [mon Site]     [M'écrire]
jeudi 7 décembre 2006 à 11:24:58 | Re : un javascript en cache un autre

Zobibol

Membre Club
Salutation,
le problème est du probablement au fait que tu gères deux fois l'evenement onmousemove avec deux méthode différentes:
    - dans le premier script: D.onmousemove=ctrl ( avec D = document )
    - dans le deuxième :document.onmousemove=getMousePos;
du coup, comment déterminer la popup à afficher ?


[o-_-o]
jeudi 7 décembre 2006 à 11:29:47 | Re : un javascript en cache un autre

cousinlol

Pardon, j'ai oublié mon header :

<code><head>
        <title>{#pageTitle#|default:"No title"}</title>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <!-- Déconnexion au bout de 10mn -->
        <meta http-equiv="Refresh" content="3001;url={#prefixe_site#}logout.php">
        <!-- Fin déconnexion au bout de 10mn --><!-- Gestionnaire de menu -->
        <script language="javascript" src="{#prefixe_site#}JS/menu.js"></script>
        <!-- pop information -->
        <script type="text/javascript" src="{#prefixe_site#}JS/bullInfo.js"></script>
        <!-- pop information -->
        <script type="text/javascript" src="{#prefixe_site#}JS/bullTexte.js"></script>
        <!-- les feuilles de style -->
        <link href="{#prefixe_site#}css/style.css" type="text/css" rel="StyleSheet">
    </head></code>

La popup du 1er script :

<code><div><a href="#pop1" class="pop" style="text-align: left; color: rgb(255, 255, 255); font-weight: bold;"> - Gestion du dossier de Monsieur Edouard ABADOU</a></div>
<div id="pop1">
<h1>Information</h1>
<div id="popcontenu">
<p>Situation familliale : <b>Célibataire</b></p>
<p>Prénom d'usage : <b>Ed</b></p>
<p>Né le : <b>04/10/1982</b></p>
<p>à : <b>Saint Etienne</b><b>(42000)</b></p>
<p>Pays : <b>France</b></p>
<p>Nationalité : <b>Française</b></p>
<p>Téléphone : <b>04 78 33 01 01</b></p>
<p>Mobile (GSM) : <b>06 11 40 01 01</b></p>
<p>Adresse email : <b>e.abadou@yahoo.fr</b></p>
</div>
</div>
</code>

Pour la 2ème :

<code><a href="#" onmouseover="AffBulle('Donne l\'accès au menu <b>Gestion</b>, pour tout ce qui touche au sociale pour un dossier.')" onmouseout="HideBulle()">Gestion :</a></code>

Voilà ce sera plus clair

jeudi 7 décembre 2006 à 13:54:58 | Re : un javascript en cache un autre

cousinlol

Merci Zobibol, tu semblerais avoir raison, mais que puis-je faire pour contourner ce problème ?
jeudi 7 décembre 2006 à 14:22:31 | Re : un javascript en cache un autre

roro06



Bonjour

Zobibol a raison : 2 fois document.onmousemove : le deuxième "écrase" le premier.
Pour contourner le problème :
(navigator.appName.substring(0,3) == "Mic")    ? window.document.attachEvent("onmousemove", lafonction) : window.addEventListener("mousemove", lafonction, false);


Cordialement
Roro webDev
jeudi 7 décembre 2006 à 14:44:05 | Re : un javascript en cache un autre

cousinlol

Merci Roro webDev de me présenter une solution qui me permette de contourner le problème. Si je prends le 1er script, je remplace : D.onmousemove=ctrl Par (navigator.appName.substring(0,3) == "Mic") ? window.document.attachEvent("onmousemove", ctrl) : window.addEventListener("mousemove", ctrl, false); Et dans le 2ème je remplace document.onmousemove=getMousePos; Par (navigator.appName.substring(0,3) == "Mic") ? window.document.attachEvent("onmousemove", getMousePos) : window.addEventListener("mousemove", getMousePos, false); Pardon, mais je suis très nul. Mon navigateur est firefox
jeudi 7 décembre 2006 à 14:45:39 | Re : un javascript en cache un autre

Zobibol

Membre Club
y a plusieurs méthodes pour arriver à contourner le problème mais en fait, y a un truc assez "débile" c'est que dans la deuxième popup, la méthode getMousePos ne te serts qu'à récuperer les coordonnées de la souris ( dans des variables globales en plus... )
Donc, ce que tu peux faire c'est : dans la méthode AffBulle tu ajoutes un paramètre "e" par  exemple.
au tout début de la méthode tu copies le traitement de getMousePos ie:
/**
* Affiche une infobulle
* @param texte texte à afficher
* @param e evenement pour la compatibilité
*/
function AffBulle(texte,e) {
 if (document.all) {
  posX=event.x+document.body.scrollLeft; // - IE : regrouper l'?v?nement
  posY=event.y+document.body.scrollTop;
  }
  else {
  posX=e.pageX; // NS6 : celui-ci ne supporte pas e.x et e.y
  posY=e.pageY;
   }
....(suite de la méthode AffBulle)

tu supprimes toutes référence à onMouseMove dans InitBulle tu obtients ça :
function InitBulle(ColTexte,ColFond,ColContour,NbPixel) {
    IB.ColTexte=ColTexte;IB.ColFond=ColFond;IB.ColContour=ColContour;IB.NbPixel=NbPixel;
    if (document.layers) {
        document.write("<LAYER name='bulle' top=0 left=0 visibility='hide'></LAYER>");
    }
    if (document.all) {
        document.write("<DIV id='bulle' style='position:absolute;top:0;left:0;visibility:hidden'></DIV>");
    }
    // - NS6 : celui-ci ne supporte plus document.layers mais document.getElementById
    else if (document.getElementById) {
            document.write("<DIV id='bulle' style='position:absolute;top:0;left:0;visibility:hidden'></DIV>");
    }
}

ensuite lors de l'appel à Affbulle tu rajoutes event
et tu obtiens ( pour l'exemple transmis ) :
<a href="#" onmouseover="AffBulle('Donne l\'accès au menu <b>Gestion</b>, pour tout ce qui touche au sociale pour un dossier.', event)" onmouseout="HideBulle()">Gestion :</a>


déjà la ça devrait marcher.
(pas testé)

ensuite si tu veux faire encore plus propre dans ta ligne :
 <a href="#pop1" class="pop" style="text-align: left; color: rgb(255, 255, 255); font-weight: bold;"> - Gestion du dossier de Monsieur Edouard ABADOU</a>
tu rajoutes le fameux : onMouseOver = "ctrl(event)"
<a href="#pop1" class="pop" onMouseOver = "ctrl(event)"
et tu supprimes D.onmousemove=ctr ( parce que ça sert à rien de tester à chaque mouvement de souris....)
La non plus PAS TESTE

tiens moi au courant.
[o-_-o]
jeudi 7 décembre 2006 à 14:57:00 | Re : un javascript en cache un autre

roro06



Bonjour

cousinlol --> oui, c'est çà

PS : pour surfer, mon sniffer est aussi FF. Mais pour développer, j'utilise FF, IE, Opera, K-meleon, Mozilla, ET Netscape. Rien que çà ! On peut être surpris des disparités qu'il peut y avoir ! ( Le tout sous windows, j'ai pas 36 machines non plus, hein ?)

PS 2 : Inspires-toi des commentaires de Zobibol, ça a l'air constructif (mais j'ai pas testé)
Cordialement
Roro webDev
jeudi 7 décembre 2006 à 15:25:26 | Re : un javascript en cache un autre

cousinlol

Merci beaucoup à tous, et principalement à Zobibol. C'est cette solution que j'ai retenu. Je suis allez jusqu'au "plus propre" et cela fonctionne très bien. Merci encore.

1 2

Cette discussion est classée dans : style, document, bulle, getelementbyid, layers


Répondre à ce message

Sujets en rapport avec ce message

Enorme Probleme avec document.body.scrollTop [ par polo_777 ] voila je souhaiterai faire une info bulle, pour ce faire j'ai trouver des tas des scripts deja tout fait qui fonctionnes tres bien sauf que "tous" on Pb avec un script info bulle [ par ard123 ] Bonjour, J'ai mis en place un script infos bulle (téléchargé sur http://www.toutjavascript.com/main/index.php3), ca marche nickel (texte ou image). Je Info-bulle avec usermap [ par f1hgu ] Bonjour,Dans le but de développer mon site, j'étais à la recherche d'un script faisant une info bulle avec un usermap et des areas shape. Ne trouvant, probléme d'affichage [ par youzou ] Salut j'ai un 2 tableau  et 2 bouton radio si je coche sur l'un des bouton les 2 tableau seront invisible et inversement si je selectionne l'autre bou Problème avec le DOM [ par nicomilville ] Salut,Voila j'ai un problème de fonction, normalement, je charge ma fonction une fois que le DOM est construit avec attachEvent sous ie et addEventLis soit cforcer la hauteur d'un div à 1 sous ie ou je c pas! [ par Jbs106 ] bonjour et merci de votre aide!simple sous firefox, ça s'affiche "à peu près" comme je le souhaite, parcontre sous ie, au lieu d'avoir des div de 1 de Erreur c00ce56e [ par ov3rdoze ] Bonjour à tousJe viens de terminer un site dans lequel j'utilise XMLHttpRequest. En local pas de problème. Je viens d'envoyer le site sur le serveur e Problème de XmlHttpRequest sous Opera et FF [ par ov3rdoze ] Bonjour à tous.Je travaille actuellement sur un site dans lequel j'utilise XmlHttpRequest. Je viens de mettre celui-ci en ligne, et je m'aperçoit que Besoin d'aide pour texte en accordéon [ par devoluti0n ] Bonjour !Je vous éxpose mon petit probleme :J'éssaye de mettre en place une FAQ dont toutes les questions seront listés, et par clic sur ces questions Internet Explorer et object [ par bond_never_die ] Bonjour à tous. Voilà, j'ai un petit script qui permet d'afficher dynamiquement une zone d'affichage au dessus de ma page. Problème : sous Internet Ex


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,560 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales