Deplacement fluide d'un div en js.
Résolu/Fermé
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
-
6 févr. 2009 à 15:27
claudiusse - 14 nov. 2011 à 20:49
claudiusse - 14 nov. 2011 à 20:49
A voir également:
- Déplacer div javascript
- Déplacer une colonne excel - Guide
- Telecharger javascript - Télécharger - Langages
- Déplacer la barre des taches windows 11 - Guide
- Div c++ - Télécharger - Langages
- Déplacer dossier onedrive - Guide
21 réponses
Azraka
Messages postés
252
Date d'inscription
mercredi 11 juin 2008
Statut
Membre
Dernière intervention
5 juin 2014
13
6 févr. 2009 à 16:32
6 févr. 2009 à 16:32
Il faudrait que tu fasses en une fonction qui déplace ton menu de seulement quelques pixels (genre 10 ou 15) et après tu utilises la fonction javascript setInterval() pour que ta fonction s'exécute en boucle.
Voilà un peu d'aide pour le setInterval() : https://www.toutjavascript.com/reference/ref-window.setinterval.php
Voilà un peu d'aide pour le setInterval() : https://www.toutjavascript.com/reference/ref-window.setinterval.php
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
8 févr. 2009 à 02:00
8 févr. 2009 à 02:00
merci beaucoup pour ton aide azraka.
Mais maleureusement je ne suis pas au résultat souhaité...
voici la page: http://samsam26.u7n.org/2ndsouffle/testmenuglissant.htm
le cd à gauche, je souhaite qu'il se deplace fluidement lorsque la souris est dessus et qu'il se range fluidement lorsque la souris le quitte. j'espère qu'avec la page, vous pourriez mieux saisir mon problème... encore merci azraka de perdre ton temps pour moi :s je suis ouvert à toute proposition pouvant faire avancer mon problème...
bonne soirée
Mais maleureusement je ne suis pas au résultat souhaité...
voici la page: http://samsam26.u7n.org/2ndsouffle/testmenuglissant.htm
le cd à gauche, je souhaite qu'il se deplace fluidement lorsque la souris est dessus et qu'il se range fluidement lorsque la souris le quitte. j'espère qu'avec la page, vous pourriez mieux saisir mon problème... encore merci azraka de perdre ton temps pour moi :s je suis ouvert à toute proposition pouvant faire avancer mon problème...
bonne soirée
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
8 févr. 2009 à 02:02
8 févr. 2009 à 02:02
p.s:
la page telle qu'elle c'est avec ce que tu m'as donné azraka. sauf pour le onmouseout, j'ai mis la même chose qu'avec le over mais avec la fonction range() et mon autre setinterval. (vous pouvez ouvrir les source, le script est dans la page, pas dans un fichier js si vous souhaitez en savoir plus, enfin seulement si vous souhaitez me venir en aide =D)
la page telle qu'elle c'est avec ce que tu m'as donné azraka. sauf pour le onmouseout, j'ai mis la même chose qu'avec le over mais avec la fonction range() et mon autre setinterval. (vous pouvez ouvrir les source, le script est dans la page, pas dans un fichier js si vous souhaitez en savoir plus, enfin seulement si vous souhaitez me venir en aide =D)
Azraka
Messages postés
252
Date d'inscription
mercredi 11 juin 2008
Statut
Membre
Dernière intervention
5 juin 2014
13
8 févr. 2009 à 10:24
8 févr. 2009 à 10:24
Premier problème, tes appels de fonctions. Mets ça à la place, ça ira déjà mieux
Après le soucis c'est que la boucle qui permet de décaler le cd ne s'arrète jamais (il n'y a pas de clearInterval). Donc l'idéal serait de mettre un if dans ta fonction. Si la position maximale n'est pas atteinte on effectue le déplacement, sinon on arrête la boucle. Tu n'auras pas de mal à faire ça je pense, il faudra utiliser clearInterval(sort), ou clearInterval(range);
Je pense que ça donnerai un truc du genre
Bon je suis pas sûr que ça soit ça mais il faudrait faire un truc du genre. N'hésite pas à redemander si ça ne marche pas ;)
<div id="menu" onmouseover="sort=setInterval('sortir(),50');" onmouseout="range=setInterval(" ranger()="" ,50);="">
Après le soucis c'est que la boucle qui permet de décaler le cd ne s'arrète jamais (il n'y a pas de clearInterval). Donc l'idéal serait de mettre un if dans ta fonction. Si la position maximale n'est pas atteinte on effectue le déplacement, sinon on arrête la boucle. Tu n'auras pas de mal à faire ça je pense, il faudra utiliser clearInterval(sort), ou clearInterval(range);
Je pense que ça donnerai un truc du genre
function sortir() { if (positiongauche != *valeur max*) { positiongauche+=10; document.getElementById("menu").style.left=positiongauche; } else { clearInterval(sort); } }
Bon je suis pas sûr que ça soit ça mais il faudrait faire un truc du genre. N'hésite pas à redemander si ça ne marche pas ;)
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
8 févr. 2009 à 10:28
8 févr. 2009 à 10:28
un GRAND merci Azraka, je vais déjeuner et je tente après^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
8 févr. 2009 à 11:11
8 févr. 2009 à 11:11
rebonjour -_-
Et bien malheureusement le résultat attendu n'est toujours pas là... j'ai mis à jour la page si vous souhaitez voir le nouveau résultat. Il parait identique au précédent: il n'appelle pas la fonction range lors du retrait de la souris, lorsque la souris passe dessus il faut "la frotter" pour qu'il sorte, et enfin le dernier problème, il n'y a pas pris en compte de la valeur maximum.
je bidouille un peu mon code afin de trouver la solution, mais je suis encore ouvert à toute proposition...
Et bien malheureusement le résultat attendu n'est toujours pas là... j'ai mis à jour la page si vous souhaitez voir le nouveau résultat. Il parait identique au précédent: il n'appelle pas la fonction range lors du retrait de la souris, lorsque la souris passe dessus il faut "la frotter" pour qu'il sorte, et enfin le dernier problème, il n'y a pas pris en compte de la valeur maximum.
je bidouille un peu mon code afin de trouver la solution, mais je suis encore ouvert à toute proposition...
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
8 févr. 2009 à 19:45
8 févr. 2009 à 19:45
En bidouillant un peu j'arrive à ceci, je ne suis pas loin du resultat, mais la fonction du onmouseout, j'ai l'impression qu'elle est appellée même quand ya la souri dessus... en gros aussitôt arrivé ça repart,...
et après j'appelle ranger() et sortir():
voilà, je suis sur que je ne suis vraiment pas loins du but... si vous pourriez continuer à me fournir votre aide si précieuse..... merci beaucoup
function avance() { positiongauche+=10; document.getElementById("menu").style.left=positiongauche; } function sortir() { if (positiongauche < posmax) { sort=setInterval("avance()" ,50); } else { clearInterval(sort); } } function recule() { positiongauche-=10; document.getElementById("menu").style.left=positiongauche; } function ranger() { if (positiongauche > posmin) { range=setInterval("recule()" ,50); } else { clearInterval(range); } }
et après j'appelle ranger() et sortir():
<div id="menu" onmouseover="sortir()" onmouseout="ranger()">
voilà, je suis sur que je ne suis vraiment pas loins du but... si vous pourriez continuer à me fournir votre aide si précieuse..... merci beaucoup
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
8 févr. 2009 à 20:03
8 févr. 2009 à 20:03
euuu oui
un très gros besoin d'aide...
je ne sais pas si tu as suvie mon problème ou si tu souhaite une explication clair?
un très gros besoin d'aide...
je ne sais pas si tu as suvie mon problème ou si tu souhaite une explication clair?
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
8 févr. 2009 à 20:14
8 févr. 2009 à 20:14
en bref:
j'ai un menu qui est positionné a gauche en absolue de -250px, je souhaiterais le deplacer de façon fluide à 0px lorsque la souris passe dessus, et le remettre à sa place lorsque la souris le quitte. voici le meilleur résultat que j'arrive à obtenir: http://samsam26.u7n.org/2ndsouffle/testmenuglissant.htm (script dans le code source ou deux messages au dessus). mon problème est qu'il ne se limite pas ou très mal (entre -250 et 0px) et qu'il ne se range pas au bon moment...
j'ai un menu qui est positionné a gauche en absolue de -250px, je souhaiterais le deplacer de façon fluide à 0px lorsque la souris passe dessus, et le remettre à sa place lorsque la souris le quitte. voici le meilleur résultat que j'arrive à obtenir: http://samsam26.u7n.org/2ndsouffle/testmenuglissant.htm (script dans le code source ou deux messages au dessus). mon problème est qu'il ne se limite pas ou très mal (entre -250 et 0px) et qu'il ne se range pas au bon moment...
Utilisateur anonyme
8 févr. 2009 à 20:56
8 févr. 2009 à 20:56
Voici un script que j'ai fait :
<html>
<head>
<style type='text/css'>
.pro
{height:200px;
width:400px;
border:solid red 1px;
background-color:yellow;
position:absolute;
left:-250px;
}
</style>
</head>
<body>
<div id="menu" onMouseover='deplace();' onMouseout='range();' class='pro'>
tout mon menu est ici
</div>
<script language='javascript'>
obj=document.getElementById('menu');
obj.style.left=obj.offsetLeft;
leftDepart=obj.offsetLeft;
function fDeplace()
{
if(obj.offsetLeft<=0)
{obj.style.left=obj.offsetLeft+10;
deplace();}
}
function deplace()
{
vitesseDeplacement=1;
setTimeout("fDeplace()",vitesseDeplacement);
}
function fRange()
{
if(obj.offsetLeft>=-250)
{
obj.style.left=obj.offsetLeft-10;
range();}
}
function range()
{
vitesseRange=1;
setTimeout("fRange()",vitesseRange);
}
</script>
</body>
</html>
<html>
<head>
<style type='text/css'>
.pro
{height:200px;
width:400px;
border:solid red 1px;
background-color:yellow;
position:absolute;
left:-250px;
}
</style>
</head>
<body>
<div id="menu" onMouseover='deplace();' onMouseout='range();' class='pro'>
tout mon menu est ici
</div>
<script language='javascript'>
obj=document.getElementById('menu');
obj.style.left=obj.offsetLeft;
leftDepart=obj.offsetLeft;
function fDeplace()
{
if(obj.offsetLeft<=0)
{obj.style.left=obj.offsetLeft+10;
deplace();}
}
function deplace()
{
vitesseDeplacement=1;
setTimeout("fDeplace()",vitesseDeplacement);
}
function fRange()
{
if(obj.offsetLeft>=-250)
{
obj.style.left=obj.offsetLeft-10;
range();}
}
function range()
{
vitesseRange=1;
setTimeout("fRange()",vitesseRange);
}
</script>
</body>
</html>
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
8 févr. 2009 à 21:01
8 févr. 2009 à 21:01
merci c'est exactement ce que je veux veux, je vais l'eplucher et essayer de l'adapter a mon menu =)
Utilisateur anonyme
8 févr. 2009 à 21:07
8 févr. 2009 à 21:07
j'ai affiner le script pour qu'il soit plus efficace (voir en gras ce que j'ai ajouté):
<html>
<head>
<style type='text/css'>
.pro
{height:200px;
width:400px;
border:solid red 1px;
background-color:yellow;
position:absolute;
left:-250px;
}
</style>
</head>
<body>
<div id="menu" onMouseover='deplace();' onMouseout='range();' class='pro'>
tout mon menu est ici
</div>
<script language='javascript'>
obj=document.getElementById('menu');
obj.style.left=obj.offsetLeft;
leftDepart=obj.offsetLeft;
function fDeplace()
{
if(obj.offsetLeft<=0)
{obj.style.left=obj.offsetLeft+10;
deplace();}
}
function deplace()
{
vitesseDeplacement=1;
deplacement=setTimeout("fDeplace()",vitesseDeplacement);
}
function fRange()
{
if(obj.offsetLeft>=-250)
{
obj.style.left=obj.offsetLeft-10;
range();}
}
function range()
{
clearTimeout(deplacement);
vitesseRange=1;
setTimeout("fRange()",vitesseRange);
}
</script>
</body>
</html>
<html>
<head>
<style type='text/css'>
.pro
{height:200px;
width:400px;
border:solid red 1px;
background-color:yellow;
position:absolute;
left:-250px;
}
</style>
</head>
<body>
<div id="menu" onMouseover='deplace();' onMouseout='range();' class='pro'>
tout mon menu est ici
</div>
<script language='javascript'>
obj=document.getElementById('menu');
obj.style.left=obj.offsetLeft;
leftDepart=obj.offsetLeft;
function fDeplace()
{
if(obj.offsetLeft<=0)
{obj.style.left=obj.offsetLeft+10;
deplace();}
}
function deplace()
{
vitesseDeplacement=1;
deplacement=setTimeout("fDeplace()",vitesseDeplacement);
}
function fRange()
{
if(obj.offsetLeft>=-250)
{
obj.style.left=obj.offsetLeft-10;
range();}
}
function range()
{
clearTimeout(deplacement);
vitesseRange=1;
setTimeout("fRange()",vitesseRange);
}
</script>
</body>
</html>
Azraka
Messages postés
252
Date d'inscription
mercredi 11 juin 2008
Statut
Membre
Dernière intervention
5 juin 2014
13
9 févr. 2009 à 09:06
9 févr. 2009 à 09:06
Merci toto, je vais garder ce script sous la main, ça peut servir.
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
8 févr. 2009 à 22:11
8 févr. 2009 à 22:11
merci pour ton script totoAussi, il marche très bien et a résolu mon problème =)
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
9 févr. 2009 à 19:56
9 févr. 2009 à 19:56
Juste une question, si ya une image sur le div: lorsque la souris passe sur l'image, elle est considéré comme en dehors du div, autrement dit, la fonction range est appellée. alors que l'image est pourtant dans le div... si vous avez une idée...
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
9 févr. 2009 à 23:33
9 févr. 2009 à 23:33
voilà!
tout ceci fonctionne, même avec des images,... voici ce que j'ai rajouté:
une variable qui vaut 0 si le menu est fermé et 1 si il est ouvert:
tout fonctionne parfaitement! Encore merci à toto pour m'avoir donné de très bon résultats et a Azrak de m'avoir aidé.
tout ceci fonctionne, même avec des images,... voici ce que j'ai rajouté:
une variable qui vaut 0 si le menu est fermé et 1 si il est ouvert:
<html> <head> <style type='text/css'> .pro {height:200px; width:400px; border:solid red 1px; background-color:yellow; position:absolute; left:-250px; } </style> </head> <body> <div id="menu" onMouseover='deplace();' onMouseout='range();' class='pro'> tout mon menu est <img src="image.gif" /> </div> <script language='javascript'> var compte=0; obj=document.getElementById('menu'); obj.style.left=obj.offsetLeft; leftDepart=obj.offsetLeft; function fDeplace() { if(obj.offsetLeft<=0) {obj.style.left=obj.offsetLeft+10; deplace();} } function deplace() { vitesseDeplacement=1; if(compte==0) { deplacement=setTimeout("fDeplace()",vitesseDeplacement);} else {clearTimeout(rangement); deplacement=setTimeout("fDeplace()",vitesseDeplacement); compte=0; } } function fRange() { if(obj.offsetLeft>=-250) { obj.style.left=obj.offsetLeft-10; range();} } function range() { clearTimeout(deplacement); vitesseRange=1; rangement=setTimeout("fRange()",vitesseRange); compte=1; } </script> </body> </html>
tout fonctionne parfaitement! Encore merci à toto pour m'avoir donné de très bon résultats et a Azrak de m'avoir aidé.
Azraka
Messages postés
252
Date d'inscription
mercredi 11 juin 2008
Statut
Membre
Dernière intervention
5 juin 2014
13
10 févr. 2009 à 14:06
10 févr. 2009 à 14:06
De rien, c'est normal.
Par contre curieux de voir le résultat je suis retourner voir ta page de test (http://samsam26.u7n.org/2ndsouffle/testmenuglissant.htm) et ça marche pas, c'est normal ?
Par contre curieux de voir le résultat je suis retourner voir ta page de test (http://samsam26.u7n.org/2ndsouffle/testmenuglissant.htm) et ça marche pas, c'est normal ?
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
10 févr. 2009 à 14:34
10 févr. 2009 à 14:34
oui j'avais pas envoyé la nouvelle page au serveur!
maintenant tu peux aller voir^^
maintenant tu peux aller voir^^
Azraka
Messages postés
252
Date d'inscription
mercredi 11 juin 2008
Statut
Membre
Dernière intervention
5 juin 2014
13
10 févr. 2009 à 14:36
10 févr. 2009 à 14:36
Merci. En effet c'est super classe ;)
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
10 févr. 2009 à 14:48
10 févr. 2009 à 14:48
oui je trouve aussi que le résultat est sympa, encore merci pour votre aide =)
Attention Transitional +'px'
obj.style.left=obj.offsetLeft+50+'px';//important pour la compatibilité
obj.style.left=obj.offsetLeft+50+'px';//important pour la compatibilité
samsam26
Messages postés
105
Date d'inscription
vendredi 6 février 2009
Statut
Membre
Dernière intervention
4 mars 2013
6
6 févr. 2009 à 16:36
6 févr. 2009 à 16:36
merci beaucoup, je vais aller regarder ça, je vous tient au courant.