jQuery Перемещение div с помощью клавиш со стрелками

#javascript #jquery #css #arrow-keys

#javascript #jquery #css #клавиши со стрелками

Вопрос:

Я пытаюсь переместить div с помощью клавиш со стрелками. У меня есть следующий код, который у меня не работает. Вы видите в этом что-то не так. Проверьте jsfiddle на http://jsfiddle.net/N5Ltt/1 /

 $(document).keydown(function(e) {
    switch (e.which) {
    case 37:
        $('div').stop().animate({
            left: '-= 10'
        }); //left arrow key
        break;
    case 38:
        $('div').stop().animate({
            top: '-= 10'
        }); //up arrow key
        break;
    case 39:
        $('div').stop().animate({
            left: ' = 10'
        }); //right arrow key
        break;
    case 40:
        $('div').stop().animate({
            top: ' = 10'
        }); //bottom arrow key
        break;
    }
})
  

Ответ №1:

Вам нужно сделать две вещи:

  1. Ваши <div> потребности position: absolute или ваши свойства top и left ничего не сделают.
  2. jQuery не знает, что '-= 10' означает, но он понимает '-=10' . Возможно, вы захотите пройти весь путь '-=10px' , поскольку это более распространено, но в px этом нет необходимости.

Обновленная скрипка: http://jsfiddle.net/ambiguous/N5Ltt/2 /

Вы видите, что анимация останавливается, когда вы удерживаете нажатой клавишу со стрелкой, потому что вы вызываете .stop каждое нажатие клавиши, и это останавливает анимацию. Анимация работает с использованием таймера и .stop останавливает таймер; если частота повторения клавиатуры выше, чем первая итерация таймера, то анимация не происходит, когда вы удерживаете нажатой клавишу со стрелкой. Вы перемещаетесь только на 10 пикселей за раз, поэтому вы можете просто выполнить прямое неанимированное перемещение на 10 пикселей, используя .css :

 $div.css('left', $div.offset().left - 10);
  

Не анимированная версия: http://jsfiddle.net/ambiguous/N5Ltt/3 /

Комментарии:

1. Отлично, я не знал, что пробел после = влияет на то, как он работает. Одна из проблем, которую я вижу, заключается в том, что если вы нажимаете и удерживаете клавишу со стрелкой вниз или клавишу со стрелкой вправо, окно не продолжает двигаться, когда, как если бы вы нажимали и удерживали клавишу со стрелкой вверх или влево, оно продолжает двигаться, как и должно. Почему это происходит

2. @Pinkie, его jsFiddle отлично работает во всех четырех направлениях для меня.

3. @Sparky672. я тестирую в Chrome. Нажмите и удерживайте клавишу со стрелкой вправо. Div не продолжает двигаться. С другой стороны, если вы нажмете и будете удерживать клавишу со стрелкой влево, div будет продолжать перемещаться влево, пока вы не отпустите клавишу. Возможно, это ошибка, о которой я не знаю.

4. @Pinkie: Проблема с пробелом немного фиктивна, но так оно и работает. Я добавил обновление для проблемы «остановки».

5. @Sparky672: все четыре стрелки работают одинаково для меня, и все они ничего не делают, как только включается повтор клавиатуры, смотрите Мое обновление, пожалуйста.