【问题标题】:jquery adding random class without repeatjquery添加随机类而不重复
【发布时间】:2016-04-08 08:21:16
【问题描述】:

我在我的网站上使用一个函数来随机地将类添加到一个 div。 工作正常,但我找不到一种方法不一个接一个地重复同一类两次(因为有时添加了同一个类,我们可以认为代码不起作用)...

这是我的 jquery 代码:

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

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

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

});

谁能帮我解决这个问题?

谢谢

【问题讨论】:

  • 您看到 addClass() 两次添加同一个类?或者您是说您不想执行单击背靠背来尝试相同的课程?
  • 将生成的数字保存到一个变量中,然后在while循环中第二次检查它,直到你得到另一个数字
  • @Taplar,我不希望同一个类一个接一个地添加两次,因为有时添加了同一个类,我们可以认为代码不起作用
  • @rubchick 谢谢你的回复,你能帮忙吗?
  • @mmdwc,请参阅下面的 Taplar 解决方案,这就是我的意思

标签: javascript jquery random addclass removeclass


【解决方案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>

【讨论】:

  • 感谢您的帮助,但它不起作用...课程根本没有变化...
  • 让我创建可运行的版本
  • @mmdwc 看看你怎么看
  • 它工作得非常好......我在一个函数中使用它并在 document.ready 和其他 onclick 函数中调用该函数。我必须将 var 放在函数之外才能使其工作。非常感谢!
【解决方案2】:
//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;
    });
})();

【讨论】:

  • 感谢您的回复,但不幸的是它不起作用...我经常连续两次上同一堂课...您知道为什么吗?
  • 真的吗?诡异的。因此,如果您 console.log() 之后的 nextClass 编号,您有时会看到两次相同的编号?
猜你喜欢
  • 2011-06-19
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多