2017-04-22 121 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 ... –