#javascript #html #function #position #keycode
#javascript #HTML #функция #позиция #код ключа
Вопрос:
У меня есть div, который перемещается при нажатии клавиш со стрелками. Если div достигает определенной позиции, полученной по координатам, на экране, я хочу запустить функцию, изменив innerHTML div. Какой простой для понимания способ сделать это?
<div class="counter" id="yellow">P1</div>
<div id="div"></div>
document.onkeydown = detectKey;
function detectKey(e) {
if (selectedElement) {
if (e.keyCode == '39') {
var posLeft = selectedElement.offsetLeft
selectedElement.style.left = (posLeft 150) "px"
}
if (e.keyCode == '38') {
var posTop = selectedElement.offsetTop
selectedElement.style.top = (posTop - 150) "px"
}
if (e.keyCode == '37') {
var posLeft = selectedElement.offsetLeft
selectedElement.style.left = (posLeft - 150) "px"
}
if (e.keyCode == '40') {
var posTop = selectedElement.offsetTop
selectedElement.style.top = (posTop 150) "px"
}
}
}
if (document.getElementById("yellow").position = x = 89, y = 273) {
document.getElementById("div").innerHTML = "Made it!"
}
Ответ №1:
Ниже приведен некоторый код в качестве примера. Первое главное, что для атрибута стиля позиции элемента должно быть установлено значение absolute . Затем мы можем использовать атрибуты стиля left и right для изменения позиции. Для проверки позиции вы можете использовать .getBoundingClientRect(); который выдает прямоугольник. Затем мы используем верхнюю часть как y, а левую — как y. Теперь в моем примере я использую некоторые фиктивные значения, но если вы хотите запустить его, переместите его вниз один раз, ofc вы можете изменить значения в операторе if, чтобы он запускался там, где вы хотите.
<div class="counter" id="yellow" style="position:absolute">P1</div>
<div id="div"></div>
<script>
let selectedElement = document.getElementById("yellow")
document.onkeydown = detectKey;
function detectKey(e) {
if (selectedElement) {
console.log(e.keyCode)
if (e.keyCode == '39') {
console.log('here')
var posLeft = selectedElement.offsetLeft
selectedElement.style.left = (posLeft 150) "px"
}
if (e.keyCode == '38') {
var posTop = selectedElement.offsetTop
selectedElement.style.top = (posTop - 150) "px"
}
if (e.keyCode == '37') {
var posLeft = selectedElement.offsetLeft
selectedElement.style.left = (posLeft - 150) "px"
}
if (e.keyCode == '40') {
var posTop = selectedElement.offsetTop
selectedElement.style.top = (posTop 150) "px"
}
let pos = selectedElement.getBoundingClientRect();
let y = pos.top
let x = pos.left
console.log(x)
console.log(y)
// put your own values or ranges here
if (x < 100 amp;amp; y > 100) {
document.getElementById("div").innerHTML = "Made it!"
}
}
}
</script>
Комментарии:
1. Спасибо за ваш ответ! Что означает «e» в скобке для функции detectKey(e)?
2. @FranciscaRiosDurkin e является объектом события, событие содержит код ключа (например, keyCode), который является нажатым символом (вы можете проверить коды клавиш здесь: keycode.info ) (кстати, это было просто скопировано с вашего кода tbh)