增量不适用于匹配游戏

时间:2016-09-08 12:38:07

标签: javascript

我尝试使用递增的 numberOfFaces 调用相同的函数,但它仅使用之前的值5加载。我究竟做错了什么?我点击左侧的最后一个孩子后,我所要做的就是重复这个功能。

var numberOfFaces = 5;

    function generateFaces() {


        var theRightSide = document.getElementById("rightSide");
        var theLeftSide = document.getElementById("leftSide");

        var theBody = document.getElementsByTagName("body")[0];

        while(numberOfFaces > 0) {
            // CREATING IMG ELEMENTS AND APPENDING THEM TO THE LEFTSIDE DIV
            var img = document.createElement("img");
            img.src = "http://home.cse.ust.hk/~rossiter/mooc/matching_game/smile.png" ;
            img.style.top = Math.floor(Math.random() * 400) +"px";
            img.style.left = Math.floor(Math.random() * 400) +"px";
            theLeftSide.appendChild(img);

            // CLONING THE LEFT SIDE DIV ELEMENTS, REMOVING THE LAST CHILD AND APPENDING THEM TO THE RIGHT CHILD
            var leftSideImages = theLeftSide.cloneNode(true);
            leftSideImages.removeChild(leftSideImages.lastChild);
            theRightSide.appendChild(leftSideImages);
            numberOfFaces--;
        }

        theLeftSide.lastChild.onclick = function nextLevel(event){
            event.stopPropagation();
            while (theLeftSide.firstChild) {
                theLeftSide.removeChild(theLeftSide.firstChild);
            }
            while (theRightSide.firstChild) {
                theRightSide.removeChild(theRightSide.firstChild);
            }   
            numberOfFaces += 5;
            generateFaces(); 
        };

        theBody.onclick = function gameOver(event) {
            alert("Game Over!");
            theBody.onclick = null;
            theLeftSide.lastChild.onclick = null;
        }   
    }

1 个答案:

答案 0 :(得分:0)

下面:

        numberOfFaces += 5;
        generateFaces(); 

您的numberOfFaces值为5,并向其添加5,结果为10。之后你调用generateFaces,它会减少numberOfFaces直到它达到0,生成10个面,然后在下次调用时会根据期望生成5个面。这发生在theLeftSide.lastChild.onclick内,因此您希望代码生成面,并在单击该元素时最后numberOfFaces0。但是,此click处理程序在generateFaces内定义,永远不会被调用,因此永远不会更改numberOfFaces。您需要重构代码。在generateFaces之外定义事件处理程序,之后你应该没问题。