IE11在覆盖默认的keydown滚动时滚动口吃

时间:2016-10-30 12:13:32

标签: javascript jquery internet-explorer-11

编辑:我正在重塑整个问题。

问题的背景更复杂,但为了简化,假设我想覆盖一些默认的滚动动画

为此,我创建了一个函数filterKeys() - 过滤'滚动键'(PgUp,PgDn,向上和向下箭头等)。我将给你留下一段带有该函数的代码(正如我所说的上下文更复杂)。

// Determines what type of scroll will be done depending on the key pressed.
    function filterKeys(e) {
        // If there's already a key associated with a scrolling animation pressed, or there's an animation running: return without doing anything.
        if (isPressed || isRunning)
            return;

        var keyMatch = false; // It will only call any function if the key pressed matches one of the key codes in the array.
        $.each(keyCodes, function (index, value) {
            if (e.which == keyCodes[index]) {
                keyMatch = true;
                return false; // It's tantamount to a break statement on a regular loop.
            }
        });

        if (keyMatch) {
            e.preventDefault();
            currentKey = e.which;

            switch (e.which) {
            case 40: // Down arrow key.
                animateRegularScroll(e, 'down', 190);
                break;
            case 38: // Up arrow key.
                animateRegularScroll(e, 'up', 190);
                break;
            case 34: // PgDn key.
                animatePageScroll(e, 'down', 190);
                break;
            case 33: // PgUp key.
                animatePageScroll(e, 'up', 190);
                break;
            case 35: // End key.
                animateFullScroll(e, 'down');
                break;
            case 36: // Home key.
                animateFullScroll(e, 'up');
                break;
            case 1: // Primary mouse button.
                if ($(this).hasClass('bottom') || $(this).hasClass('top'))
                    animateRegularScroll(e, $(this).hasClass('bottom') ? 'down' : 'up', 190);
                break;
            case 2: // Middle mouse button.
                animateMMScroll(e);
                break;
            }
        }
    }

现在,除了必须按住向上或向下箭头键的动画之外,动画将会顺利进行。那个人会在IE11中口吃。

一个简化的小提琴(它做得不好,有很多东西丢失,但它有用):https://jsfiddle.net/LLu0esue/15/。 尝试用IE11,你会看到口吃。尝试使用Chrome或Firefox,它会很顺利。

问题是如果我把e.preventDefault()放在filterKeys()的第一行,它也会在IE11上顺利进行。 (和以前一样小提琴,但开头是e.preventDefault():https://jsfiddle.net/LLu0esue/17/)。

显然这种行为是不受欢迎的,因为我会阻止Ctrl + T打开新标签,刷新F5等等。我不希望这样。

关于IE11为何如此表现的任何想法?

0 个答案:

没有答案