2

これは、ボタンクリックで棒人間を動かすことに関する私の以前の質問に関連しています。
新しい問題は、クリックが2つのボタンに同時に送信されることです。

左ボタンと右ボタンはすべて正常に機能します。上と下がめちゃくちゃになります。

HTML

<!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

なぜこうなった ?それを解決する方法は?

4

1 に答える 1

1

識別子topはすでにWebブラウザで使用されており、フレームセットの一番上のウィンドウ(またはフレームがない場合は現在のウィンドウ)を参照します。少なくともChromeでは、上書きすることはできません。ボタン参照用に新しい変数名を選択する必要があります。

作業バージョン: http: //jsbin.com/uzanom/1/edit

于 2013-03-23T15:44:39.807 に答える