Прокрутка при использовании html5 перетаскивания

Я просто обнаружил, что при использовании перетаскивания HTML5 - попытка использовать колесико мыши или коврик для мыши для прокрутки страницы не будет работать, и слушатели для события onmousewheel не получат вызов.

В качестве примера см. здесь: http://jsfiddle.net/92u6K/2/

JQuery

 var $dragging = null;
    $('.item').bind('dragstart', function(e) {
        $dragging = $(e.currentTarget)
    });

    $('.item').bind('dragover', function(e) {
        e.preventDefault();
        e.stopPropagation();
    });

    $('.item').bind('drop', function(e) {
        e.preventDefault();
        e.stopPropagation();

        $dragging.unbind();
        $dragging.insertBefore($(e.currentTarget));
    });

(Пример показывает 20 разделов с полосой прокрутки, чтобы вы могли попробовать      перетаскивая элемент и одновременно прокручивая экран)

Я обнаружил, что в FireFox уже несколько лет появляется ошибка: https://bugzilla.mozilla.org/show_bug.cgi?id=41708

И кто-то создал расширение для поддержки этого поведения: https://addons.mozilla.org/en-US/firefox/addon/drag-to-scroll-reloaded/

Я не мог найти подобную ошибку в Chrome. Есть ли решение для этого, которое работает и в Chrome?

Изменить. Это работает в Safari, поэтому поведение существует в Chrome и Firefox.

Ответ 1

Как пояснил @howderek в своем комментарии, перетаскивание div в нижнюю часть страницы будет автоматически прокручивать страницу.

Но вы можете использовать плагин jQuery под названием jQueryDndPageScroll. Реализация его на вашей веб-странице так же просто добавляет эти строки в ваш код:

<script type="text/javascript" src="/js/jquery.dnd_page_scroll.js"></script>

<script type="text/javascript">
 $(document).ready(function() {
   $().dndPageScroll();
  });
</script>

Этот плагин является открытым исходным кодом. Итак, вы можете видеть, что происходит под капотом.

В качестве альтернативы вы можете предложить W3C встретиться с этим кросс-браузером. Начните здесь https://discourse.wicg.io/. Вы можете начать форум там, и если этот форум привлечет большое внимание, W3C может сделать его стандартным для всех браузеров. См. этот вопрос для получения дополнительной информации.

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

Ответ 2

Я считаю, что это может быть решением этой проблемы. На этой fooobar.com/questions/409468/... у вас есть ответ с JSfiddle, и вы можете перетащить и прокручивать одновременно.

Когда вы перетаскиваете элемент, вы можете прокручивать страницу, перемещая мышь на верхнюю или нижнюю страницу для автоматического прокрутки, или вы можете одновременно перетаскивать и поворачивать колесико мыши.

Ответ 3

Я думаю, что добавление этого поможет

$(document).keydown(function(e) {
switch(e.which) {
    case 37: // left
    break;

    case 38: // up
    break;

    case 39: // right
    break;

    case 40: // down
    break;

    default: return; // exit this handler for other keys
}
e.preventDefault();
});

Это даст ему функцию перетаскивания на основе клавиши со стрелкой