MENU CONTEXTUEL CLICK DROIT AMELIORE

cs_Nocturne Messages postés 115 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 15 novembre 2007 - 30 oct. 2003 à 20:02
cs_foxmaster Messages postés 38 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 23 septembre 2013 - 17 oct. 2007 à 10:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/17534-menu-contextuel-click-droit-ameliore

cs_foxmaster Messages postés 38 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 23 septembre 2013
17 oct. 2007 à 10:40
Aprés quelques recherches j'ai trouvé le moyen de rendre ce menu compatible firefox voici les modif que j'ai apportées:

<html><head>
<style>
#menuC {
color:#0080ff;
background-color:#000000;
position:absolute;
left:-395px;
top:-395px;
width:12em;
border: 5px outset green;
line-height:0.9em;
cursor:default;
}
#menuC a {
color:#0080ff;
font-size:15px;
font-family:Times New Roman,Arial;
font-weight:bold;
padding-left:15px;
padding-right:15px;
cursor:hand;
}
#menuC a:hover {
color:#ffffff;
font-size:15px;
font-family:Times New Roman,Arial;
font-weight:bold;
padding-left:15px;
padding-right:15px;
cursor:hand;
}
</style>
<script language="JavaScript">
// Le sommaire : Début
var menuC;
var menuCStyle;
var ie=0;
function showmenuC(e){ // Place le sommaire et l'affiche à l'écran
if (ie==1)
{
var cX (navigator.appName.substring(0,3) "Net") ? e.pageX : event.clientX;
var cY (navigator.appName.substring(0,3) "Net") ? e.pageY : event.clientY;
var rightedge= document.body.clientWidth-cX;
var bottomedge= document.body.clientHeight-cY;
if (rightedge>menuC.offsetWidth) {menuCStyle.left=document.body.scrollLeft+cX;}
else {menuCStyle.left=document.body.scrollLeft+cX-menuC.offsetWidth;}
if (document.body.scrollLeft>document.body.scrollLeft+cX-menuC.offsetWidth && rightedge<menuC.offsetWidth)
{menuCStyle.left=document.body.scrollLeft;}
if (bottomedge>menuC.offsetHeight) {menuCStyle.top=document.body.scrollTop+cY;}
else {menuCStyle.top=document.body.scrollTop+cY-menuC.offsetHeight;}
if (document.body.scrollTop>document.body.scrollTop+cY-menuC.offsetHeight && bottomedge<menuC.offsetHeight)
{menuCStyle.top=document.body.scrollTop;}
menuCStyle.visibility="visible";
return false;
}
else
{
if (e.button==2||e.button==3)
{
var cX (navigator.appName.substring(0,3) "Net") ? e.pageX : event.clientX;
var cY (navigator.appName.substring(0,3) "Net") ? e.pageY : event.clientY;
var rightedge= document.body.clientWidth-cX;
var bottomedge= document.body.clientHeight-cY;
if (rightedge>menuC.offsetWidth) {menuCStyle.left=document.body.scrollLeft+cX;}
else {menuCStyle.left=document.body.scrollLeft+cX-menuC.offsetWidth;}
if (document.body.scrollLeft>document.body.scrollLeft+cX-menuC.offsetWidth && rightedge<menuC.offsetWidth)
{menuCStyle.left=document.body.scrollLeft;}
if (bottomedge>menuC.offsetHeight) {menuCStyle.top=document.body.scrollTop+cY;}
else {menuCStyle.top=document.body.scrollTop+cY-menuC.offsetHeight;}
if (document.body.scrollTop>document.body.scrollTop+cY-menuC.offsetHeight && bottomedge<menuC.offsetHeight)
{menuCStyle.top=document.body.scrollTop;}
menuCStyle.visibility="visible";
return false;
}
else
{
hidemenuC();
}
}
}
function hidemenuC(){menuCStyle.visibility="hidden";} // Cache le sommaire.
if (navigator.appName.substring(0,3) == "Net") document.captureEvents(Event.MOUSEMOVE);

// Le sommaire : Fin
</script>
</head>



[liens1.html Liens 1]

[liens2.html Liens 2]
<hr size="1" noshade />
[liens3.html Liens 3]


<script language="JavaScript">

if (document.all) // for IE
{
ie=1;
document.oncontextmenu=showmenuC;
document.onclick=hidemenuC;

}
else // for FF
{
document.onclick=showmenuC;
}
menuC=document.getElementById("menuC");
menuCStyle=document.getElementById("menuC").style;
</script>
</html>

je n'ai pas réussi a simplifier d'avantage... mais de cette façon cela fonctionne sous IE et firefox!(testé avec les versions 1.5.0.12 et 2.0.0.7)
cs_foxmaster Messages postés 38 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 23 septembre 2013
17 oct. 2007 à 09:09
Bonjour,
je viens de tester cette source qui est vraiment sympa sauf que ... ça marche pas bien sous firefox :-( le click droit fait également afficher le menu contextuel de firefox... quelqu'un saurait t'il comment éviter cela ?
Merci d'avance.
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
12 sept. 2007 à 16:38
Tout d'abord, je tiens à feliciter FlashFun pour ce script qui me permet d'éviter de longues heures d'agonie.
Ensuite, le script modifié permettant de faire apparaître le menu contextuel sur l'elt. de son choix fonctionne presque parfaitement.
En effet, j'ai voulu le tester avec une image et en cliquant sur celle-ci le menu est apparu mais sous l'image!!
En essayant de jouer avec les Zindex, je n'ai pas réussi à le faire apparaitre dessus.
De plus, débutant en javascript, j'ai lu que la fonction "oncontextmenu" était spécifique à IE et que les autres navigateurs ne le comprenaient pas => question : la modif' avec le 'oncontextmenu="showmenuC();return false;"' inséré dans l'elt. fonctionnera t-elle avec les autres navigateurs??

Bref si qq'un pouvait m'éclairer, j'en serai très reconnaissant.
Merci d'avance et pardonnez moi mes faiblesses, je débute..
Bob33000 Messages postés 1 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 25 juillet 2006
25 juil. 2006 à 00:25
Le script marche cependant si on change l'entête <html> par ceci
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
le script ne fonctionne plus, il est à remarquer que ce bug ce reproduit sur beaucoup des scripts proposés sur ce site.

Quel peux en être l'origine et comment corriger cela ?
aslihan Messages postés 3 Date d'inscription mercredi 28 décembre 2005 Statut Membre Dernière intervention 30 décembre 2005
30 déc. 2005 à 15:50
çà marche.
Merci beaucoup!!
flashfun Messages postés 296 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 11 septembre 2004
30 déc. 2005 à 13:52
essaye :

'oncontextmenu="showmenuC();return false;"'
aslihan Messages postés 3 Date d'inscription mercredi 28 décembre 2005 Statut Membre Dernière intervention 30 décembre 2005
29 déc. 2005 à 15:28
En faisant cela, j'ai 2 menus quand je clique droit : celui par défaut (IE) et le nouveau (Lien1, Lien2)...
Serais-tu comment ne pas avoir le menu IE ?

Merci par avance
flashfun Messages postés 296 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 11 septembre 2004
28 déc. 2005 à 17:56
Il faut supprimer :
document.oncontextmenu=showmenuC;

et il faut insérer le 'oncontextmenu="showmenuC();"' ds l'élément
aslihan Messages postés 3 Date d'inscription mercredi 28 décembre 2005 Statut Membre Dernière intervention 30 décembre 2005
28 déc. 2005 à 14:45
Je souhaiterai faire apparaître ce menu contextuel seulement sur un click droit sur un élément de ma page : pas suite à un click droit sur n'importe quelle partie de ma page.
Est-ce possible?
cs_Nocturne Messages postés 115 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 15 novembre 2007
22 août 2004 à 10:42
Bon travail, ca marche sous netscape 7.0
a+ et bonne prog.
flashfun Messages postés 296 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 11 septembre 2004
20 août 2004 à 23:55
Ca y est je l'ai modifié, mon menu est compatible avec tous les navigateurs.

En plus je l'ai simplifié, pour que l'on puisse insérer ce que l'on veux et comme on le veux dans le menu.

On peut se servir de mon menu comme d'un anti-click droit en insérant une image ou un text à la place des liens.

Merci de me confirmé son bon fonctionnement.
cs_Nocturne Messages postés 115 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 15 novembre 2007
31 oct. 2003 à 00:38
Affirmatif, j ai déjà commencé la modif pour Netscape.
Merci.
flashfun Messages postés 296 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 11 septembre 2004
30 oct. 2003 à 20:23
Dsl, je ne me suis jamais mis à netscape pour l'instant, car je ne l'ai jamais installé.

Tu peut trouver d'autre programme de ce type adapté à netscape,
ensuite il doit être facile d'adapté la partie que j'ai madifié.
cs_Nocturne Messages postés 115 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 15 novembre 2007
30 oct. 2003 à 20:02
Elle est tres bien cette source, le seul reproche que je peu faire, c'est qu'elle n'est pas compatible avec Netscape.
Bonne continuation flashfun.
a+, Nocturne
Rejoignez-nous