IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

un "onmouseout" après un "onclick"


Sujet :

JavaScript

  1. #1
    Membre averti
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 63
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Par défaut un "onmouseout" après un "onclick"
    Bonjour à tous !

    J'ai un menu en accordéon qui lorsque l'on clique sur un des titres fait son job. Juste là, pas de souci. Par contre, si je mets ma souris hors de ce champ, le menu ne se referme pas.

    Voici le code (car n'étant pas programmeuse, j'ai du mal); Si je change le "onclick" dans le script ci-dessous, cela ne m'arrange pas. En fait je souhaite garder le onclick pour ouvrir ce menu mais faire un "onmouseout" si ma souris s'en va. J'espère que j'ai été claire, merci de ne pas m'en vouloir.

    D'avance, merci pour votre aide.


    Canaille22



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     var TINY={};
     
    function T$(i){return document.getElementById(i)}
    function T$$(e,p){return p.getElementsByTagName(e)}
     
    TINY.accordion=function(){
    	function slider(n){this.n=n; this.a=[]}
    	slider.prototype.init=function(t,e,m,o,k){
    		var a=T$(t), i=s=0, n=a.childNodes, l=n.length; this.s=k||0; this.m=m||0;
    		for(i;i<l;i++){
    			var v=n[i];
    			if(v.nodeType!=3){
    				this.a[s]={}; this.a[s].h=h=T$$(e,v)[0]; this.a[s].c=c=T$$('div',v)[0]; h.onclick=new Function(this.n+'.pr(0,'+s+')');
    				if(o==s){h.className=this.s; c.style.height='auto'; c.d=1}else{c.style.height=0; c.d=-1} s++
    			}
    		}
    		this.l=s
    	};
    	slider.prototype.pr=function(f,d){
    		for(var i=0;i<this.l;i++){
    			var h=this.a[i].h, c=this.a[i].c, k=c.style.height; k=k=='auto'?1:parseInt(k); clearInterval(c.t);
    			if((k!=1&&c.d==-1)&&(f==1||i==d)){
    				c.style.height=''; c.m=c.offsetHeight; c.style.height=k+'px'; c.d=1; h.className=this.s; su(c,1)
    			}else if(k>0&&(f==-1||this.m||i==d)){
    				c.d=-1; h.className=''; su(c,-1)
    			}
    		}
    	};
    	function su(c){c.t=setInterval(function(){sl(c)},20)};
    	function sl(c){
    		var h=c.offsetHeight, d=c.d==1?c.m-h:h; c.style.height=h+(Math.ceil(d/5)*c.d)+'px';
    		c.style.opacity=h/c.m; c.style.filter='alpha(opacity='+h*100/c.m+')';
    		if((c.d==1&&h>=c.m)||(c.d!=1&&h==1)){if(c.d==1){c.style.height='auto'} clearInterval(c.t)}
    	};
    	return{slider:slider}
    }();

  2. #2
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Ben... c'est du code minifié (sauf indentation préservée, Dieu merci ^^)... tu es associée avec un cabinet d'ophtalmologie ou quoi ?

    Plus sérieusement, ils n'ont pas une version étendue ?

    edit : j'imagine que ça vient d'ici ? Sinon, on peut voir comment tu appelles la fonction accordion (pour les paramètres) ?

  3. #3
    Membre averti
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 63
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Par défaut appel de la fonction
    Bonjour Romain

    Voilà l'appel de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <script type="text/javascript" src="menus/particulier/particulier1etoile.js"></script>
     
    <script type="text/javascript">
     
    var parentAccordion=new TINY.accordion.slider("parentAccordion");
    parentAccordion.init("acc","h3",0,0);
     
    var nestedAccordion=new TINY.accordion.slider("nestedAccordion");
    nestedAccordion.init("nested","h3",1,-1,"acc-selected");
     
    </script>

    S'il te manque quelque chose, dis-le moi.

    Merci beaucoup


    Canaille22

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonsoir,
    Si je change le "onclick" dans le script ci-dessous, cela ne m'arrange pas. En fait je souhaite garder le onclick pour ouvrir ce menu mais faire un "onmouseout" si ma souris s'en va.
    l'ergonomie sera pour le moins déroutante, autant gérer le mouseover et le mouseout et même là j'ai peur que certains cycles se montent dessus.

    Si je change le "onclick" dans le script ci-dessous, cela ne m'arrange pas.
    récupéres la ligne du onclick et mets la même en onmouseout, c'est celle là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    h.onclick=new Function(this.n+'.pr(0,'+s+')');
    mais <edit>pas</edit> convaincu du résultat.

  5. #5
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Tu voulais pas dire
    Citation Envoyé par NoSmoking Voir le message
    mais !convaincu du résultat.
    par hasard ?

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Tu voulais pas dire Citation:
    Envoyé par NoSmoking
    mais !convaincu du résultat.

    par hasard ?
    tout à fait, <edit> fait, merci

  7. #7
    Membre averti
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 63
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Par défaut Pour "NO SMOKING"
    Merci no smoking. En mettant à la suite mon "onmouseout" après le "onclick", ça déconnait un peu aussi je l'ai mis là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    slider.prototype.pr=function(f,d){
    		for(var i=0;i<this.l;i++){
    			var h=this.a[i].h, c=this.a[i].c, k=c.style.height; k=k=='auto'?1:parseInt(k); clearInterval(c.t);
    			if((k!=1&&c.d==-1)&&(f==1||i==d)){
    				c.style.height=''; c.m=c.offsetHeight; c.style.height=k+'px'; c.d=1;h.onmouseout=new Function(this.n+'.pr(0,'+s+')'); h.className=this.s; su(c,1)
    			}else if(k>0&&(f==-1||this.m||i==d)){
    				c.d=-1; h.className=''; su(c,-1)
    			}
    		}
    	};

    Et ça marche du tonnerre parce qu'en fait j'ai 4 titres de menu en accordéon. Pour un, cela aurait été mais avec 4, ça n'allait pas.

    Par contre, je suis peut-être neuneu, mais le <edit> je le mets où ? Parce que je n'ai pas cette fonction dans mes pages.

    Merci en tous les cas pour tout.

    Bises


    Canaille22

  8. #8
    Membre averti
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 63
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Par défaut pour Romain
    Merci Romain pour ton aide.

    Bises


    Canaille22

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Syntaxe erreur apres avoir mis un quote '
    Par AyManoVic dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/07/2010, 16h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo