我有一个基本的javascript / html桌游,由两个玩家在一个屏幕上玩。当玩家1结束转弯时,我希望隐藏他们的棋盘,并弹出警告消息,询问玩家2是否准备好转弯。然后,player2的面板变为可见。我尝试了很多事情,但无法正常工作。

var hide = false;
displayBoard(player1);

function displayBoard(player){

for (i = 0; i < boardSize + 1; i++) {
    for (j = 0; j < boardSize + 1; j++) {

        var gameSquare = document.createElement("div");
        var squareText = document.createElement("span");
        squareText.textContent = boardArray[j][i];


        if(hide){
            gameSquare.style.visibility = 'hidden';
            squareText.style.visibility = 'hidden';
        }

        gameSquare.appendChild(squareText)
        boardContainer.appendChild(gameSquare);

        var topPosition = j * squareSize;
        var leftPosition = i * squareSize;

        gameSquare.style.top = topPosition + 'px';
        gameSquare.style.left = leftPosition + 'px';
    }
}
function fire(){ //This happens when a player clicks on the board

    event = event || window.event;
    var source = event.target || event.srcElement;
    //a bunch of game logic, changing up arrays

    //end of player's turn
    hide = true; //I want to hide the board until the next player starts
    displayBoard(thisPlayer); //To update the board being hidden
    window.alert("press okay to begin " + nextPlayer + "'s turn");
    hide = false;
    displayBoard(nextPlayer);
}


当我这样做时,可见性在html DOM中不会改变。

我还尝试将可见性设置为隐藏在fire()函数中,该方法不起作用。我尝试将boardContainer的所有子级都设置为隐藏。我尝试在大部分displayBoard函数之前,之中和之后进行所有这些操作。我尝试禁用缓存。我尝试将显示设置为无。我试过在displayBoard()之后添加等待时间。

正确的方法是什么?

我也不允许将JQuery用于此FYI。

编辑:不是遍历元素,而是将其添加到displayBoard()的开头:

 if (hide){
    boardContainer.style.visibility = "hidden";
    opposingBoardContainer.style.visibility = "hidden";
} else{
    boardContainer.style.visibility = "visible";
    opposingBoardContainer.style.visibility = "visible";
}


这样的结果是,如果我消除else块,则该板在第一回合结束后便消失了。如果我将else块留在里面,似乎没有任何变化。因此,我怀疑它正在消失并很快返回,以至于我无法告诉,而不是消失并等待警报窗口,就像我想要的那样。有什么想法吗?

最佳答案

这样的结果是,如果我消除else块,则该板在第一回合结束后便消失了。如果我将else块留在里面,似乎没有任何变化。因此,我怀疑它正在消失并很快返回,以至于我无法告诉,而不是消失并等待警报窗口,就像我想要的那样。有什么想法吗?


hide = true; //I want to hide the board until the next player starts
displayBoard(thisPlayer); //To update the board being hidden
window.alert("press okay to begin " + nextPlayer + "'s turn");
hide = false;
displayBoard(nextPlayer);


因此,基本上,这里发生的是当您调用Alert时,DOM尚未再次呈现,因此当警报触发并阻止其余代码执行时,您的面板仍然在那儿。

因此,当您单击“确定”时,可能会发生两件事。


它使电路板不可见,然后执行displayBoard使其立即再次变为可见。
它在渲染之前再次执行displayBoard,然后在下次渲染时将可见,因此什么也没有发生。


无论哪种方式,您都需要更改处理转弯的方式,以使其不依赖警报来阻止执行。

10-01 02:12