JavaScript 游戏 - 如何控制子 div 不移动到其父容器之外

标签 javascript

今天早上我开始构建一个简单的 JavaScript 游戏,我想弄清楚如何控制才能让 div“框”不能移出它的父容器?我的猜测是用一个 if 语句来控制 offsetLeft 和 offsetTop?

Javascript 在这里:

(function () {
    "use strict";

    var box = document.querySelector(".box");

    document.addEventListener("keydown", function (event) {
        var key = event.key;
        var left = box.offsetLeft;
        var top = box.offsetTop;
        var step = 10;

        switch (key) {
            case "ArrowUp":
                event.preventDefault();
                box.style.top = top - step + "px";
                break;
            case "ArrowDown":
                event.preventDefault();
                box.style.top = top + step + "px";
                break;
            case "ArrowLeft":
                event.preventDefault();
                box.style.left = left - step + "px";
                break;
            case "ArrowRight":
                event.preventDefault();
                box.style.left = left + step + "px";
                break;
        }
        console.log(event.key);
    });
    window.console.log("Sandbox is ready!");
})();

此处的 CSS:

h1 {
    text-align: center;
}

h3 {
    color: green;
}

.content {
    border: 1px solid black;
    background-color: #eee;
    padding: 2em;
    margin: 0 auto;
    height: 500px;
    width: 800px;
    border-radius: 30px;
    text-align: center;
}

.box {
  position: absolute;
  height: 100px;
  width: 100px;
  background-color: green;
}

下面的 HTML:

<!DOCTYPE html>
<html>

<head>
    <title>Game</title>
    <meta charset="utf-8" />
    <link rel="stylesheet" type="text/css" href="style/style.css" />
</head>

<body>
    <h1>Simple game</h1>
    <div id="content" class="content">
        <div class="box"></div>
    </div>
    <script src="js/main.js"></script>
</body>
</html>

添加了 CSS 和 HTML 编码。

在这里 fiddle : https://jsfiddle.net/uwp0s9jz/

最佳答案

请看下面的代码。

(function () {
    "use strict";

    var box = document.querySelector(".box");
    var container = document.getElementById('content').getBoundingClientRect()
    var paddingSize = 32
    document.addEventListener("keydown", function (event) {
        var key = event.key;
        var left = box.offsetLeft;
        var top = box.offsetTop;
        var step = 10;

        switch (key) {
            case "ArrowUp":
                event.preventDefault();
                if (top > container.top + paddingSize) {
                    box.style.top = top - step + "px";
                }
                break;
            case "ArrowDown":
                event.preventDefault();
                if (top < container.height - container.x - paddingSize) {
                    box.style.top = top + step + "px";
                }
                break;
            case "ArrowLeft":
                event.preventDefault();
                if (left > container.left + paddingSize) {
                  box.style.left = left - step + "px";
                }
                break;
            case "ArrowRight":
                event.preventDefault();
                if (left < container.width - container.y - paddingSize) {
                  box.style.left = left + step + "px";
                }
                break;
        }
        console.log(event.key);
    });
})();

fiddle here

关于JavaScript 游戏 - 如何控制子 div 不移动到其父容器之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58823463/

相关文章:

javascript - Google Maps API 检查用户是否靠近标记

javascript - 带有超时的 map 加载上的谷歌标记动画

javascript - 当 propTypes 验证失败时强制 ReactJS 抛出真正的错误?

javascript - 正则表达式在多行文本中下一个匹配的开头处停止

javascript - 使用 javascript 漂亮地打印 XML

javascript - 将表情符号列表添加到 HTML 元素,无延迟

javascript - 在 JS 中格式化数字

javascript - 如何通过调用父组件中的函数来更改子组件中的状态?

javascript - jQuery.css ('display' ) 只返回内联

javascript - Nuxt.js 服务器端插件函数不是一个函数