如何使用向下和下一个箭头键更改键盘导航?

How change keyboard navigation with down and next arrow key?

我想在我的 FancyBox 中更改向下键的行为而不更改下一个键的行为。

右 > 下一张

向下 > 第三张图片(表示 "next" x 2)

可能吗?感谢您的帮助。

您可以通过挂接到 FancyBox public 方法来手动添加此功能:

$(document).on('keyup', function(e) {  
    switch(e.keyCode)
    {
        // The down arrow == 40:
        case 40:
            $.fancybox.jumpto(2);
            break;
    }
});

fancybox.jumpto() 函数将显示指定索引处的项目(在本例中为第三个项目)。您可以进一步了解 FancyBox public 方法 here.

我需要承认这可能是一个非常笼统的 jQuery 答案,但对于任何对替代方法感兴趣的人,这里是代码:

$(document).keydown(function(e) {
    if ($(".fancybox").length == 0) return;/* check if element exists; */
    if (e.keyCode == 40){                  /* 40 = down key */
        e.preventDefault();
        var e = jQuery.Event("keydown");   /* get a template event object */
        e.which = 39;                      /* Change it to "right key" */ 
        $(document).keydown(e);            /* Trigger the event two times */
        $(document).keydown(e);
    }
});

应该注意,如果要停止该功能,使用 length 属性 需要完全删除 DOM 中的元素。另一种方法是使用 $(".fancybox") 作为选择器;但是,这将要求该元素在上述代码运行之前就已经存在。

首先,您可能需要使用 API 选项 keys 重新分配 箭头键 行为,例如:

keys: {
    next: {
        13: "left", // enter
        34: "up", // page down
        39: "left", // right arrow
        // 40: "up" // disable down key
    },
    prev: {
        8: "right", // backspace
        33: "down", // page up
        37: "right", // left arrow
        38: "down" // up arrow
    },
    close: [27], // escape key
    play: [32], // space - start/stop slideshow
    toggle: [70] // letter "f" - toggle fullscreen
}

注意我们在API选项

中注释掉了下键(40)
// 40: "up" // disable down key

...所以 fancybox 不会绑定任何事件

然后,我们可以 bind keydown eventbeforeShow fancybox 中的向下箭头回调(我们可以在关闭 fancybox 后将其关闭)以从图库的 current 元素前进 2 个位置。我们将使用 fancybox $.fancybox.jumpto() 方法,但传递当前参数而不是像 :

这样的硬编码 index
jQuery(document).ready(function ($) {
    $(".fancybox").fancybox({
        // API options
        keys: {
            next: {
                13: "left", // enter
                34: "up", // page down
                39: "left", // right arrow
                // 40: "up" // disable down key
            },
            prev: {
                8: "right", // backspace
                33: "down", // page up
                37: "right", // left arrow
                38: "down" // up arrow
            },
            close: [27], // escape key
            play: [32], // space - start/stop slideshow
            toggle: [70] // letter "f" - toggle fullscreen
        },
        beforeShow: function () {
            $(document).on("keydown", function (e) {
                e.preventDefault();
                var code = e.which || e.keyCode;
                if (code == 40) {
                    // advance to the third image from the current
                    $.fancybox.jumpto($.fancybox.current.index + 2)
                }
            });
        },
        afterClose: function () {
            // unbind the keydown event
            $(document).off("keydown")
        }
    }); // fancybox
}); // ready