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 :

Supprimer un élément d'un slider décaler les suivants


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 51
    Par défaut Supprimer un élément d'un slider décaler les suivants
    Bonjour,

    J'essaye de créer un slider tout simple en javascript qui est un slider vertical censé faire défiler des éléments verticalement, vert le haut.
    Cependant je souhaiterai qu'à chaque défilement de slide le premier élément (donc celui qui vient de défiler) soit automatiquement supprimé. Le problème c'est que lorsque je supprime cet élément les élements suivants sont déplacés vert le haut, comme pour combler la place disponible libérée par l'élément supprimé.
    L'élément suivant l'élément supprimé prend donc sa place, ce que je ne souhaite pas.

    Un peu de code sera plus parlant...

    Le code html et javascript:
    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
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<link rel="stylesheet" type="text/css" href="test.css">
    	</head>
    	<body>
    		<div id="container">
    			<ul>
    				<li>
    					<p class="paragraph">Du texte</p>
    				</li>
    				<li>
    					<p class="paragraph">Un texte</p>
    				</li>
    				<li>
    					<p class="paragraph">Et un texte</p>
    				</li>
    			</ul>
    		</div>
    		<button id="bouton">Run</button>
    		<script>
                            var bouton = document.getElementById('bouton');
                            bouton.onclick = function() {
                                    var container = document.getElementById('container'),
                                        ul = container.firstElementChild,
                                        height = ul.offsetHeight,
                                        currentIndex = 0;
                                    ul.style.top = 0;
                                    var animation = setInterval(function() {
                                            currentIndex += 1;
                                            ul.style.top = "-" + (currentIndex * height) + '%';
                                            ul.removeChild(ul.children[0]);
                                    }, 2000);
                            };
                    </script>
    	</body>
    </html>


    Le 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
    #container
    {
    	width: 400px; 
    	height: 100px;
    	overflow: hidden;
    }
     
    #container > ul
    {
    	height: 100px;
    	list-style: none;
    	margin: 0; 
    	padding: 0;
    	position: relative;
    	transition: 0.5s top;
            -webkit-transition: 0.5s top;
            -moz-transition: 0.5s top;
            -ms-transition: 0.5s top;
            -o-transition: 0.5s top;
    }
     
    #container > ul > li
    {
    	float: left;
    	width: 400px; 
    	height: 100px;
    	margin: 0; 
    	padding: 0;
    }
     
    .paragraph
    {
    	display: block;
    	width: 100%;
    	background-color: #1ff;
    	height: 100px;
    	margin: 0; 
    	padding: 0;
    }


    Dans le scénario que je souhaiterai obtenir je visualiserai la première slide affichant "du texte" qui serait ensuite supprimée, puis je verai "un texte", (supprimé à son tour) puis "et un texte".

    Actuellement je vois "du texte" puis "et un texte" sans voir "un texte", car se dernier à été "remonté" lors de la suppression de la première slide.
    Comment pourrais je réaliser cela ?

    En espérant avoir été suffisamment clair dans mes propos et que quelqu'un voudra bien prendre la peine de lire et de me répondre.
    Veuillez m'excuser ou me le faire remarquer si j'ai été un peu confus dans mes explications.

    Bonne journée

  2. #2
    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
    Par défaut
    Il me semble que pour presque tous les sliders existants, la position de chaque slide est fixée en positionnement absolu pour permettre ce genre de choses, ainsi qu'un plus grand contrôle dans les transitions.

  3. #3
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Je plussoie Sylvain, il y a de fortes chances que ton problème soit une affaire de positionnement.

    Je rajoute que le positionnement flottant est bourré de pièges, et j'ai toujours trouvé moyen de faire sans, par exemple en utilisant display: table-cell ou display: inline-block (voir : valeurs possibles de display). Ou, évidemment, avec le positionnement absolu.

    J'ai une question un petit peu hors sujet : l'utilisateur peut-il revenir en arrière, c'est-à-dire slider vers le bas ? Si oui, il est peut-être plus astucieux de garder les éléments en mémoire plutôt que les supprimer. Tu les retires du DOM avec la méthode removeChild, mais tu gardes une référence dessus dans une variable JavaScript (par exemple un tableau), et tu peux réinjecter l'élément dans le DOM (appendChild ou insertBefore) quand le besoin se présente.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2011
    Messages : 51
    Par défaut
    Merci à vous deux pour vos réponses.

    En effet c'était un problème de positionnement. J'ai donc utilisé le positionnement absolu pour arriver à mon but.
    Et en ce qui concerne le positionnement flottant, je connais effectivement les problèmes que cela peut apporter.

    Sinon Watilin, pour répondre à ta question, non l'utilisateur ne pourra pas revenir en arrière. En fait c'est un slider un peu particulier, une sorte de slider infini si on veut...
    Mais j'approuve ton idée

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

Discussions similaires

  1. [Débutant] Décaler les éléments d'une matrice
    Par davidus85 dans le forum MATLAB
    Réponses: 2
    Dernier message: 09/07/2014, 00h49
  2. Supprimer une ligne sans décaler les autres
    Par nomade333 dans le forum Conception
    Réponses: 4
    Dernier message: 18/04/2012, 23h43
  3. [array] supprimer un élément qui n'est pas le dernier
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/04/2008, 20h41
  4. [32 bits] Décaler les octets d'un registre
    Par Kef dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 22/06/2004, 23h09
  5. Supprimer un élément d'un tableau
    Par CaptainChoc dans le forum Langage
    Réponses: 15
    Dernier message: 23/12/2002, 23h14

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