HTML5的点击同时发送给两个按钮

HTML5 click is sent to two buttons simultaneously

本文关键字:按钮 两个 HTML5      更新时间:2023-09-26

这是关于我之前关于移动简笔画按钮点击的问题。
新的问题是,点击会同时发送到两个按钮。

左按钮和右按钮都可以正常工作。上下都搞砸了。

<!DOCTYPE html>
<html>
<style>
    #stage{
        width: 100px;
        height: 100px;
        position: relative;
        border-style: dashed;
        border-color: gray;
        border-width: medium;
    }
    #actor{
        width: 13px;
        height: 15px;
        position: absolute;
        left: 0;
        top: 0;
        background-image: url("E:/Website Projects/man.PNG");
        -webkit-transition: all 2s ease-out 0s;
        -moz-transition: all 2s ease-out 0s;
        transition: all 2s ease-out 0s;
    }

</style>
<body>
    <div id="stage">
        <div id="actor"></div>
    </div>
    <div>
        <button class="control" id="top">TOP</button> <br>
        <button class="control" id="left">LEFT</button> <button class="control" id="right">RIGHT</button> <br>
        <button class="control" id="down">DOWN</button>
    </div>
</body>
<script>
    var vertical = 0;
    var horizontal = 0;
    var shift = 5;
    var top = document.querySelector("#top");
    var left = document.querySelector("#left");
    var right = document.querySelector("#right");
    var down = document.querySelector("#down");
    top.addEventListener("click",moveTop,false);
    left.addEventListener("click",moveLeft,false);
    right.addEventListener("click",moveRight,false);
    down.addEventListener("click",moveDown,false);
    function moveTop(){
        var actor = document.querySelector("#actor");
        if(vertical>0){
            --vertical;
            actor.style.top = shift*vertical + "px";
            console.log("TOP " + "VERTICAL: " + vertical);
        }
    }
    function moveDown(){
        var actor = document.querySelector("#actor");
        if(vertical<17){
            ++vertical;
            actor.style.top = shift*vertical + "px";
            console.log("DOWN " + "VERTICAL: " + vertical);
        }
    }
    function moveRight(){
        var actor = document.querySelector("#actor");
        if(horizontal<17){
            ++horizontal;
            actor.style.left = shift*horizontal + "px";
            console.log("RIGHT " + "HORIZONTAL: " + horizontal);
        }
    }
    function moveLeft(){
        var actor = document.querySelector("#actor");
        if(horizontal>0){
            --horizontal;
            actor.style.left = shift*horizontal + "px";
            console.log("LEFT " + "HORIZONTAL: " + horizontal);
        }
    }
</script>
</html>  

控制台日志

DOWN VERTICAL: 1 floating%20man.html:71
TOP VERTICAL: 0 floating%20man.html:62    

这是点击down的登录。Top不会工作,因为这就是它的编码方式。Top只有在vertical非零值时才会工作

为什么会发生这种情况?如何解决?

标识符top已经在web浏览器中使用,并且指的是框架集的最顶层窗口(或者当前窗口,如果没有框架)。至少在Chrome上,你不能覆盖它。你必须为你的按钮引用选择一个新的变量名。

工作版本:http://jsbin.com/uzanom/1/edit