使用 JQuery 按 id 不重复显示 3 个随机元素。如何确保它总是returns 3?然后重做点击同一个按钮的功能?
Display 3 random elements by id with no repeat using JQuery. How to make sure it always returns 3? And redo the function clicking the same button?
我有一个代码可以按 id 随机显示三个元素而不重复,这通常有效。当前代码显示从 54 cards/html 个元素中选择的三张扑克牌。目前它大部分时间都可以正常工作,但有时它只有 returns 两张牌,而且很少只有 one.I 希望通过始终返回三张来改进它。我将如何修改以下代码来做到这一点?
此外,如果我按下随机显示三个 elements/cards 的按钮两次或更多次,它会在每次后续点击时不断添加三张卡片,直到用完很多显示和卡片。我将如何修改以下代码以重做该功能(随机显示另一组三张卡片并在第一次点击时隐藏前三张)。
我想保留当前代码通过 id 选择元素的功能,因为它可以用于生成除扑克牌之外的其他多个元素。
CSS 设置为:
.cards {
display: none;
}
代码是:
var myarray = [
"#card1","#card2","#card3","#card4","#card5","#card6","#card7"...];
var numberOfCards = 3;
function getRandom() {
for (var i = 1; i <= numberOfCards; i++) {
var randomIndex = RandomDiv();
$('.cards:eq('+randomIndex+')').fadeIn(900).css('display', 'inline-block');
myarray.splice(randomIndex, 1);
}
}
$('.btn').on('click', function() {
getRandom();
});
function RandomDiv() {
return Math.floor(Math.random() * myarray.length);
};
谢谢!
这是一个没有彻底检修的解决方案:
var myarray = ["#card1","#card2","#card3","#card4","#card5","#card6",
"#card7","#card8","#card9","#card10","#card11","#card12"];
var numberOfCards = 3;
$(".card").hide();
var previous = [];
function getRandom() {
if(myarray.length<3){
myarray = ["#card1","#card2","#card3","#card4","#card5","#card6",
"#card7","#card8","#card9","#card10","#card11","#card12"];
}
for (var i = 1; i <= numberOfCards; i++) {
var randomIndex = RandomDiv();
previous.push(myarray[randomIndex]);
$(myarray[randomIndex]).fadeIn(900);
myarray.splice(randomIndex, 1);
}
};
$('.btn').on('click', function() {
for(k=0; k< numberOfCards; k++){
$(previous[k]).hide(0);
}
previous = [];
getRandom();
});
function RandomDiv() {
return Math.floor(Math.random() * myarray.length);
};
.card{
display: inline-block;
}
.btn{
border: 1px solid
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="btn">
Deal
</div>
<div class="card" id ="card1" >1</div>
<div class="card" id ="card2" >2</div>
<div class="card" id ="card3" >3</div>
<div class="card" id ="card4" >4</div>
<div class="card" id ="card5" >5</div>
<div class="card" id ="card6" >6</div>
<div class="card" id ="card7" >7</div>
<div class="card" id ="card8" >8</div>
<div class="card" id ="card9" >9</div>
<div class="card" id ="card10" >10</div>
<div class="card" id ="card11" >11</div>
<div class="card" id ="card12" >12</div>
所有卡片最初都是隐藏的,所以只需要 fadeIn(900)
。
请记住,数组 myarray
在每笔交易中都变得越来越短,所以当它用完时,您应该 return 发牌给它。现在这是在 getRandom
函数中完成的。
这是一个jsfiddle
我有一个代码可以按 id 随机显示三个元素而不重复,这通常有效。当前代码显示从 54 cards/html 个元素中选择的三张扑克牌。目前它大部分时间都可以正常工作,但有时它只有 returns 两张牌,而且很少只有 one.I 希望通过始终返回三张来改进它。我将如何修改以下代码来做到这一点?
此外,如果我按下随机显示三个 elements/cards 的按钮两次或更多次,它会在每次后续点击时不断添加三张卡片,直到用完很多显示和卡片。我将如何修改以下代码以重做该功能(随机显示另一组三张卡片并在第一次点击时隐藏前三张)。
我想保留当前代码通过 id 选择元素的功能,因为它可以用于生成除扑克牌之外的其他多个元素。
CSS 设置为:
.cards {
display: none;
}
代码是:
var myarray = [
"#card1","#card2","#card3","#card4","#card5","#card6","#card7"...];
var numberOfCards = 3;
function getRandom() {
for (var i = 1; i <= numberOfCards; i++) {
var randomIndex = RandomDiv();
$('.cards:eq('+randomIndex+')').fadeIn(900).css('display', 'inline-block');
myarray.splice(randomIndex, 1);
}
}
$('.btn').on('click', function() {
getRandom();
});
function RandomDiv() {
return Math.floor(Math.random() * myarray.length);
};
谢谢!
这是一个没有彻底检修的解决方案:
var myarray = ["#card1","#card2","#card3","#card4","#card5","#card6",
"#card7","#card8","#card9","#card10","#card11","#card12"];
var numberOfCards = 3;
$(".card").hide();
var previous = [];
function getRandom() {
if(myarray.length<3){
myarray = ["#card1","#card2","#card3","#card4","#card5","#card6",
"#card7","#card8","#card9","#card10","#card11","#card12"];
}
for (var i = 1; i <= numberOfCards; i++) {
var randomIndex = RandomDiv();
previous.push(myarray[randomIndex]);
$(myarray[randomIndex]).fadeIn(900);
myarray.splice(randomIndex, 1);
}
};
$('.btn').on('click', function() {
for(k=0; k< numberOfCards; k++){
$(previous[k]).hide(0);
}
previous = [];
getRandom();
});
function RandomDiv() {
return Math.floor(Math.random() * myarray.length);
};
.card{
display: inline-block;
}
.btn{
border: 1px solid
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="btn">
Deal
</div>
<div class="card" id ="card1" >1</div>
<div class="card" id ="card2" >2</div>
<div class="card" id ="card3" >3</div>
<div class="card" id ="card4" >4</div>
<div class="card" id ="card5" >5</div>
<div class="card" id ="card6" >6</div>
<div class="card" id ="card7" >7</div>
<div class="card" id ="card8" >8</div>
<div class="card" id ="card9" >9</div>
<div class="card" id ="card10" >10</div>
<div class="card" id ="card11" >11</div>
<div class="card" id ="card12" >12</div>
所有卡片最初都是隐藏的,所以只需要 fadeIn(900)
。
请记住,数组 myarray
在每笔交易中都变得越来越短,所以当它用完时,您应该 return 发牌给它。现在这是在 getRandom
函数中完成的。
这是一个jsfiddle