Интересует возможность перемещения по элементам DIV с помощью клавиатуры (кнопок: вверх, вниз, вправо, влево). К примеру, при нажатии кнопки вниз, мы будем переходить в DIV, который под нами; при нажатии вправо мы будем переходить в соседний DIV справа и так далее. Интересует именно решение на чистом JS.
Заранее спасибо!
onload = function() {
for (var j = 0, cl = document.getElementsByTagName('div'), lg = cl.length; j < lg; j++) cl[j].onclick = myFunc;
};
function myFunc(elem) {
var e = window.event || elem,
obj = e.target || e.srcElement;
console.log(obj.innerText);
obj.style.border = '0.5px solid red';
}
window.addEventListener('keydown', function(event) {
if (event.keyCode == "13") {
console.log("Enter" + this);
} else if (event.keyCode == "37") {
console.log("Left");
} else if (event.keyCode == "38") {
console.log("Up");
} else if (event.keyCode == "39") {
console.log("Right");
} else if (event.keyCode == "40") {
console.log("Down");
}
}, true);
Для сеточного расположения
var cell = document.querySelectorAll('.box-cell'),
cell_active = null;
window.addEventListener('keydown', function(event) {
if (event.keyCode == "13") {
if (cell_active !== null) {
cell[cell_active].classList.remove('box-cell--active');
};
cell_active = 0;
cell[cell_active].classList.add('box-cell--active');
} else if (event.keyCode == "37") {
if (cell_active !== null && cell_active !== 0 && cell_active !== 3 && cell_active !== 6) {
cell[cell_active].classList.remove('box-cell--active');
cell_active = cell_active - 1;
cell[cell_active].classList.add('box-cell--active');
};
} else if (event.keyCode == "38") {
if (cell_active !== null && cell_active !== 0 && cell_active !== 1 && cell_active !== 2) {
cell[cell_active].classList.remove('box-cell--active');
cell_active = cell_active - 3;
cell[cell_active].classList.add('box-cell--active');
};
} else if (event.keyCode == "39") {
if (cell_active !== null && cell_active !== 2 && cell_active !== 5 && cell_active !== 8) {
cell[cell_active].classList.remove('box-cell--active');
cell_active = cell_active + 1;
cell[cell_active].classList.add('box-cell--active');
};
} else if (event.keyCode == "40") {
if (cell_active !== null && cell_active !== 6 && cell_active !== 7 && cell_active !== 8) {
cell[cell_active].classList.remove('box-cell--active');
cell_active = cell_active + 3;
cell[cell_active].classList.add('box-cell--active');
};
}
});
.box {
display: flex;
flex-wrap: wrap;
width: 303px;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
}
.box-cell {
width: 100px;
height: 100px;
border-left: 1px solid #000;
border-top: 1px solid #000;
}
.box-cell--active {
background-color: #000;
}
Для введения нажмите Enter!
<div class="box">
<div class="box-cell"></div>
<div class="box-cell"></div>
<div class="box-cell"></div>
<div class="box-cell"></div>
<div class="box-cell"></div>
<div class="box-cell"></div>
<div class="box-cell"></div>
<div class="box-cell"></div>
<div class="box-cell"></div>
</div>
UPDATE: Реализация с Tab:
window.addEventListener('keydown', function(event) {
if (event.keyCode == "13") {
var div_focus = document.querySelector('.block:focus');
if( div_focus ){
console.log( div_focus.innerHTML );
};
}
});
<p>Выберите кнопкой Tab блок и нажмите Enter</p>
<div class="block" tabindex="0">Текст 1</div>
<div class="block" tabindex="0">Текст 2</div>
<div class="block" tabindex="0">Текст 3</div>
<div class="block" tabindex="0">Текст 4</div>
<div class="block" tabindex="0">Текст 5</div>
<div class="block" tabindex="0">Текст 6</div>
Реализация с помощью кнопок вправо и влево:
window.addEventListener('keydown', function(event) {
var blocks = document.querySelectorAll('.block'),
block_selected = document.querySelector('.block.block--select');
if (event.keyCode == "13") {
console.log( block_selected.innerHTML )
} else if (event.keyCode == "37") {
for(var i = 0; i < blocks.length; i++){
if( blocks[i].classList.contains('block--select') && i !== 0){
blocks[i - 1].classList.add('block--select');
blocks[i].classList.remove('block--select');
break;
};
};
} else if (event.keyCode == "39") {
for(var i = 0; i < blocks.length; i++){
if( blocks[i].classList.contains('block--select') && i !== blocks.length - 1){
blocks[i + 1].classList.add('block--select');
blocks[i].classList.remove('block--select');
break;
};
};
}
});
.block--select {color: red;}
<p>Выберите кнопкой Tab блок и нажмите Enter</p>
<div class="block">Текст 1</div>
<div class="block">Текст 2</div>
<div class="block block--select">Текст 3</div>
<div class="block">Текст 4</div>
<div class="block">Текст 5</div>
<div class="block">Текст 6</div>
Но этот вариант нужно доработать.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Here is the code and i want for example to access the latitudw variable outside of this function and for example set to its value
вот пен codepenio/cache0/pen/JWMNge