2017-04-22 116 views
-1

我創建了一個創建一些隨機卡的函數,但是當我像init(1)那樣調用它時,我的初始函數返回undefined。爲什麼它不起作用?它應該是這樣的:1。 我打電話例如初始化函數(1) 2.初始化創建和洗牌卡,並將其追加到身體在javascript中初始化一個函數

// INIT 
 
{ 
 
    function init(difficulty) { 
 
    switch (difficulty) { 
 
     case 1: 
 
      createCards(4); 
 
      break; 
 
     case 2: 
 
      createCards(12); 
 
      break; 
 
     case 0: 
 
      createCards(24); 
 
    } 
 
    } 
 
//FLIP CARD 
 
function createCards(ammount) { 
 
    const gameCards = [] 
 
    for (let i = 0; i < ammount; i++) { 
 
    const gameCard = document.createElement("div"); 
 
    gameCard.className = "card card--click"; 
 
    const gameCardFront = document.createElement("div"); 
 
    const gameCardBack = document.createElement("div"); 
 
    gameCard.appendChild(gameCardFront); 
 
    gameCard.appendChild(gameCardBack); 
 
    gameCardFront.className = "card__front card--reversed"; 
 
    gameCardBack.className = "card__back"; 
 
    const img = new Image(); 
 
    function randImg() { 
 
     const uniqueSrc = {} 
 
     const imgArray = ["ball", "car", "fork", "spoon", "sun"]; 
 
     const gameArray = []; 
 
     for (let i = 0; i < ammount * 2 + 1; i++) { 
 
     const randomSrc = Math.floor(Math.random() * (imgArray.length)); 
 
     if (!uniqueSrc[randomSrc]) { 
 
      uniqueSrc[randomSrc] = randomSrc; 
 
      img.src = "img/" + imgArray[randomSrc] + ".png"; 
 
      img.alt = imgArray[randomSrc]; 
 
      gameArray.push(img); 
 
     } else { 
 
      i--; 
 
     } 
 
     } 
 
     return gameArray; 
 
    } 
 
    randImg(); 
 
    gameCardBack.appendChild(img); 
 
    gameCards.push(gameCard) 
 
    } 
 
    return gameCards; 
 
    } 
 
    const cards = document.querySelectorAll(".card.card--click"); 
 
     //FETCHING ALL CARDS 
 
    for (let i = 0; i < cards.length; i++) { 
 
    const card = cards[i]; 
 
     //ADDING FLIP EFFECT TO EACH CARD 
 
    flipCard(card); 
 
    }; 
 
     //FLIP EFFECT FUNCTION 
 
    function flipCard(card) { 
 
    card.addEventListener("click", function() { 
 
     const list = this.classList; 
 
     list.contains("card--flip") === true ? list.remove("card--flip") : list.add("card--flip"); 
 
    }); 
 
    }; 
 
    function randomizer(array) { 
 
    for (let i = 0; i < array.length; i++) { 
 
     const j = Math.floor(Math.random() * (i + 1)); 
 
     const tmp = array[i]; 
 
     array[i] = array[j]; 
 
     array[j] = tmp; 
 
    } 
 
    return array; 
 
    } 
 
}

+1

嘗試刪除周圍的括號 – Brian

+0

我認爲主要的問題是,你不會做任何與由createCards返回的數據(4) –

+0

@布萊恩錯了,他們完全沒事......(但不是必需的) –

回答

1

1)事情是,你不會將你的卡片追加到身體上。所以,你可能想在init函數返回卡:

function init(difficulty) { 
switch (difficulty) { 
    case 1: 
     return createCards(4); 
     break; 
    case 2: 
     return createCards(12); 
     break; 
    case 0: 
     return createCards(24); 
    } 
} 

然後你就可以追加由init回到體數組:

init(0).forEach(function(card){ 
    document.body.appendChild(card); 
}); 

2)也這樣:

randImg(); 

沒有意義,因爲randImg返回一個數組,您可能想趕上它:

arr=randImg(); 

3)另外,randImg將無法正常工作,你需要把

const img=new Image(); 

進入循環。

4)和

const cards = document.querySelectorAll(".card.card--click"); 

將是一個空集,除非你上面運行前的一段:

+0

中的方括號一樣工作,這是我正在尋找的內容,但是可以給我一些細節如何運行像SPA這樣的初始化函數(我的選項非常簡單,我點擊一個)這個大括號是代碼塊而不是寫作IIFE – Miqez

+0

@Miqez看看codeblock two.It已經獲得了執行init的代碼,並且有一定的難度。是的,我需要一點時間來了解你的使用塊,但我wouldnt推薦使用它作爲其相當新的js ... –