17

我刚刚发现,当使用 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 个带有滚动条的 div,因此您可以尝试拖动项目并尝试同时滚动屏幕)

我发现几年前 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 中。

4

2 回答 2

3

正如@howderek 在他的评论中所说,将 拖到div页面底部将自动滚动页面。

但是您可以使用一个名为jQueryDndPageScroll 的 jQuery 插件。在您的网页中实现它就像将这些行添加到您的代码中一样简单:

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

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

这个插件是开源的。所以你可以看到引擎盖下发生了什么。

或者,您可以建议W3C开会以制作此跨浏览器。从这里开始https://discourse.wigg.io/。您可以在那里创建一个论坛,如果该论坛获得大量关注,W3C可以使其成为所有浏览器的标准。有关更多信息,请参阅此问题

最后一个选项是一个非常漫长的过程,并且不能保证您的建议将作为标准实施。但是,如果你清楚地陈述你的问题并引起别人的注意,那么成功的可能性很大。

于 2015-09-25T01:15:15.057 回答
-6

我认为添加这个会有所帮助

$(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();
});

这将赋予它基于按下的箭头键拖动的功能

于 2016-03-13T06:51:55.457 回答