2016-01-04 2 views
3

Я использую функцию на своем веб-сайте, чтобы случайно добавитьClass в div. работает отлично, но я не могу найти способ не повторять один и тот же класс дважды один за другим (потому что иногда один и тот же класс добавляется, и мы можем думать, что код не работает).jquery добавление случайного класса без повторения

здесь мой код jquery:

$("#switch").click(function(){ 

var classes = ["vert", "escalier","reverse","demi_escalier","demi_escalier_2","ligne" ]; 

$("#logo").removeClass().addClass(classes[~~(Math.random()*classes.length)]); 

}); 

Может ли кто-нибудь помочь мне с этим?

благодаря

+2

Вы видите addClass() добавить один и тот же класс в два раза? Или вы говорите, что не хотите выполнять кавычки по спине, чтобы попробовать тот же класс? – Taplar

+0

Сохраните сгенерированный номер переменной, а затем проверьте его во второй раз в цикле while, пока не получите другой номер – michniewicz

+0

@Taplar, я не хочу, чтобы один и тот же класс добавлялся дважды один за другим, иногда приводил к тому же класс добавлен, и мы можем думать, что код не работает – mmdwc

ответ

1

если вы хотите классов не повторять вы можете использовать следующие:

var classes = ["vert", "escalier", "reverse", "demi_escalier", "demi_escalier_2", "ligne"]; 
 
var classesCopy = classes.slice(); 
 

 
$('#switch').click(function() { 
 
    if (!classesCopy.length) { 
 
    classesCopy = classes.slice(); 
 
    } // once alls classes used up it starts from beginning 
 
    var classToAdd = classesCopy.splice(Math.floor(Math.random() * classesCopy.length), 1); 
 
    $('.current-class').text('current class: ' + classToAdd); 
 
    $('#logo').removeClass().addClass(classToAdd+''); 
 
});
#logo { 
 
    width: 100px; 
 
    height: 100px; 
 
    background: green; 
 
}
<div class='current-class'></div> 
 
<div id='logo'></div> 
 
<button id='switch'>switch</button> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>

+0

благодарит за вашу помощь, но это не работает ... классы больше не меняются ... – mmdwc

+0

Позвольте мне создать runnable версию – Bek

+0

@mmdwc посмотреть, что вы думаете – Bek

0
//put it in an IIFE so the variables are scoped down 
(function(){ 
    //constants, don't need to declare them in the click function over and over 
    var classes = ["vert", "escalier","reverse","demi_escalier" 
        ,"demi_escalier_2","ligne" ]; 
    //keep track of the last class used, -1 initial so no chance of mismatch 
    var lastNumber = -1; 
    var $logo = $("#logo"); 

    $("#switch").on('click', function() { 
     //get a new index 
     var nextClass = Date.now() * 100 % classes.length;; 

     //while they match, keep getting a new one 
     while (nextClass === lastNumber) { 
      nextClass = Date.now() * 100 % classes.length; 
     } 

     $logo.removeClass().addClass(classes[nextClass]); 
     //save it off so we can do the double check again on the next execution 
     lastNumber = nextClass; 
    }); 
})(); 
+0

спасибо за ваш ответ, но, к сожалению, он не работает ... Я периодически повторяю один и тот же класс дважды подряд ... знаете ли вы, почему? – mmdwc

+0

Действительно? Weird. Итак, если вы console.log() номер nextClass после того, как вы иногда видите один и тот же номер дважды? – Taplar