Partage
  • Partager sur Facebook
  • Partager sur Twitter

Déplacer objet

Sujet résolu
    30 septembre 2009 à 11:48:53

    Bonjour (re)

    je voudrais déplacer un span en position relative
    j'ai une fonction qui me dit si il y a un clic ou pas, et une fonction qui déplace si y a le clic et que la souris bouge (ça fonctionne pour le scroll, je me suis dis que ça ferait pareil... apparament pas...)

    voici la fonction :

    function deplacenote(obj,event
    {
    var e = event || window.event;
    var nx = e.clientX;
    var ny = e.clientY;
    
    if (clicenbas)
    {
    var diffx = oldx-nx;
    var diffy = oldy-ny;
    obj.style.left = (obj.style.left - nx)+'px';
    obj.style.bottom = (obj.style.bottom - nx)+'px';
    }
    oldx=nx;
    oldy=ny;
    }
    


    qu'est-ce qui cloche siouplé? :euh:
    • Partager sur Facebook
    • Partager sur Twitter
      30 septembre 2009 à 11:56:47

      C'est quoi "clicenbas" ? o_O
      Sinon, ça :
      obj.style.left = (obj.style.left - nx)+'px';
      ça donnerait :
      = (ypx - nx)+'px';
      Utilise :
      obj.style.left = (parseInt(obj.style.left) - parseInt(nx))+'px';
      • Partager sur Facebook
      • Partager sur Twitter
        30 septembre 2009 à 12:35:16

        clicenbas c'est ma variable qui me dis si l'utilisateur a gardé le clic enfoncé.

        et... j'ai ajouté les parseInt et ça ne fonctionne pas.

        Erreur CSS : Erreur d'analyse de la valeur pour "bottom". Déclaration abandonnée.

        un alert(obj.style.left) ne me donne rien... :s

        c'est l'appel de la fonction qui bug?
        onmousemove="deplacenote(this,event);"

        • Partager sur Facebook
        • Partager sur Twitter
          30 septembre 2009 à 12:40:26

          t'as oublié de fermer la parenthèse de ta fonction :-°
          • Partager sur Facebook
          • Partager sur Twitter
            30 septembre 2009 à 12:43:25

            EDIT : a lol oui c'est une faute de frappe à la recopie, je bosse sur deux PC à le fois... dans le prog d'origine, tout y est...
            • Partager sur Facebook
            • Partager sur Twitter
              30 septembre 2009 à 12:55:44

              Tu as aussi changé pour bottom ?

              var diffx = oldx-nx;
              var diffy = oldy-ny;
              ici aussi faudrait du parseInt()...
              • Partager sur Facebook
              • Partager sur Twitter
                30 septembre 2009 à 13:24:46

                Oui j'avais changé pour bottom.

                J'ai ajouté les parseInt pour les coordonnées de la souris et ça ne bouge toujours pas... :(

                J'ai toujours rien non plus dans alert(obj.style.bottom) même avant de le faire changer.
                • Partager sur Facebook
                • Partager sur Twitter
                  30 septembre 2009 à 13:32:11

                  Tu as des erreurs dans la console ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 septembre 2009 à 13:36:05

                    oui, quand je tente de déplacer ça fait une erreur

                    Citation : Xiarea

                    Erreur CSS : Erreur d'analyse de la valeur pour "bottom". Déclaration abandonnée.



                    j'ai rien d'autre...
                    Edit : Si, j'ai la même erreur pour left! ça rassure plus ou moins étant donné que je fais la même chose pour left et pour bottom...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 septembre 2009 à 13:39:07

                      Montre ton code actuel stp ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 septembre 2009 à 13:57:37

                        Le code :

                        je commence par le html :

                        <div class = "annotation" style = "z-index:1; position : absolute; left:1108px; top:591px" onmouseover="this.style.zIndex='999';" onmouseout="this.style.zIndex='';" >
                        	<a class = "infobullepensebete" ondblclick= 'window.location.replace("editeur.php?id=39&iddoc=92")'>
                        		<img src = "image/note.png" class="punaise"/>
                        		<span class = "bulle" onmousedown="clicsouris(1,event);" onmouseup="clicsouris(0, event)" onmousemove="deplacenote(this,event);" onclick = "fix(this,event);">
                        
                        			***contenu infobulle***
                        			<img src = "image/note/39.jpg" />
                        		</span>
                        	</a>
                        </div>
                        


                        le JS associé :

                        /*
                        fonction déplacement des annotations
                        */
                        function deplacenote(obj,event)
                        {
                        var e = event || window.event;
                        	var nx = e.clientX;
                        	var ny = e.clientY;
                        	
                        	if (clicenbas)
                        	{
                        
                        		
                        		var diffx = parseInt(oldx)-parseInt(nx);
                        		var diffy = parseInt(oldy)-parseInt(ny);
                        		obj.style.bottom = (parseInt(obj.style.bottom) + parseInt(diffy))+'px';
                        		obj.style.left = (parseInt(obj.style.left) - parseInt(diffx)) +'px';
                        	}
                        	oldx = nx;
                        	oldy = ny;
                        
                        }
                        
                        /*
                        Fonction de défilement en cliquer/glisser
                        >>initialisée par la fonction clicsouris
                        >>action par la fonction scroll
                        */
                        function clicsouris (valeur, event)
                        {
                        	if(event.preventDefault) //pour éviter la copie d'image de firefox
                        	{
                        		event.preventDefault();
                        	}
                        
                        	var e = event || window.event;
                        	oldx = e.clientX;
                        	oldy = e.clientY;
                        	
                        	clicenbas = valeur;
                        }
                        


                        et le CSS, si ça aide :

                        a.infobulleniveau span, a.infobulleformeonde span, a.infobullepensebete span, a.infobulledessin span
                        {								   
                        	display	:none;
                        }
                        
                        span.bulle
                        {
                        	width 				: 250px;
                        	background-color 	: #FFFFB8;
                        	position : relative;
                        	
                        }
                        
                        /* Rend visible le bloc span au survol de la souris */
                        a.infobulleniveau:hover span, a.infobulleniveau:focus span , a.infobulleniveau:active span, /* y a tout une liste de type d'infobulles je coupe ici!*/
                        {
                        	position			: relative;
                        	display				: block;
                        	width 				: 250px;
                        	text-decoration 	: none;
                        	bottom 				: 16px;
                        	margin : 0px;
                        }
                        


                        Voila


                        Edit : Est ce que le fait que mon span est en position relative par hazard?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 octobre 2009 à 12:59:50

                          J'ai solutioné le problème.

                          Une petit erreur en fait : les valeurs de obj.style.left et obj.style.bottom ne sont pas initialisées.
                          Du coup quand JS tente de faire le calcul ça ne fonctionne pas.
                          solution :

                          if(obj.style.bottom)
                          {
                          obj.style.bottom = (parseInt(obj.style.bottom) + parseInt(diffy))+'px';
                          }
                          else
                          {
                          obj.style.bottom = parseInt(diffy)+'px';
                          }
                          


                          idem pour left.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Déplacer objet

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown