jQuery - 通过 KeyUp/KeyDown 滚动到下一个/上一个部分

标签 jquery scroll anchor keydown keyup

我知道这个问题可能有很多插件,但我想自己做这个,例如我们有 3 个部分,我想当你按下键盘上的 keydown 时滚动跳转到第 2 部分,如果你再次按下滚动跳转到第 3 部分,如果您按向上键,它会返回到第 2 部分,如果再次按则跳转到第 1 部分。我需要这个用于一页网站,并且我想让它支持键盘向上/向下。

function scrollToAnchor(aid){
    var aTag = $("a[name='"+ aid +"']");
    $('html,body').animate({scrollTop: aTag.offset().top},'slow');
}  

$(document).keydown(function (event) {
        if (event.keyCode == 38) {
            event.preventDefault();
            $('.Sections').scrollToAnchor().next();
        } else if (event.keyCode == 40) {
            event.preventDefault();
            $('.Sections').scrollToAnchor().prev();
        }
    });

这是一个 jsFiddle ,我知道有些代码完全错误,所以请忽略它并向我解释我该怎么做。

最佳答案

您的选择器没有返回任何内容,因为缺少 anchor ... 使用此 fiddle 期间检查console.log:http://jsfiddle.net/jFIT/63ynJ/15/

function scrollToAnchor(aid){
 console.log(aid);
 var aTag = $("#"+ aid);
 console.log(aTag);
 console.log(aTag.offset());

 $('html,body').animate({scrollTop: aTag.offset().top},'slow');
}  

控制台中也出现错误,表示无法读取未定义的顶部..因为aTag为空..

更新 当您再次按下键时,它会跳转到下一部分,而不仅仅是第 3 部分。任何解决方案

<强> http://jsfiddle.net/63ynJ/17/

我正在使用 Visible Plugin for JQuery 和 PrevAll/NextAll 选择器来获取 Visible 元素以及该元素的下一个/上一个元素..

$(document).keydown(function (event) {
 console.log(event.keyCode);
 if (event.keyCode == 38) {
    event.preventDefault();
    scrollToPrevious();
 } else if (event.keyCode == 40) {
    event.preventDefault();
    scrollToNext();
 }
});

滚动到上一页

function scrollToPrevious() {
   var prevElement = getCurrentlyVisibleSection().prevAll('section');
   if (prevElement.length > 0) scrollToElement(prevElement);
}

获取当前可见部分

function getCurrentlyVisibleSection() {
    $("#Section1").visible(true);
    var rtn;
    $.each($('section'), function (ind, val) {
        if ($(this).visible(false)) {
            //true here means ALL the element has to be visible.. change to False if you want ANY Part of the item to be visible.. 
            rtn = $(this);
        }
    });
    return rtn;
}

关于jQuery - 通过 KeyUp/KeyDown 滚动到下一个/上一个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22659903/

相关文章:

javascript - Chrome 不返回哈希值

javascript - 包含大量图片的网页 : slow scrolling?

android - 寻找 iScroll 的替代品(iOS/Webkit 上的滚动 Div)

anchor - 是否可以将 Cloud Anchor 保存到本地存储以备后用?

html - 如何防止命名 anchor 引入换行符

html - 填充在 anchor 中不起作用

javascript - "select"元素中选项下拉列表的函数

jquery - SlideToggle 在 IE 9 中停止工作

jquery - append 一个 div,具体取决于选中的单选按钮

javascript - 检测用户在元素内滚动了多少