javascript - 在 jquery、Chrome 和 IE 中使用 UP/DOWN 键时停止元素滚动?

标签 javascript jquery html

我有以下 JavaScript 代码,可以使用向上或向下键导航到下一个/上一个元素:

$(function(){
    var $p = $(".test p");

    $(document).on("keydown", function(e) {
        var $elementToBeSelected = $p.filter(function() { return $(this).hasClass("active"); }).first();
        if(!$elementToBeSelected.length){
            $elementToBeSelected = $p.first();
        }

        $p.removeClass("active");

        // if is down
       if(e.which ===  40){
           if($elementToBeSelected.next().length){
              $elementToBeSelected = $elementToBeSelected.next();   
           }
       } else {
           if($elementToBeSelected.prev().length){
              $elementToBeSelected = $elementToBeSelected.prev();   
           }          
       }

        $elementToBeSelected.addClass("active");
        $(".test").scrollTo($elementToBeSelected, 200);
    });
});

和 HTML 部分:

<div class="test">
    <p>asdasdasdada</p>
    <p>asdasdasdada</p>
    <p>asdasdasdada</p>
    <p>asdasdasdada</p>
    <p>asdasdasdada</p>
    <p>asdasdasdada</p>
    <p>asdasdasdada</p>
    <p>asdasdasdada</p>
    <p>asdasdasdada</p>
</div>
<div>
    <p>dasdasdasd</p>
</div>

或者更好,请参阅:http://jsfiddle.net/4u81tgmd/

在 Firefox 中,当单击容器(有段落)内部并向上/向下导航时,看起来不错。

在 Chrome 中,滚动条会出现一些闪烁。

当您单击带有段落的 div 内部并尝试按向上/向下键时,就会发生这种情况,浏览器会根据您按下的键自动移动您。

如何预防?如何仅使用您单击该容器的 scrollTo 事件在所有浏览器中工作?

最佳答案

使用 e.preventDefault()

MDN Refenrence :

Event.preventDefault() Cancels the event if it is cancelable, without stopping further propagation of the event.

working example

$(function(){
    var $p = $(".test p");

    $(document).on("keydown", function(e) {
        e.preventDefault()

        var $elementToBeSelected = $p.filter(function() { return $(this).hasClass("active"); }).first();
        if(!$elementToBeSelected.length){
            $elementToBeSelected = $p.first();
        }

        $p.removeClass("active");

        // if is down
       if(e.which ===  40){
           if($elementToBeSelected.next().length){
              $elementToBeSelected = $elementToBeSelected.next();   
           }
       } else {
           if($elementToBeSelected.prev().length){
              $elementToBeSelected = $elementToBeSelected.prev();   
           }          
       }

        $elementToBeSelected.addClass("active");
        $(".test").scrollTo($elementToBeSelected, 200);
    });
});

关于javascript - 在 jquery、Chrome 和 IE 中使用 UP/DOWN 键时停止元素滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32440499/

相关文章:

php - 如何使用php获取同一页面中的输入数据

javascript - 禁用选择列表中具有相同类名的多个特定选项

jquery - 如何使用 jQuery 调用具有多个非不同 URL 参数的 servlet?

jquery - 将变量传递到 :contains selector

javascript - 如何检查是否在文本区域中用 'enter' 键按下了 'shift' 键

html - 触发自动换行 : break-word in CSS

html - 菜单 - 样式 ul/li 的宽度取决于文本长度

javascript - 为什么第二次点击按钮后会出现 fancybox 弹出窗口?

JavaScript,深度扩展

javascript - 如何将我的图书目录中的一系列图书分配给它们各自的作者?