Как сделать передвижения div'ов стрелками клавиатуры?

Есть вот такой код, который двигает объект по клику и добавляет класс selected (border dashed):

var $div = $('div');

$div.click(function(){

    $div.addClass('.selected');

    $(document).keydown(function(e) {
    switch (e.which) {
    case 37:
        $div.css('left', $div.offset().left - 10);
        break;
    case 38:
        $div.css('top', $div.offset().top - 10);
        break;
    case 39:
        $div.css('left', $div.offset().left + 10);
        break;
    case 40:
        $div.css('top', $div.offset().top + 10);
        break;
        }
    })

});


Проблема в том, что таких объектов несколько, и мне нужно делать deselect при клике в любую область страницы, или на другой объект для движения.
  • Вопрос задан
  • 5601 просмотр
Решения вопроса 2
@alexesDev
Нельзя так делать, вы при каждом клике создаёте новый обработчик. Это очень фигово.
Вынесите обработку нажатий, обработчик нужно один раз вешать.

var $div;

$(document).keydown(function(e){
    if(!$div) return;
    // ... обработка
});

$('body').click(function(e){
    $div = null;
    return false;
});

$('div').click(function(e){
    $div = $(this);
    return false;
});


jsfiddle.net/Ye8bb/4
Ответ написан
Anonym
@Anonym
Программирую немного )
Вот рабочее решение jsfiddle.net/Ye8bb/5
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
rework
@rework
Помог ответ? В благодарность отметь его решением
Доработал деактивацию выделения, при клике по body, в примере от товарища @alexesDev jsfiddle.net/Ye8bb/3
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы