Deplacement de calque
Deplacement de calque
J'ai créé avec Dreamweaver un calque qui se déplace sans contrainte.
Cela marche avec IE, mais pas avec Firefox.
Merci de votre aide
Cela marche avec IE, mais pas avec Firefox.
Merci de votre aide
-
- Iguane
- Messages : 979
- Inscription : 09 juil. 2004, 15:41
Dreamweaver a dû produire du code javascript spécifique à IE, càd non standard, que FF ne comprend pas.
PS : je pense que ce sujet a plus sa place dans le forum «Développement web».
PS : je pense que ce sujet a plus sa place dans le forum «Développement web».
openSUSE 12.2 - FF v24.0 FR - TB v24.0 FR ma config en détails - Décrivez la vôtre ici 
userContent.css : modifiez l'apparence et le contenu des sites visités !

userContent.css : modifiez l'apparence et le contenu des sites visités !
Re: Deplacement de calque
Excuse mon "inculture"...
mais

c'est quoi ?Alain Avignon a écrit :un calque qui se déplace sans contrainte
Si on a répondu à votre question, éditez votre premier message et ajoutez [Resolu] au début du titre, merci !


Re: Deplacement de calque
Alain Avignon a écrit :J'ai créé avec Dreamweaver un calque qui se déplace sans contrainte.
Cela marche avec IE, mais pas avec Firefox.
Merci de votre aide
---------------
J'ai exactement le même problème, ça marche avec Explorer, Netscape, Opéra mais pas avec FF ni Mozilla.
Dans certains cas problème aussi avec les : onMouseOver="showHideLayers... Là je suspecte un lien vers une ancre (#ancre) car dans le cas de liens courants vers un Url ou un mailto, je n'ai pas constaté de disfonctionnement.
J'ai du mal à trouver une réponse dans ce forum. C'est bien ici " Développement web", non?
oui, mais avec le code c'est plus simple car la tes explication sous plutot legere, donne nous un lien avec ton code, ainsi on pouras tester dans ie et netscape pour voir ce qui ne vas pas...
PS : regard la console javascripte cette derniére doit surment indiquer des probléme...
PS : regard la console javascripte cette derniére doit surment indiquer des probléme...
Inscrit sur la liste des abonner absent...
le probleme vient tout simplement du fait que dreamweaver cré un code totalement indigeste avec des teste a la volée sur ns4, ns6, ie ... MAIS PAS SUR FF. pour ceux qui voudrait lire un exemple de code voir ci dessous mais je vous souhaite a tous bon courrage


Code : Tout sélectionner
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans nom</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_dragLayer(objName,x,hL,hT,hW,hH,toFront,dropBack,cU,cD,cL,cR,targL,targT,tol,dropJS,et,dragJS) { //v4.01
//Copyright 1998 Macromedia, Inc. All rights reserved.
var i,j,aLayer,retVal,curDrag=null,curLeft,curTop,IE=document.all,NS4=document.layers;
var NS6=(!IE&&document.getElementById), NS=(NS4||NS6); if (!IE && !NS) return false;
retVal = true; if(IE && event) event.returnValue = true;
if (MM_dragLayer.arguments.length > 1) {
curDrag = MM_findObj(objName); if (!curDrag) return false;
if (!document.allLayers) { document.allLayers = new Array();
with (document) if (NS4) { for (i=0; i<layers.length; i++) allLayers[i]=layers[i];
for (i=0; i<allLayers.length; i++) if (allLayers[i].document && allLayers[i].document.layers)
with (allLayers[i].document) for (j=0; j<layers.length; j++) allLayers[allLayers.length]=layers[j];
} else {
if (NS6) { var spns = getElementsByTagName("span"); var all = getElementsByTagName("div");
for (i=0;i<spns.length;i++) if (spns[i].style&&spns[i].style.position) allLayers[allLayers.length]=spns[i];}
for (i=0;i<all.length;i++) if (all[i].style&&all[i].style.position) allLayers[allLayers.length]=all[i];
} }
curDrag.MM_dragOk=true; curDrag.MM_targL=targL; curDrag.MM_targT=targT;
curDrag.MM_tol=Math.pow(tol,2); curDrag.MM_hLeft=hL; curDrag.MM_hTop=hT;
curDrag.MM_hWidth=hW; curDrag.MM_hHeight=hH; curDrag.MM_toFront=toFront;
curDrag.MM_dropBack=dropBack; curDrag.MM_dropJS=dropJS;
curDrag.MM_everyTime=et; curDrag.MM_dragJS=dragJS;
curDrag.MM_oldZ = (NS4)?curDrag.zIndex:curDrag.style.zIndex;
curLeft= (NS4)?curDrag.left:(NS6)?parseInt(curDrag.style.left):curDrag.style.pixelLeft;
if (String(curLeft)=="NaN") curLeft=0; curDrag.MM_startL = curLeft;
curTop = (NS4)?curDrag.top:(NS6)?parseInt(curDrag.style.top):curDrag.style.pixelTop;
if (String(curTop)=="NaN") curTop=0; curDrag.MM_startT = curTop;
curDrag.MM_bL=(cL<0)?null:curLeft-cL; curDrag.MM_bT=(cU<0)?null:curTop-cU;
curDrag.MM_bR=(cR<0)?null:curLeft+cR; curDrag.MM_bB=(cD<0)?null:curTop+cD;
curDrag.MM_LEFTRIGHT=0; curDrag.MM_UPDOWN=0; curDrag.MM_SNAPPED=false; //use in your JS!
document.onmousedown = MM_dragLayer; document.onmouseup = MM_dragLayer;
if (NS) document.captureEvents(Event.MOUSEDOWN|Event.MOUSEUP);
} else {
var theEvent = ((NS)?objName.type:event.type);
if (theEvent == 'mousedown') {
var mouseX = (NS)?objName.pageX : event.clientX + document.body.scrollLeft;
var mouseY = (NS)?objName.pageY : event.clientY + document.body.scrollTop;
var maxDragZ=null; document.MM_maxZ = 0;
for (i=0; i<document.allLayers.length; i++) { aLayer = document.allLayers[i];
var aLayerZ = (NS4)?aLayer.zIndex:parseInt(aLayer.style.zIndex);
if (aLayerZ > document.MM_maxZ) document.MM_maxZ = aLayerZ;
var isVisible = (((NS4)?aLayer.visibility:aLayer.style.visibility).indexOf('hid') == -1);
if (aLayer.MM_dragOk != null && isVisible) with (aLayer) {
var parentL=0; var parentT=0;
if (NS6) { parentLayer = aLayer.parentNode;
while (parentLayer != null && parentLayer.style.position) {
parentL += parseInt(parentLayer.offsetLeft); parentT += parseInt(parentLayer.offsetTop);
parentLayer = parentLayer.parentNode;
} } else if (IE) { parentLayer = aLayer.parentElement;
while (parentLayer != null && parentLayer.style.position) {
parentL += parentLayer.offsetLeft; parentT += parentLayer.offsetTop;
parentLayer = parentLayer.parentElement; } }
var tmpX=mouseX-(((NS4)?pageX:((NS6)?parseInt(style.left):style.pixelLeft)+parentL)+MM_hLeft);
var tmpY=mouseY-(((NS4)?pageY:((NS6)?parseInt(style.top):style.pixelTop) +parentT)+MM_hTop);
if (String(tmpX)=="NaN") tmpX=0; if (String(tmpY)=="NaN") tmpY=0;
var tmpW = MM_hWidth; if (tmpW <= 0) tmpW += ((NS4)?clip.width :offsetWidth);
var tmpH = MM_hHeight; if (tmpH <= 0) tmpH += ((NS4)?clip.height:offsetHeight);
if ((0 <= tmpX && tmpX < tmpW && 0 <= tmpY && tmpY < tmpH) && (maxDragZ == null
|| maxDragZ <= aLayerZ)) { curDrag = aLayer; maxDragZ = aLayerZ; } } }
if (curDrag) {
document.onmousemove = MM_dragLayer; if (NS4) document.captureEvents(Event.MOUSEMOVE);
curLeft = (NS4)?curDrag.left:(NS6)?parseInt(curDrag.style.left):curDrag.style.pixelLeft;
curTop = (NS4)?curDrag.top:(NS6)?parseInt(curDrag.style.top):curDrag.style.pixelTop;
if (String(curLeft)=="NaN") curLeft=0; if (String(curTop)=="NaN") curTop=0;
MM_oldX = mouseX - curLeft; MM_oldY = mouseY - curTop;
document.MM_curDrag = curDrag; curDrag.MM_SNAPPED=false;
if(curDrag.MM_toFront) {
eval('curDrag.'+((NS4)?'':'style.')+'zIndex=document.MM_maxZ+1');
if (!curDrag.MM_dropBack) document.MM_maxZ++; }
retVal = false; if(!NS4&&!NS6) event.returnValue = false;
} } else if (theEvent == 'mousemove') {
if (document.MM_curDrag) with (document.MM_curDrag) {
var mouseX = (NS)?objName.pageX : event.clientX + document.body.scrollLeft;
var mouseY = (NS)?objName.pageY : event.clientY + document.body.scrollTop;
newLeft = mouseX-MM_oldX; newTop = mouseY-MM_oldY;
if (MM_bL!=null) newLeft = Math.max(newLeft,MM_bL);
if (MM_bR!=null) newLeft = Math.min(newLeft,MM_bR);
if (MM_bT!=null) newTop = Math.max(newTop ,MM_bT);
if (MM_bB!=null) newTop = Math.min(newTop ,MM_bB);
MM_LEFTRIGHT = newLeft-MM_startL; MM_UPDOWN = newTop-MM_startT;
if (NS4) {left = newLeft; top = newTop;}
else if (NS6){style.left = newLeft; style.top = newTop;}
else {style.pixelLeft = newLeft; style.pixelTop = newTop;}
if (MM_dragJS) eval(MM_dragJS);
retVal = false; if(!NS) event.returnValue = false;
} } else if (theEvent == 'mouseup') {
document.onmousemove = null;
if (NS) document.releaseEvents(Event.MOUSEMOVE);
if (NS) document.captureEvents(Event.MOUSEDOWN); //for mac NS
if (document.MM_curDrag) with (document.MM_curDrag) {
if (typeof MM_targL =='number' && typeof MM_targT == 'number' &&
(Math.pow(MM_targL-((NS4)?left:(NS6)?parseInt(style.left):style.pixelLeft),2)+
Math.pow(MM_targT-((NS4)?top:(NS6)?parseInt(style.top):style.pixelTop),2))<=MM_tol) {
if (NS4) {left = MM_targL; top = MM_targT;}
else if (NS6) {style.left = MM_targL; style.top = MM_targT;}
else {style.pixelLeft = MM_targL; style.pixelTop = MM_targT;}
MM_SNAPPED = true; MM_LEFTRIGHT = MM_startL-MM_targL; MM_UPDOWN = MM_startT-MM_targT; }
if (MM_everyTime || MM_SNAPPED) eval(MM_dropJS);
if(MM_dropBack) {if (NS4) zIndex = MM_oldZ; else style.zIndex = MM_oldZ;}
retVal = false; if(!NS) event.returnValue = false; }
document.MM_curDrag = null;
}
if (NS) document.routeEvent(objName);
} return retVal;
}
//-->
</script>
</head>
<body>
<div id="Layer1" style="position:absolute; left:38px; top:49px; width:233px; height:146px; z-index:1" onClick="MM_dragLayer('Layer1','',0,0,0,0,true,false,-1,-1,-1,-1,38,49,50,'',false,'')">calque 1 </div>
</body>
</html>
jv2759 a écrit :oui, mais avec le code c'est plus simple car la tes explication sous plutot legere, donne nous un lien avec ton code, ainsi on pouras tester dans ie et netscape pour voir ce qui ne vas pas...
PS : regard la console javascripte cette derniére doit surment indiquer des probléme...
-----------------------------
Merci d'une réaction aussi rapide
http://www.abacq.net/insecta/ecaille.htm
En passant la souris sur le quatrième papillon à coté de " 4 - 6 cm" on doit faire apparaître un calque invisible. Dans le site il y a beaucoup d'autres cas, certains assez gênants en cas de non fonctionnement. J'ai l'habitude de pointer le lien mort vers une ancre pour empêcher la page de remonter complètement.
Pour le déplacement du calque voir page http://www.abacq.net/insecta/paon.htm le petit Paon animé doit se déplacer vers le haut de la page. Je dois avoir un cas aussi dans autre site.
C'est depuis très peu de temps que j'utilise FF et Mozilla, je dois dire que FF m'épate vraiment. C'est un peu dommage qu'il soit si pointu avec certains JS, mais bon, j'ai un peu l'habitude faisant régulièrement des tests avec Netscape (4.7) et Opéra. Mais il faut absolument que j'arrive à une certaine compatibilité dans les cas cités plus haut.
La console JS m'indique :
Erreur : uncaught exception: [Exception... "'[JavaScript Error: "elem.ownerDocument.defaultView has no properties" {file: "chrome://browser/content/pageInfo.js" line: 477}]' when calling method: [nsIDOMNodeFilter::acceptNode]" nsresult: "0x80570021 (NS_ERROR_XPC_JAVASCRIPT_ERROR_WITH_DETAILS)" location: "JS frame :: chrome://browser/content/pageInfo.js :: doGrab :: line 458" data: yes]
Mmh déjà je ne parle pas anglais
Merci encore
Code : Tout sélectionner
function showHideLayers() { //v3.0
var i,p,v,obj,args=showHideLayers.arguments;
for (i=0; i<(args.length-2); i+=3) if ((obj=findObj(args[i]))!=null) { v=args[i+2];
if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
obj.visibility=v; }

Et dire qu'il y en a qui ont du travailler des heures pour sortir ce code.
Là je m'absente mais si dans quelques heures personne ne t'a donné un équivalent qui fonctionne je le ferai.
A+.
Bon comme il semble que personne ne s'est dévoué.
Code : Tout sélectionner
function showHideLayers(iden, a, action) {
if (action=='show') {document.getElementById(iden).style.visibility='visible';}
else {document.getElementById(iden).style.visibility='hidden';}
}
-
- Lézard vert
- Messages : 194
- Inscription : 13 nov. 2004, 08:54
Perso j'utilise deux scripts différents, un pour le "hidden", un pour le "visible"... Ca évite le test de "action"...SB a écrit :function showHideLayers(iden, a, action) {
if (action=='show') {document.getElementById(iden).style.visibility='visible';}
else {document.getElementById(iden).style.visibility='hidden';}
}
La question que je me pose dans ces cas-là c'est
"quelle est, en terme d'efficacité, la meilleur méthode : une seule fonction un peu plus complète et universelle ou plusieures petites fonctions" ? En d'autres termes, "nombre d'octets ou temps d'exécution" ?
Votre avis ?
Au fait, SB, à quoi sert le paramètre "a" ?
Bienheureux les fêlés car ils laissent passer la lumière...
Un point de plus pour Firefox
la qualité de réponses dans ce forum (Essayez de trouver ailleurs comment désinstaller la dernière barre à la mode chez IE6)
Merci de vos interventions. Bon, je ne suis pas du tout un expert en JS, même si je m'en sers souvent. J'ai pu constater que :
function showHideLayers() { //v3.0
var i,p,v,obj,args=showHideLayers.arguments;
for (i=0; i<(args.length-2); i+=3) if ((obj=findObj(args))!=null) { v=args[i+2];
if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
obj.visibility=v; }
fonctionne chez Firefox + Mozilla dans certains cas. Dans le site http://www.abacq.net/insecta/ cela dépendrait de, disons, la syntaxe de l'appel de la fonction ?
page http://www.abacq.net/insecta/ecaille.htm ligne 148 :
<a href="#01" onMouseOver="showHideLayers('ensemble','','show')" onMouseOut="showHideLayers('ensemble','','hide')"><img src="images/chinee2.jpg" width="171" height="131" border="0"></a>
Ne fonctionne pas Par contre page http://www.abacq.net/insecta/grandpa.htm ligne 246
<a href="epeire.htm" onMouseOut="swapImgRestore();showHideLayers('spider','','hide')" onMouseOver="swapImage('Image17','','etc/tard3.gif',1);showHideLayers('spider','','show')"><img name="Image17" border="0" src="images/tard.gif" width="120" height="30"></a>
ça marche
Je vais essayer d'approfondir cela ce week-end

Merci de vos interventions. Bon, je ne suis pas du tout un expert en JS, même si je m'en sers souvent. J'ai pu constater que :
function showHideLayers() { //v3.0
var i,p,v,obj,args=showHideLayers.arguments;
for (i=0; i<(args.length-2); i+=3) if ((obj=findObj(args))!=null) { v=args[i+2];
if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
obj.visibility=v; }
fonctionne chez Firefox + Mozilla dans certains cas. Dans le site http://www.abacq.net/insecta/ cela dépendrait de, disons, la syntaxe de l'appel de la fonction ?
page http://www.abacq.net/insecta/ecaille.htm ligne 148 :
<a href="#01" onMouseOver="showHideLayers('ensemble','','show')" onMouseOut="showHideLayers('ensemble','','hide')"><img src="images/chinee2.jpg" width="171" height="131" border="0"></a>
Ne fonctionne pas Par contre page http://www.abacq.net/insecta/grandpa.htm ligne 246
<a href="epeire.htm" onMouseOut="swapImgRestore();showHideLayers('spider','','hide')" onMouseOver="swapImage('Image17','','etc/tard3.gif',1);showHideLayers('spider','','show')"><img name="Image17" border="0" src="images/tard.gif" width="120" height="30"></a>
ça marche
Je vais essayer d'approfondir cela ce week-end

Strictement à rien si ce n'est que son code d'appel estMirovinben a écrit :Au fait, SB, à quoi sert le paramètre "a" ?
Code : Tout sélectionner
showHideLayers('ensemble','','show')
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités