javascript - 将子元素添加到元素时的事件触发器

标签 javascript html

我正在创建一个简单的迷宫游戏。当用户到达终点线时,我希望触发一个事件,以便停止计时器并显示排行榜等。迷宫的工作方式是向每个迷宫添加一个子元素(图像)当用户单击键盘方向箭头时出现框,如下所示:

<div class="box box36" id="box-36">
    <img class="character-img character-box" src="' + chosenCharacter + '">
</div>

移动位置时,前一个玩家位置的子图像将被删除。从而创建 Angular 色在迷宫中移动的动画。

上面的方框(方框 36)是迷宫内的终点线。我认为我需要为此使用某种事件监听器,但是查看了事件监听器的完整列表后,我无法弄清楚要使用哪一个,或者这是否确实是正确的方法。

我尝试创建一个简单的 if 语句来测试 box-36 是否包含具有图像 src 的子项,但结果是当用户到达终点线时没有任何反应(没有任何内容打印到控制台上)测试)。我还尝试过测试当前玩家位置是否等于终点线位置。仍然没有任何反应,控制台上也没有打印任何内容。我将在下面添加 JS 代码。

这是 JavaScript 代码:

 playerFinished: (currentPos) => {
            if (currentPos === "36" || currentPos === 36) {
                console.log("finished");
}

这里是它的名称:

playerCtrl.playerFinished(currentPos);

这是 currentPos 的来源:

    currentPos = naviCtrl.currentPosition(DOMstrings.boxes, DOMstrings);

这是 currentPostion 的来源:

currentPosition: (boxes) => {
            let playerPosition = document.querySelector(DOMstrings.boxOne);
            let res = null;
            boxes.forEach((curr) => {
                if (typeof curr.children[0] !== 'undefined' && curr.children[0]) {
                    splitID = curr.id.split('-');
                    res = splitID[1];
                    return;
                }
            });
            return res;

上面的 currentPosition 方法在我的 html 代码中创建了一个框数组,然后测试其中哪一个具有子元素( Angular 色的图像)。然后,它获取该 ID 并将其拆分,只留下盒子的编号(即 36)

最佳答案

所以事实证明,playerFinished 函数上没有满足条件的原因是因为该方法在页面加载时立即执行,因此,显然条件没有得到满足,因为玩家的位置没有满足在终点位置(事后看来非常明显)。

我现在已将playerFinished函数添加到方向键事件监听器中,以便当用户单击方向键盘键时,如果玩家位置位于结束位置,则将调用playerFinished函数。

这是代码:

playerFinished: (currentPos) => {
            if (document.querySelector(DOMstrings.characterImg).parentNode.id === 36 || document.querySelector(DOMstrings.characterImg).parentNode.id === "box-36") {

                console.log("finished");
            }
        }, 


document.addEventListener("keydown", moveCharacter = (e) => {
                    let currentPos = naviCtrl.currentPosition(DOMstrings.boxes, DOMstrings);
                    document.querySelector(DOMstrings.timer).innerHTML = "";

                    const key_code = e.which || e.keyCode;
                    switch (key_code) {
                        case 37: //left arrow key
                            naviCtrl.moveLeft(currentPos, chosenCharacter);
                            playerCtrl.playerFinished();
                            break;
                        case 38: //Up arrow key
                            naviCtrl.moveUp(currentPos, chosenCharacter);
                            playerCtrl.playerFinished();
                            break;
                        case 39: //right arrow key
                            naviCtrl.moveRight(currentPos, chosenCharacter);
                            playerCtrl.playerFinished();
                            break;
                        case 40: //down arrow key
                            naviCtrl.moveDown(currentPos, chosenCharacter);
                            playerCtrl.playerFinished();
                            break;
                    }
                });

关于javascript - 将子元素添加到元素时的事件触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58843536/

相关文章:

javascript - 元素宽度沿一个方向减小

javascript - 如果 <td> 不包含 &lt;input&gt; 的值,则删除 <tr>

javascript - jquery 移动更改为下一个和上一个 data-role=page

javascript - document.getElementById.onClick 不起作用(Javascript)

javascript - 从另一个组件 react 更新组件

Python。替换 html 标签之间的文本

javascript - 用破折号替换特殊字符

javascript - Socketcan 注册监听器未被调用

javascript - 如何在 pickdate 调用时添加条件?

javascript - 将 Raphael.js 文件保存为/从文本加载