卡片翻转颠倒,但我只想从三张卡片中翻转两张卡片。我该怎么做?随机播放功能也不起作用

问题描述 投票:0回答:1

卡片翻转颠倒,但我只想从三张卡片中翻转两张卡片。我该怎么做?随机播放功能也不起作用。

index.html:

<div class="row">  
       <div id="shuffle">       
        
           <!--- Card 1   -->

          <section class="cards">
      <div class="cards__single">
        <div class="cards__front">
        <img src="img/back.jpg" alt="card1"/>
        </div>
                
        <div class="cards__back">
        <img src="cards/theMoon.jpg" alt="card1"/>
        </div>
      </div>

      <!--- Card 2   -->   

      <div class="cards__single">
        <div class="cards__front">
        <img src="img/back.jpg" alt="card1"/>
        </div>
                
        <div class="cards__back">
        <img src="cards/theChariot.jpg" alt="card1"/>
        </div>
      </div>

       <!--- Card 3   -->

              <div class="cards__single">
        <div class="cards__front">
        <img src="img/back.jpg" alt="card1"/>
        </div>

        <div class="cards__back">
        <img src="cards/theSun.jpg" alt="card1"/>
        </div>
      </div>              

          </section>
           <br>
           <button>Shuffle</button>   
       </div>          
</div>               
</div>
          <script src="script/main.js"></script>

main.js:

//Shuffle Cards

function shuffle(elems) {

    allElems = (function(){

    var ret = [], l = elems.length;

    while (l--) { ret[ret.length] = elems[l]; }

    return ret;

    })();

    var shuffled = (function(){

        var l = allElems.length, ret = [];

        while (l--) {

            var random = Math.floor(Math.random() * allElems.length),

                randEl = allElems[random].cloneNode(true);

            allElems.splice(random, 1);

            ret[ret.length] = randEl;

        }

        return ret; 

    })(), l = elems.length;

 

    while (l--) {

        elems[l].parentNode.insertBefore(shuffled[l], elems[l].nextSibling);

        elems[l].parentNode.removeChild(elems[l]);
    }
}

var button = document.querySelector('button');

button.addEventListener('click', function() { shuffle( document.querySelectorAll('#shuffle > div') ) }, false);

//Flip only two amongst three cards

const cards = document.querySelectorAll(".cards__single");

function flipCard() {

  this.classList.toggle("flip");
}

cards.forEach((card) => card.addEventListener("click", flipCard));

function showResult(cards) {

  var flipCard = [];

  for (var i = 0; i < 2; i++) {

    flipCard.push(cards[Math.floor(Math.random() * cards.length)]);

  }

  for (var i = 0; i < flipCard.length; i++) {

   flipCard(flipCard[i]);
  }

  return flipCard;
}

console.log(flipCard);
javascript html shuffle playing-cards fisher-yates-shuffle
1个回答
0
投票

我在你的代码中发现了一些问题。而且您的代码格式不正确。

首先:您有一个名为 FlipCard 的函数,但您也对数组使用相同的名称。你不应该这样做。

其次:在showResult函数中,您正在调用flipCard(flipCard[i]),我不明白为什么。您应该调用 FlipCard 函数并传递卡片元素。

以下是如何修复的示例。

// Shuffle Cards
function shuffle(elems) {
var allElems = (function () {
    var ret = [],
    l = elems.length;
    while (l--) {
    ret[ret.length] = elems[l];
    }
    return ret;
})();

var shuffled = (function () {
    var l = allElems.length,
    ret = [];
    while (l--) {
    var random = Math.floor(Math.random() * allElems.length),
        randEl = allElems[random].cloneNode(true);
    allElems.splice(random, 1);
    ret[ret.length] = randEl;
    }
    return ret;
})();

var l = elems.length;
while (l--) {
    elems[l].parentNode.insertBefore(shuffled[l], elems[l].nextSibling);
    elems[l].parentNode.removeChild(elems[l]);
}
}

var button = document.querySelector("button");

button.addEventListener(
"click",
function () {
    shuffle(document.querySelectorAll("#shuffle > div"));
},
false
);

// Flip only two amongst three cards
const cards = document.querySelectorAll(".cards__single");

function flipCard() {
this.classList.toggle("flip");
}

cards.forEach((card) => card.addEventListener("click", flipCard));

// fixed show result function
function showResult(cards) {
var flippedCards = [];

for (var i = 0; i < 2; i++) {
    flippedCards.push(cards[Math.floor(Math.random() * cards.length)]);
}

flippedCards.forEach((card) => flipCard.call(card));

return flippedCards;
}

console.log(showResult(cards));

检查是否解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.