2015-03-18 3 views
0

Remarque: Je n'ai que quelques jours d'expérience avec jQuery, bien que j'ai cherché autour pour essayer de résoudre le problème et testé mais cela ne fonctionne tout simplement pas.jQueryUI Empilable (Supprimer le contenu sur un autre onglet)

Ce que je suis en train de réaliser:

Je vais avoir des problèmes avec .selectable, j'ai créé un sélectionnable de jQueryUI avec quatre différents onglets, chaque onglet affiche un contenu différent ajouté à ce (un classe pour l'image, un append pour un bouton et un append pour le texte du paragraphe).

Voici un aperçu visuel de ce que je suis en train de réaliser: http://puu.sh/gELQi/211165f55a.png


Mon problème

Actuellement, en cliquant sur un onglet, il affiche correctement le contenu de cet onglet, mais dès que vous cliquez sur un autre/même onglet à nouveau il:

  • Ajouter le contenu chevauchant le précédent onglet

    1. bouton est ajouté sur chaque nouveau clic de même ou un autre onglet
    2. nouvelle classe d'image est ajoutée et poussé sous l'onglet précédent
    3. paragraphe te xt chevauche


Ce que je dois

je besoin d'un moyen pour que le chaque clic onglet (même ou un autre onglet), il efface tout le contenu précédent de le dernier onglet (tous les boutons/paragraphes/classes d'image).

En outre, un autre problème avec le jQueryUI .selectable() est qu'il permet de sélectionner plusieurs onglets à la fois, si vous faites glisser votre curseur sur les onglets de mon JSFiddle, vous verrez ce que je veux dire, je veux seulement être capable de sélectionner un au maximum.


Mon code décomposé

jQuery

//Tab Content added in relation to tab number 
if ($('#elements .elementOne').hasClass('ui-selected')) { 
      // Tab 1 
      $(".elementOneInfo").addClass("elementOneInfoImage"); 
      $(".elementOneInfo").append("<button><a href='/clans'>MORE<two</button>"); 
      $(".elementOneInfo").append("<p>"+textOne+"</p>"); 
     } 
if ($('#elements .elementTwo').hasClass('ui-selected')) { 
      //Tab 2 etc. 
      $(".elementTwoInfo").addClass("elementTwoInfoImage"); 
      [...] 

HTML

<div class="container elements-wrapper"> 
    <div class="col-md-12"> 
     <div class="row"> 

      <!-- Where new content is added --> 

      <div class="col-md-7 elements-info"> 
       <div class="elementOneInfo"></div> 
       <div class="elementTwoInfo"></div> 
       <div class="elementThreeInfo"></div> 
       <div class="elementFourInfo"></div> 
      </div> 

      <!-- Where tabs exist --> 

      <div class="col-md-5 elements-titles-wrapper"> 
       <ul id="elements"> 
        <li class="elementOne light ui-widget-content"><h3>Title1</h3></li> 
        <li class="elementTwo dark ui-widget-content"><h3>Title2</h3></li> 
        <li class="elementThree light ui-widget-content"><h3>Title3</h3></li> 
        <li class="elementFour dark ui-widget-content"><h3>Title4</h3></li> 
       </ul> 
      </div> 
     </div> 
    </div> 
</div> 

SCSS

/* Tabs */ 

.elements-titles-wrapper { 
    padding:0; 
    ul { 
     list-style: none; 
     padding-left: 0; 
    } 
    li > h3 { 
     color: white; 
     margin:0; 
     padding: 15px 0 15px 15px; 
    } 
    .light { 
     background-color: $aqua; 
    } 

    .dark { 
     background-color: $dark_aqua; 
    } 

    .active { 
     background-color: #75c5e0; 
    } 
    .ui-selected { 
     background: $light_aqua; 
    } 
    .ui-selecting { 
     background: $light_aqua; 
    } 
} 


/* Tab Content Added */ 

.elements-info { 
    padding:0; 
    p { 
     color:white; 
     font-size:12px; 
     background: rgba(0,0,0,.5); 
     padding: 10px; 
     position:absolute; 
     bottom:0; 
     margin-bottom: 0; 
     @include font(Open-Sans); 
    } 
    button { 
     background: $cream; 
     border-radius:5px; 
     margin: 5px 0 0 5px; 
     a { 
      color:$brown; 
      @include font(Open-Sans); 
      padding: 4px 8px; 
      text-decoration: none; 
     } 
    } 

    /* Random Background Images for testing */ 
    .elementOneInfoImage { 
     background: url(http://wallpaperkick.com/wp-content/uploads/2015/02/gray-wallpaper.jpg) no-repeat center right; 
     height:224px; 
    } 
    .elementTwoInfoImage { 
     background: url(http://cdn.wonderfulengineering.com/wp-content/uploads/2014/09/red-wallpaper-4.jpg) no-repeat center right; 
     height:224px; 
    } 
    .elementThreeInfoImage { 
     background: url(http://cdn.wonderfulengineering.com/wp-content/uploads/2014/09/Green-Wallpaper-3.jpg) no-repeat center right; 
     height:224px; 
    } 
    .elementFourInfoImage { 
     background: url(http://walldiskpaper.com/wp-content/uploads/2014/11/Blue-Light-Wallpaper-Image-Picture.png) no-repeat center right; 
     height:224px; 
    } 
} 

Merci pour la lecture, j'espère que quelqu'un peut être en mesure de me éclairer sur la façon dont cela pourrait se faire, je suis en mesure d'ajouter le look and feel de l'image visuelle que j'ai envoyé avec un onglet, mais dès que j'ai ajouté la commutation des onglets dans le mélange, il n'a tout simplement pas fonctionné.

+0

Vous apposent un bouton Plus encore et encore. Avez-vous besoin que cela soit généré une seule fois ou que ça marche bien maintenant? –

+0

@Joker Je veux que le bouton ne soit appliqué qu'une seule fois sur chaque onglet, ce n'est pas seulement le bouton mais les classes de texte et d'images sont ajoutées encore et encore le bouton semble plus dominant mais ils font la même chose. Chaque fois que l'on clique sur un onglet (identique ou différent), je veux effacer le contenu de l'onglet précédent et appliquer les nouvelles informations. –

Répondre

0

Essayez

$(document).ready(function() { 
 
    var content = { 
 
     "server-one": "Aenean eu leo quam." 
 
      + " Pellentesque ornare sem lacinia quam venenatis vestibulum." 
 
      + " Donec id elit non mi porta gravida at eget metus." 
 
      + " <button><a href='/clans'>MORE<two</button>", 
 
     "server-two": "Nulla vitae elit libero, a pharetra augue." 
 
      + " Etiam porta sem malesuada magna mollis euismod." 
 
      + " <button><a href='/clans'>MORE<two</button>", 
 
     "server-three": "Cum sociis natoque penatibus et magnis " 
 
      + "dis parturient montes, nascetur ridiculus mus." 
 
      + " Nullam quis risus eget urna mollis ornare vel eu leo." 
 
      + " <button><a href='/clans'>MORE<two</button>", 
 
     "server-four": "Donec id elit non mi porta gravida at eget metus." 
 
      + " Aenean eu leo quam." 
 
      + " Pellentesque ornare sem lacinia quam venenatis vestibulum." 
 
      + " <button><a href='/clans'>MORE<two</button>" 
 
    }; 
 

 
    $('#server-titles').selectable({ 
 
     selected: function (event, ui) { 
 
      var sel = $(ui.selected).attr("class").split(" ")[0]; 
 
      var elem = $(".row [class^=" + sel.concat("-info") + "]"); 
 
      elem.html(content[sel]).show(0).siblings().hide(0); 
 
       
 
     } 
 
    }); 
 
});
div[class$=image] { 
 
    display:none; 
 
} 
 

 
/* Server Tabs */ 
 
/* line 423, ../sass/home.scss */ 
 
.server-titles-wrapper { 
 
    padding: 0; 
 
} 
 
/* line 425, ../sass/home.scss */ 
 
.server-titles-wrapper ul { 
 
    list-style: none; 
 
    padding-left: 0; 
 
} 
 
/* line 429, ../sass/home.scss */ 
 
.server-titles-wrapper .server > h3 { 
 
    color: white; 
 
    margin: 0; 
 
    padding: 15px 0 15px 15px; 
 
} 
 
/* line 434, ../sass/home.scss */ 
 
.server-titles-wrapper .light { 
 
    background-color: #6bb3cc; 
 
} 
 
/* line 438, ../sass/home.scss */ 
 
.server-titles-wrapper .dark { 
 
    background-color: #61a4ba; 
 
} 
 
/* line 442, ../sass/home.scss */ 
 
.server-titles-wrapper .active { 
 
    background-color: #75c5e0; 
 
} 
 
/* line 445, ../sass/home.scss */ 
 
.server-titles-wrapper .ui-selected { 
 
    background: #75c5e0; 
 
} 
 
/* line 448, ../sass/home.scss */ 
 
.server-titles-wrapper .ui-selecting { 
 
    background: #75c5e0; 
 
} 
 

 
/* line 453, ../sass/home.scss */ 
 
.server-info { 
 
    padding: 0; 
 
} 
 
/* line 455, ../sass/home.scss */ 
 
.server-info p { 
 
    color: white; 
 
    font-size: 12px; 
 
    background: rgba(0, 0, 0, 0.5); 
 
    padding: 10px; 
 
    position: absolute; 
 
    bottom: 0; 
 
    margin-bottom: 0; 
 
    font-family: Open-Sans, Trebuchet MS, Serif; 
 
} 
 
/* line 465, ../sass/home.scss */ 
 
.server-info button { 
 
    background: #f4dab9; 
 
    border-radius: 5px; 
 
    margin: 10px 0 0 10px; 
 
} 
 
/* line 469, ../sass/home.scss */ 
 
.server-info button a { 
 
    color: #946d3b; 
 
    font-family: Open-Sans, Trebuchet MS, Serif; 
 
    padding: 4px 8px; 
 
    text-decoration: none; 
 
} 
 
/* line 476, ../sass/home.scss */ 
 
.server-info .server-one-info-image { 
 
    background: url(../img/clans.jpg) no-repeat center right; 
 
    height: 224px; 
 
} 
 
/* line 480, ../sass/home.scss */ 
 
.server-info .server-two-info-image { 
 
    background: url(../img/test.jpg) no-repeat center right; 
 
    height: 224px; 
 
} 
 

 
.server-info .server-one-info-image { 
 
    background: url(http://wallpaperkick.com/wp-content/uploads/2015/02/gray-wallpaper.jpg) no-repeat center right; 
 
    height:224px; 
 
} 
 
.server-info .server-two-info-image { 
 
    background: url(http://cdn.wonderfulengineering.com/wp-content/uploads/2014/09/red-wallpaper-4.jpg) no-repeat center right; 
 
    height:224px; 
 
} 
 
.server-info .server-three-info-image { 
 
    background: url(http://cdn.wonderfulengineering.com/wp-content/uploads/2014/09/Green-Wallpaper-3.jpg) no-repeat center right; 
 
    height:224px; 
 
} 
 
.server-info .server-four-info-image { 
 
    background: url(http://walldiskpaper.com/wp-content/uploads/2014/11/Blue-Light-Wallpaper-Image-Picture.png) no-repeat center right; 
 
    height:224px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<script src="https://code.jquery.com/ui/1.11.0/jquery-ui.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"> 
 
</script> 
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/> 
 

 
<div class="container server-wrapper"> 
 
    <div class="col-md-12"> 
 
     <div class="row"> 
 
      <div class="col-md-7 server-info"> 
 
       <div class="server-one-info server-one-info-image"></div> 
 
       <div class="server-two-info server-two-info-image"></div> 
 
       <div class="server-three-info server-three-info-image"></div> 
 
       <div class="server-four-info server-four-info-image"></div> 
 
      </div> 
 
      <div class="col-md-5 server-titles-wrapper"> 
 
       <div id="display"></div> 
 
       <ul id="server-titles"> 
 
        <li class="server-one light server ui-widget-content"> 
 
         <h3>Title1</h3> 
 
        </li> 
 
        <li class="server-two dark server ui-widget-content"> 
 
         <h3>Title2</h3> 
 
        </li> 
 
        <li class="server-three light server ui-widget-content"> 
 
         <h3>Title3</h3> 
 
        </li> 
 
        <li class="server-four dark server ui-widget-content"> 
 
         <h3>Title4</h3> 
 
        </li> 
 
       </ul> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</div>

jsFiddle http://jsfiddle.net/p5gsby49/12/

+0

C'est un excellent travail, merci, pourriez-vous expliquer ce que fait le code? http://jsfiddle.net/p5gsby49/13/ Aussi, pourquoi les images glissent-elles comme ça? De la diapositive je peux voir beaucoup de barres minces noires à travers l'écran, est-il un moyen de supprimer cette fonction de diapositive comme je ne vois aucune mention dans le jQuery –

+0

@JoeMethven 'js' utilise principalement' server- * ' 'class' voir' sel' de 'ui-selected' pour sélectionner l'élément' server - * - info' approprié, puis afficher le contenu de l'objet 'content' en utilisant le même modèle, ieg,' sel' 'server- *' est la propriété de Objet 'contents', renvoyant la valeur de' text/html'. Essayez '.show',' .hide' 'duration' à' 0' pour ajuster le rendu visible des éléments entre 'display: block',' display: none' http://jsfiddle.net/p5gsby49/14/; voir aussi stacksnippets ci-dessus, où les deux '.show',' .hide' ensemble à '0' – guest271314

+0

C'est super merci, j'ai réussi à ajouter un court fondu plutôt que la fonction de diapositive qui se produisait, j'ai une dernière petite chose que je viens de besoin d'ajouter avant que j'en ai fini avec ceci cependant: je dois d'une façon ou d'une autre avoir un onglet par défaut (tab-1 - serveur-un/serveur-un-info) qui aura ui-sélectionné sur l'onglet supérieur et montrer le haut le contenu des onglets avant même que l'utilisateur ait cliqué sur autre chose, est-ce possible avec le code que vous m'avez donné? J'ai essayé d'ajouter 'code if ($ ('# server-titles li'). Click() == false) {' comme alternative si le selectable n'a pas été cliqué mais que cela a échoué. –