如何使用箭头键使特定的div移动由单击的按钮指定

问题描述

我有2个div(#1和#2)和两个按钮。当单击一个按钮时,它应该选择一个要移动的div,并且当按下箭头键时,该div应该移动。另一个应保留在原位。如果单击另一个按钮,则先前移动的div应该保持在新位置,新选择的div应该与箭头键一起移动。

.counter {
                border-radius:50%;
                width:20px;
                height:20px;
                position:absolute;
                transition:top linear 0.6s,left linear 0.6s;
                font-size:20px;
                font-weight:bold;
                text-align:center;
                padding:20px;
                top: 525px;
                left: 60px;
                background-color:red;
            }
<button onclick="one">Move One</button>
           <button onclick="two">Move Two</button>
           <div class="counter" id="1" >1</div>
           <div class="counter" id="2">2</div>
 var go = "1"
               function one() {
                   go = "1"
               }
               function two() {
                   go = "2"
               }
document.onkeydown = detectKey;
        function detectKey(e) {
    
        var posLeft = document.getElementById('').offsetLeft
        var posTop = document.getElementById('').offsetTop
        
            if (e.keyCode == '39') {
                if (go === "1") {
        document.getElementById('1').style.left  = (posLeft+150)+"px"
        }  
            if (e.keyCode == '38') {
        document.getElementById('1').style.top  = (posTop-150)+"px"
        }
            }
            
            if (e.keyCode == '39') {
                if (go === "2") {
        document.getElementById('2').style.left  = (posLeft+150)+"px"
        }  
            if (e.keyCode == '38') {
        document.getElementById('2').style.top  = (posTop-150)+"px"
        }
            }
    }

解决方法

这是一个解决方案。我已经编辑了一些值,但是您可以轻松地将它们改回。

const buttonOne = document.getElementById('button-one');
const buttonTwo = document.getElementById('button-two');

const elementOne = document.getElementById('one');
const elementTwo = document.getElementById('two');

buttonOne.addEventListener('click',clickOnButtonOne);
buttonTwo.addEventListener('click',clickOnButtonTwo);

let selectedElement = null;

function clickOnButtonOne() {
  selectedElement = elementOne;
}

function clickOnButtonTwo() {
  selectedElement = elementTwo;
}

document.onkeydown = detectKey;

function detectKey(e) {
  if (selectedElement) {
    if (e.keyCode == '39') {
      var posLeft = selectedElement.offsetLeft
      selectedElement.style.left = (posLeft + 50) + "px"
    }
    if (e.keyCode == '38') {
      var posTop = selectedElement.offsetTop
      selectedElement.style.top = (posTop - 50) + "px"
    }
  }
}
.counter {
  border-radius: 50%;
  width: 20px;
  height: 20px;
  position: absolute;
  transition: top linear 0.6s,left linear 0.6s;
  font-size: 20px;
  font-weight: bold;
  text-align: center;
  padding: 20px;
  top: 500px;
  left: 60px;
  background-color: red;
}
<button id="button-one" onclick="one">Move One</button>
<button id="button-two" onclick="two">Move Two</button>

<div class="counter" id="one">1</div>
<div class="counter" id="two">2</div>