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 :

Imbrication d'événements


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Imbrication d'événements
    Bonjour à tous et à toute,

    J'ai récemment trouver un code javascript qui permet d'ouvrir une sorte de "pop up" sur la page de mon site via un clique. Une fois que j'ai lancer la fonction, je dois cliquer sur le "pop up" n'importe ou pour arrêter la fonction. Mon problème est que je veux introduire des formulaire de texte dans cette "pop up" et quand je clique pour sélectionner la zone de texte, la fonction détecte un clique et ferme le "pop up". J'ai essayer de modifier d’événement dans la fonction comme par exemple un double clique mais sa créer un bug et la fonction ne ce ferme pas. Il n'y a que l'événement Onclick qui fonctionne. Auriez-vous une solution pour remplacer le Onclick par un Ondblclick ?

    Voici mon code JS :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    var IsIE=!!document.all, calque, essai, timer;
    window.onload = function(){
    	calque = document.getElementById('overlay');
    	var calqueY = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
    	var calqueX = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
    	calque.style.width = Math.max(document.body.offsetWidth, calqueY) + 'px';
    	calque.style.height = Math.max(document.body.offsetHeight, calqueX) + 'px';
    	if(IsIE){
    		calque.style.filter='alpha(opacity=0)';
    		calque.filters[0].opacity=0;
    	}
    	else{
    		calque.style.opacity=0;
    	}
    }
    function creer_message(elt, texte){
    	var i=0;
    	essai = elt.cloneNode(true);
    	essai.id = 'ajout';
    	essai.innerHTML = texte;
    	document.body.appendChild(essai);
    	if(IsIE){
    		essai.style.filter='alpha(opacity=0)';
    		essai.filters[0].opacity=0;
    	}
    	else{
    		essai.style.opacity=0;
    	}
    	calque.style.display = 'block';
    	essai.style.display = 'block';
    	timer = setInterval(function(){
    		if(i==100){
    			clearInterval(timer);
    			timer = false;
    			essai.getElementById('body_info').removeAttribute('ondblclick');
    		}
    		else{
    			if(IsIE){
    				calque.filters[0].opacity = i*0.75;
    				essai.filters[0].opacity = i;
    			}
    			else{
    				calque.style.opacity=(i/100)*0.75;
    				essai.style.opacity=i/100;
    			}
    			i=Math.min(i+5, 100);
    		}
    	}, 1);
    }
    function fin(){
    	var i=100;
    	if(!timer){
    		timer = setInterval(function(){
    			if(i==0){
    				clearInterval(timer);
    				calque.style.display = 'none';
    				document.body.removeChild(document.getElementById('ajout'));
    			}
    			else{
    				if(IsIE){
    					calque.filters[0].opacity = i*0.75;
    					essai.filters[0].opacity = i;
    				}
    				else{
    					calque.style.opacity=(i/100)*0.75;
    					essai.style.opacity = i/100;
    				}
    				i = Math.max(i-5,0);
    			}
    		}, 1);
    	}
    }
    Voici mon code css :
    Code css : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    body{
    	font-family:Arial, Helvetica, sans-serif; 
    	font-size:13px;
    }
    .info, .success, .warning, .error, .validation {
    	border: 1px solid;
    	margin: 10px 0px;
    	padding:15px 40px 25px 50px;
    	background-repeat: no-repeat;
    	background-position: 20px center;
    	cursor: pointer;
    }
    .info {
    	font-size:1.5em;
    	color: #00529B;
    	background-color: #BDE5F8;
    	background-image: url('info.png');
    }
    .success {
    	font-size:1.5em;
    	color: #4F8A10;
    	background-color: #DFF2BF;
    	background-image:url('success.png');
    }
    .warning {
    	font-size:1.5em;
    	color: #9F6000;
    	background-color: #FEEFB3;
    	background-image: url('warning.png');
    }
    .error {
    	font-size:1.5em;
    	color: #D8000C;
    	background-color: #FFBABA;
    	background-image: url('error.png');
    }
    #overlay{
    	background-color: black;
    	position: absolute;
    	margin :0;
    	padding : 0;
    	top: 0;
    	left: 0;
    	display : none;
    	overflow : hidden;
    }
    #ajout{
    	position: absolute;
    	top: 100px;
    	left: 24%;
    	display:block;
    	text-align:center;
    	width: 50em;
    	height:10em;
    	display: none;
    }
    </style>

    Voici mon code html :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <html>
    <body>
        <h1>Boîtes de message personnalisées.</h1>
    	<div style="" class="info" onclick="creer_message(this, 'Ceci est un message d\'information.')">
    		Cliquez ici pour afficher un message d'information.</div>
    	<div style="" class="success" onclick="creer_message(this, 'Ceci est un message de réussite personnalisé.')">
            Cliquez ici pour afficher un message de réussite personnalisé.</div>
        <div style="" class="warning" onclick="creer_message(this, 'Ceci est un message d\'alerte personnalisé.')">
            Cliquez ici pour afficher un message d'alerte personnalisé.</div>
        <div style="" class="error" onclick="creer_message(this, 'Ceci est un message d\'erreur personnalisé.')">
            Cliquez ici pour afficher un message d'erreur personnalisé.</div>
    	<div id="overlay"></div>
     
    </body>
    </html>


    Merci de m'aider,
    CrazyTermi.

  2. #2
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    supprime la fonction de fermeture sur l'événement onclick

    et ferme la fenêtre lorsque le formulaire lors d'un click sur un bouton du formulaire.

    A+JYT

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Il y a un bug, lorsque j'essaye de fermer la page après, elle réa-parait tout de suite

    voici un lien pour tester le code :
    http://kingdomoffreedom.crystal-serv.com/test/modal.php

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut
    Bonjour,
    attention tu clone l'élément sur lequel tu cliques, essai = elt.cloneNode(true), les événements sont également repris donc le comportement est logique.

    Il te faut redéfinir la fonction sur le onclick, par exemple essai.onclick= function(){fin()}, ou encore simplement essai.onclick= fin.

    Au passage, un <!doctype html> n'a jamais fait de mal à personne, bien au contraire

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    D'accord merci pour vos réponses Mais il y a toujours mon problème de départ qui est que quand je met des champs input text dans cette "pop up", et que l'on effectue un clique dessus, la fonction détecte le click et aussi tot ferme cette "pop up" automatiquement. J'aimerais changer l'événement onclick par ondblclick pour devoir faire un double clique pour fermer la page ou lieu d'un seul. J'ai tenter plusieurs fois de modifier ce code, mais je n'y suis pas arriver.

    Je précise que je suis vraiment une quiche en Javascript :/
    Pouvez-vous encore m'aider svp

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut
    ...input text dans cette "pop up",...
    Non! c'est une popin.


    J'aimerais changer l'événement onclick par ondblclick pour devoir...
    cela n'est pas forcément une bonne solution.

    Dans ton cas il faut intercepter l'objet ayant était cliqué et faire le traitement en conséquence.
    Pour plus d'info : Présentation des évènements du DOM

    Petit exemple qui peux t'aider à comprendre
    Code html : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8">
    <title>[Cliquez moi!]</title>
    <style>
    #la_forme {
      width:25em;
      margin:0 auto;
      padding:1em;
      border:1px solid #CCC;
      text-align:center;
      background:#EEE;
    }
    form {
      background:#DDD;
      padding:1em;
    }
    p {
      background:#CCC;
    }
    label {
      background:#FFF;
    }
    </style>
    </head>
    <body>
      <div id="la_forme">
        <form method="post">
          <p><label for="adresse">Votre email</label></p>
          <p><input id="adresse" type="email" size="20" name="email" autofocus required></p>
          <p><input type="submit" value="Envoyer"></p>
        </form>
      </div>
      <div id="info_event"></div>
    <script>
    var oDiv = document.getElementById('la_forme'),
        oInfo= document.getElementById('info_event');
     
    oDiv.onclick = function(e){
      e = e||window.event;
      var oSrc = e.target || e.srcElement;
      oInfo.innerHTML += 'clic sur balise &lt;' +oSrc.tagName + '&gt;<br>';
      return false;
    }
    </script>
    </body>
    </html>


    Je précise que je suis vraiment une quiche en Javascript :/
    cela ne doit pas être une fatalité

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    J'ai compris ce que tu voulais me dire NoSmoking, je te remercie de ton aide, je vais essayer de comprendre le cours que tu m'as donner mais sa va être dur

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    J'ai essayer de regarder le cours que tu m'as passé NoSmoking, mais je ne comprend vraiment pas beaucoup de choses. Je tiens à préciser que je me suis intéresser au développement web il n'y a même pas 1 ans de sa, et sa fait seulement 2 mois que je m’intéresse tout particulièrement au Javascript mais je ne comprend pas encore grand choses malheureusement :/

    Il me faudrait ce code pour pouvoir continuer mon site, il me servirait énormément pour des formulaires html. Pourriez-vous me modifier le code s'il vous plait pour qu'il puisse fonctionner comme je l'aimerais, je vous serai très reconnaissant.
    Merci.

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut
    Tout d'abord il manque un morceau à ma réponse
    cela n'est pas forcément une bonne solution.
    la mise en place d'un bouton fermer reste le plus ergonomique et intuitif.

    Dans l'exemple que je t'ai mis tu as pu te rendre compte qu'il y à des endroits qu'il vaut mieux ne pas cliquer et peu qu'il faut cliquer pour faire disparaitre la DIV, donc pas terrible.

    essaie en remplaçant le code de l'exemple par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    oDiv.onclick = function(e){
      e = e||window.event;
      var oSrc = e.target || e.srcElement;
      if( oSrc === this){
        alert('c\'est la DIV');
      }
      else{
        oInfo.innerHTML += 'clic sur balise &lt;' +oSrc.tagName + '&gt;<br>';
      }
      return false;
    }
    tu devrais savoir ce qu'il y a à faire, mais cela reste böff à mon sens!.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Alors j'ai essayer de comprendre ton code, en gros tu isole la div, et tu fais en sorte que quand tu clique dessus, sa ferme la page. Si c'est bien sa, j'ai essayer de glisser ton code dans la fonction de mon popin, mais il y a toujours le bug à la fin ou quand on clique pour fermer la fonction, elle réparait aussi-tôt.

    Voici mon code :
    Code html : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <!doctype html>
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    	<title>Boîtes de message personnalisées</title>
        <style type="text/css">
        body{
            font-family:Arial, Helvetica, sans-serif; 
            font-size:13px;
        }
            .info, .success, .warning, .error, .validation {
                border: 1px solid;
                margin: 10px 0px;
                padding:15px 40px 25px 50px;
                background-repeat: no-repeat;
                background-position: 20px center;
                    cursor: pointer;
            }
            .info {
                    font-size:1.5em;
                color: #00529B;
                background-color: #BDE5F8;
                background-image: url('info.png');
            }
        .success {
                    font-size:1.5em;
                color: #4F8A10;
                background-color: #DFF2BF;
                background-image:url('success.png');
            }
            .warning {
                    font-size:1.5em;
                color: #9F6000;
                background-color: #FEEFB3;
                background-image: url('warning.png');
            }
            .error {
                    font-size:1.5em;
                color: #D8000C;
                background-color: #FFBABA;
                background-image: url('error.png');
            }
            #overlay{
                    background-color: black;
                    position: absolute;
                    margin :0;
                    padding : 0;
                    top: 0;
                    left: 0;
                    display : none;
                    overflow : hidden;
            }
            #ajout{
                    position: absolute;
                    top: 100px;
                    left: 24%;
                    display:block;
                    text-align:center;
                    width: 50em;
                    height:10em;
                    display: none;
            }
        </style>
    <script type="text/javascript">
    <!--// [CDATA[
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    var IsIE=!!document.all, calque, essai, timer;
    window.onload = function(){
    	calque = document.getElementById('overlay');
    	var calqueY = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
    	var calqueX = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
    	calque.style.width = Math.max(document.body.offsetWidth, calqueY) + 'px';
    	calque.style.height = Math.max(document.body.offsetHeight, calqueX) + 'px';
    	if(IsIE){
    		calque.style.filter='alpha(opacity=0)';
    		calque.filters[0].opacity=0;
    	}
    	else{
    		calque.style.opacity=0;
    	}
    }
    function creer_message(elt, texte){
    	var i=0;
    	essai = elt.cloneNode(true);
    	essai.id = 'ajout';
    	essai.innerHTML = texte;
    	document.body.appendChild(essai);
    	if(IsIE){
    		essai.style.filter='alpha(opacity=0)';
    		essai.filters[0].opacity=0;
    	}
    	else{
    		essai.style.opacity=0;
    	}
    	calque.style.display = 'block';
    	essai.style.display = 'block';
    	timer = setInterval(function(){
    		if(i==100){
    			clearInterval(timer);
    			timer = false;
    			var oDiv = document.getElementById('clique_fermeture');
     
    			oDiv = function(e){
    				e = e||window.event;
    				var oSrc = e.target || e.srcElement;
    				if( oSrc === this){
    					essai.onclick = fin;
    				}
    			}
    		}
    		else{
    			if(IsIE){
    				calque.filters[0].opacity = i*0.75;
    				essai.filters[0].opacity = i;
    			}
    			else{
    				calque.style.opacity=(i/100)*0.75;
    				essai.style.opacity=i/100;
    			}
    			i=Math.min(i+5, 100);
    		}
    	}, 1);
    }
    function fin(){
    	var i=100;
    	if(!timer){
    		timer = setInterval(function(){
    			if(i==0){
    				clearInterval(timer);
    				calque.style.display = 'none';
    				document.body.removeChild(document.getElementById('ajout'));
    			}
    			else{
    				if(IsIE){
    					calque.filters[0].opacity = i*0.75;
    					essai.filters[0].opacity = i;
    				}
    				else{
    					calque.style.opacity=(i/100)*0.75;
    					essai.style.opacity = i/100;
    				}
    				i = Math.max(i-5,0);
    			}
    		}, 1);
    	}
    }
    Code html : 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
    // ]] -->
    </script>
    </head>
    <body>
        <h1>Boîtes de message personnalisées.</h1>
    	<div style="" class="info" onclick="creer_message(this, '<div id=\'clique_fermeture\'><p>Ceci est un message d\'information.</p></div>')">
    		Cliquez ici pour afficher un message d'information.</div>
    	<div style="" class="success" onclick="creer_message(this, '<div id=\'clique_fermeture\'><p>Ceci est un message de réussite personnalisé.</p></div>')">
            Cliquez ici pour afficher un message de réussite personnalisé.</div>
        <div style="" class="warning" onclick="creer_message(this, '<div id=\'clique_fermeture\'><p>Ceci est un message d\'alerte personnalisé.</p></div>')">
            Cliquez ici pour afficher un message d'alerte personnalisé.</div>
        <div style="" class="error" onclick="creer_message(this, '<div id=\'clique_fermeture\'><p>Ceci est un message d\'erreur personnalisé.</p></div>')">
            Cliquez ici pour afficher un message d'erreur personnalisé.</div>
    	<div id="overlay"></div>
     
    </body>
    </html>

    Voila, j'ai vraiment fais un copier/coller de ton code et j'ai essayer de l'intégrer dans ma fonction, mais je n'y suis pas arriver.

    mais cela reste böff à mon sens!.
    Je trouve aussi, j'aimerais plutôt un bouton, mais je ne sais pas comment faire.

  11. #11
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut
    Il ne suffit pas de coller du code pour que cela marche, le code n'a rien à faire dans le fadeIn (setInterval) mais doit être attaché à ton élément essai.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    essai.onclick = function (e) {
        e = e || window.event;
        var oSrc = e.target || e.srcElement;
        if (oSrc === this) {
            fin(); // ici on lance la fonction de fadeOut
        }
    }
    donc si l'on reprend la fonction en complet, cela pourrait donner l'intégration dans ton code suivante.
    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
    function creer_message(elt, texte) {
        var i = 0;
        essai = elt.cloneNode(true);
        essai.id = 'ajout';
        essai.innerHTML = texte;
        document.body.appendChild(essai);
        if (IsIE) {
            essai.style.filter = 'alpha(opacity=0)';
            essai.filters[0].opacity = 0;
        } else {
            essai.style.opacity = 0;
        }
        calque.style.display = 'block';
        essai.style.display = 'block';
        essai.onclick = function (e) {
            e = e || window.event;
            var oSrc = e.target || e.srcElement;
            if (oSrc === this) {
                fin();
            }
        }
        timer = setInterval(function () {
            if (i == 100) {
                clearInterval(timer);
                timer = false;
            } else {
                if (IsIE) {
                    calque.filters[0].opacity = i * 0.75;
                    essai.filters[0].opacity = i;
                } else {
                    calque.style.opacity = (i / 100) * 0.75;
                    essai.style.opacity = i / 100;
                }
                i = Math.min(i + 5, 100);
            }
        }, 1);
    }
    Je trouve aussi, j'aimerais plutôt un bouton, mais je ne sais pas comment faire.
    il suffit de créer un BUTTON et de l'ajouter à ta popin celui ci se chargeant de fermer son parent.

    Une question toutefois combien de popin différentes à tu à gérer dans ta page?

    Un remarque quand même, au départ on conçoit quelque chose de simple que l'on peut sophistiquer par la suite, ajout d'effet par exemple, mais pas l'inverse

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Merci énormément pour ce code, je l'est tester mais je pense qu'il manque un élément comme par exemple récupérer l'id de la div ou du bouton qui doit fermer la fonction avec e = document.getElementById('div');.
    J'ai fais mes petit test dans le code en ajoutant cette ligne de code mais je n'est pas réussis à avoir un résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        essai.onclick = function (e) {
            e = e || window.event;
    	e = document.getElementById('div');
            var oSrc = e.target || e.srcElement;
            if (oSrc === this) {
                fin();
            }
        }
    et en rajoutant un id="div" dans le code html à chaque div :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <body>
        <h1>Boîtes de message personnalisées.</h1>
    	<div style="" id="div" class="info" onclick="creer_message(this, 'Ceci est un message d\'information.')">
    		Cliquez ici pour afficher un message d'information.</div>
    	<div style="" id="div" class="success" onclick="creer_message(this, 'Ceci est un message de réussite personnalisé.')">
            Cliquez ici pour afficher un message de réussite personnalisé.</div>
        <div style="" id="div" class="warning" onclick="creer_message(this, 'Ceci est un message d\'alerte personnalisé.')">
            Cliquez ici pour afficher un message d'alerte personnalisé.</div>
        <div style="" id="div" class="error" onclick="creer_message(this, 'Ceci est un message d\'erreur personnalisé.')">
            Cliquez ici pour afficher un message d'erreur personnalisé.</div>
    	<div id="overlay"></div>
     
    </body>

    combien de popin différentes à tu à gérer dans ta page?
    j'ai 4 pop in à gérer dans ma page principal qui serviront à ajouter, modifier, ou supprimer une annonce, et la dernière pop in à participer à un événement. -> http://kingdomoffreedom.crystal-serv.com/ (la page est en construction).

    Une remarque quand même, au départ on conçoit quelque chose de simple que l'on peut sophistiquer par la suite, ajout d'effet par exemple, mais pas l'inverse
    J'y tiendrais compte

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut
    Bon je vais essayer de faire court le nombre de caractères étant limités pour les réponses.

    A la lecture de ton code HTML je me suis dis qu'il valait mieux que je n'ai pas mangé

    Plusieurs remarques même si nous ne sommes pas sur les forums Balisage (X)HTML et validation W3C ou Mise en page CSS.

    - manque un DOCTYPE en 1er ligne
    - utilisation de balises obsolètes, mais sans DOCTYPE peut être pas
    - connais tu les feuilles de style, beaucoup trop de style inline
    - connais tu le paramétrage de la méthode setTimeout, tu cherches à saturer le réseau
    var timer=setTimeout("rafraichir()",0.1);
    ...bon on va s'arrêter là...

    Mais le pire de tout est que tu nous a cacher que tu utilisais jQuery et là je ne vois pas pourquoi tu t'enchoses la vie !

    Je te propose une approche parmi bien d'autres, sur base de la structure HTML suivante
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      <button class="btn_cde" data-box="box_1">Modifier</button>
      <button class="btn_cde" data-box="box_2">Supprimer</button>
      <div id="box_1" class="box_masquee">
        <form method="post">
          <p><label for="adresse">Votre email</label></p>
          <p><input id="adresse" type="email" size="20" name="email" required></p>
          <p><input type="submit" value="Envoyer"></p>
        </form>
      </div>
      <div id="box_2" class="box_masquee">
        <p>Ceci est le contenu de la boîte Supprimer</p>
      </div>
    - on voit ici que l'on a pris l'option de mettre en dur le contenu des fenêtres devant apparaitre.
    - on voit également que l'on regroupe via la même class="box_masquee" ces popin.
    - concernant les BUTTON on ajoute un attribut data-box contenant l'ID de la fenêtre à ouvrir.

    Voilà les bases sont posées, maintenant passons au javascript...en utilisant la libraire jQuery bien sûr.

    Cela peut se résumer à cela
    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
    jQuery(function($){
      // on ajoute dynamiquement le cache
      $('body').prepend('<div id="overlay"></div>');
      // on affecte au click des boutons ayant la classe "btn_cde" l'apparition de la boite
      $('.btn_cde').on('click', function(){
          // on récupére l'ID de la box
          var idMsg = $(this).data('box');
          // on affiche le fond
          $('#overlay').show();
          // et on affiche la box
          $('#' +idMsg).toggle( 'slow', function(){
              // en fin d'effet on ajoute un bouton pour la fermeture
              $(this).prepend('<div class="btn_close">X</div>');
            });
          });
      // on traite ici le click sur les boutons ayant la class="btn_close", celui crée dynamiquement 
      $('body').on('click', '.btn_close', function() {
          // on efface la box
          $(this).parent().toggle( 'fast' );
          // on efface le fond
          $('#overlay').hide();
          // on destroy le bouton
          $('.btn_close').remove();
        });
     
    });
    ceci est une façon de procéder, en prenant l'option un bouton de fermeture, il y en à bien d'autre voire même l'utilisation de plugin de lightBox.

    Le reste n'est que CSS, mais pas dans les balises .

    Pour finir, un petit exemple complet, CSS compris, de ce que cela peut donner
    Code html : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8">
    <title>Effet lightbox simple</title>
    <meta name="Author" content="NoSmoking">
    <style>
    html,body{
      position:relative;
      font: 1em/1.5 Verdana, sans-serif;
      background:#E6E6E1;
      margin:0;
      padding:0;
      height:100%;
    }
    #page{
      width:40em;
      margin:0 auto;
      padding-top:1em;
    }
    #page h1{
      color:#006699;
      text-shadow:1px 1px 0 #fff;
      vertical-align:middle;
      margin:0;
    }
    #page h1 img{
      vertical-align:middle;
      font-size: 0.5em;
      margin:0 1em 0 0;
    }
    .btn_cde {
      border:1px solid #BBF;
      background:#EEE;
      color:blue;
      cursor:pointer;
      line-height:2em;
      margin:0.5em;
      text-align:center;
      width:10em;
    }
    .box_masquee {
      display:none;
      position:fixed;
      width:25em;
      top:15em;
      left:50%;
      margin-left:-13.5em;
      padding:1em;
      background:#FFF;
      border-radius:5px;
      border:1px solid #000;
      box-shadow:0 10px 25px rgba(0,0,0,0.5);
      text-align:center;
      z-index:1001;
    }
    .btn_close{
      position:absolute;
      width:2em;
      height:2em;
      line-height:2em;
      top:-1em;
      right:-1em;
      font: 700 1em/2 Verdana, sans-serif;
      color:#FFF;
      text-align:center;
      background:#F00;
      border-radius:50%;
      border:5px solid #FFF;
      box-shadow:0 10px 25px rgba(0,0,0,0.5);
      cursor:pointer;
    }
    #overlay{
      display:none;
      position:fixed;
      top:0;
      left:0;
      right:0;
      bottom:0;
      background:#000;
      opacity:0.5;
      z-index:1000;
    }
    </style>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script>
    jQuery(function($){
      $('body').prepend('<div id="overlay"></div>');
      $('.btn_cde').on('click', function(){
          var idMsg = $(this).data('box');
          $('#overlay').show();
          $('#' +idMsg).toggle( 'slow', function(){
              $(this).prepend('<div class="btn_close">X</div>');
            });
          });
      $('body').on('click', '.btn_close', function() {
          $(this).parent().toggle( 'fast' );
          $('#overlay').hide();
          $('.btn_close').remove();
        });
    });
    </script>
    </head>
    <body>
    <div id="page">
      <h1><img alt="Developpez.com" src="http://www.developpez.net/template/images/logo.png">Effet lightBox simple</h1>
      <button class="btn_cde" data-box="box_1">Modifier</button>
      <button class="btn_cde" data-box="box_2">Supprimer</button>
      <div id="box_1" class="box_masquee">
        <form method="post">
          <p><label for="adresse">Votre email</label></p>
          <p><input id="adresse" type="email" size="20" name="email" required></p>
          <p><input type="submit" value="Envoyer"></p>
        </form>
      </div>
      <div id="box_2" class="box_masquee">
        <p>Ceci est le contenu de la boîte Supprimer</p>
      </div>
    </div>
    </body>
    </html>

    Et pour vraiment finir je te conseille quand même de passer ta page au validateur.

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    je parie que tu as surement du avoir une crise cardiaque en voyant cela, ce qui est tout à fait normal vu le tas de css que je n'est pas mis dans la feuille de style Je vais arranger cela
    Quand je met le DOCTYPE, cela enlève la plu part de mes effet css mais je pense que c'est normal car ils ne sont pas dans une feuille de style.

    Mais le pire de tout est que tu nous a cacher que tu utilisais jQuery
    Désoler de ne pas t'avoir dit pour le jQuery mais j'ai découvert la fonction pour envoyer les formulaire sans recharger la page il n'y a même pas une semaine donc je n'est pas encore découvert de quoi était capable ce langage (code trouver aussi sur internet ^^). Mais en tout cas je pense que se code buggera beaucoup moins que mon pop in précédent. Je le trouve très joli et je l'apprécie beaucoup plus que l'autre (il fait plus professionnel ).

    J'ai passer ma page au validateur et sa ne m'a pas étonner plus que cela puisque je sais que je fais encore énormément de faute de codage, je n'est pas encore finis d'apprendre Mais en tout cas je vais essayer de toutes les corriger

    Je vous suis énormément reconnaissant de toute l'aide que vous avez pu m'apporter, vous m'avez beaucoup appris, et maintenant je vais pouvoir me perfectionner grâce à vous

    J'aurais juste une dernière question à vous poser mais ce serai plutôt du coter php et odp. Puis-je vous la poser ici ou il faudrait que j'ouvre un nouveaux sujet dans une catégorie qui correspondrait plus à ce type de langage ?

  15. #15
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Je suis impressionné par ton implication NoSmoking, perso j'ai pas le courage de répondre quand on part d'aussi loin
    One Web to rule them all

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Oui moi aussi je n'aurais pas penser qu'il m'aide autant, je le remercie vraiment

  17. #17
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut
    Citation Envoyé par SylvainPV
    Je suis impressionné par ton implication NoSmoking
    c'est mon coté soeur Thérésa

    Citation Envoyé par CrazyTermi
    mais ce serai plutôt du coter php et odp. Puis-je vous la poser ici ou il faudrait que j'ouvre un nouveaux sujet dans une catégorie qui correspondrait plus à ce type de langage ?
    il est préférable de la poster sur le forum adéquat, et ne pas oublier de passer cette discussion en résolue si tu la considère ainsi.

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    D'accord, je vous remercis encore pour votre aide merci ;-) cette discution est emplement resolu !

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

Discussions similaires

  1. Pas d'événement OnClose quand on arrête W2K
    Par Altau dans le forum C++Builder
    Réponses: 9
    Dernier message: 26/01/2009, 18h36
  2. Réponses: 5
    Dernier message: 09/01/2003, 11h55
  3. exploiter un évènement d'un sous composant dans un
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/12/2002, 16h44
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

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