Мерцание экрана в опере при прокрутке с помощью .animate .scrollTop()

Вот сайт, над которым я работаю: http://kognitek.nazwa.pl/stockize/mak/MMprodukcja/parallaxProject/stronaTestowa/test.html

Сайт мерцает при прокрутке вниз с помощью клавиш со стрелками в опере. Вот код, который я использую для прокрутки:

//bottom of index.html
else if ($.browser.opera) {

    $(function() {
        $('html').on('keydown', function(event) {
            var keypressed = event.keyCode;
            var curScroll = $('html').scrollTop();
            var keys = scrollKeys.length;
            var moved = false;
            console.log("keypressed: " + keypressed);
            for (i = 0; i < keys; i++) {
                console.log("curScroll: " + curScroll)
                if (moved === false) {
                    if (keypressed === 40 && i != (keys - 1) && parseInt(scrollKeys[i]) <= curScroll && parseInt(scrollKeys[i + 1]) > curScroll) {
                        $('html').animate({
                            scrollTop : (parseInt(scrollKeys[i + 1]))
                        }, 'slow', function() {});
                        console.log('down');
                        moved = true;
                    } else if (keypressed === 38 && i != 0 && parseInt(scrollKeys[i]) >= curScroll && parseInt(scrollKeys[i - 1]) < curScroll) {
                        $('html').animate({
                            scrollTop : (parseInt(scrollKeys[i - 1]))
                        }, 'fast', function(){});
                        console.log('up');
                        moved = true;
                    }
                }
            }
        });
    });

}

Я уже потратил некоторое время, пытаясь исправить это, и до сих пор не могу найти причину такого поведения. Сайт отлично работает в Chrome, Firefox, IE8, IE9. Проблема возникает только в Опере. Я знаю, что получил эту часть кода x3 в конце моего index.html, я собираюсь оптимизировать это, как только найду решение.

Есть идеи, что здесь не так?

Редактировать:

Я создал эту скрипту: http://jsfiddle.net/mymlyn/Mr5vR/ Сначала скрипт вроде нормально, но когда вы достигаете дна и снова пытаетесь подняться, экран начинает мерцать

Редактировать2:

Я думаю, что это предотвращает проблему по умолчанию, работая над этим в банкомате.

РедактироватьX:

Хотелось бы, чтобы я не ошибся при редактировании этого файла, чтобы он не стал вики сообщества... в любом случае, я обновил код, и он доступен здесь: http://cssdeck.com/labs/swayiqbq/2 Он использует .browser, который будет удален из jquery 1.9.


person Community    schedule 12.05.2012    source источник
comment
Разве сценарий не должен действовать при нажатии клавиши вместо нажатия клавиши?   -  person Bergi    schedule 21.05.2012


Ответы (1)


Добавлен код для предотвращения поведения по умолчанию в Opera:

    $(document).keydown(function(e){
    var code = e.keyCode ? e.keyCode : e.which;
    if(code === 40 || code === 38){
        e.preventDefault();
        e.stopPropagation();
        return false;
    }
});

Эффект можно увидеть здесь: http://kognitek.nazwa.pl/stockize/mak/MMprodukcja/parallaxProject/stronaTestowa/test_all.html

Можно прокручивать вниз/вверх, и это работает как положено!

Собираюсь оптимизировать это и сделать фрагмент через несколько дней :)

person Community    schedule 23.05.2012