Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery Scroll(), проблема в Опере (https://javascript.ru/forum/jquery/31043-jquery-scroll-problema-v-opere.html)

LittlePony 24.08.2012 15:30

конечно не работает :) простите
но читать надо вдумчиво, а не просто копировать.
Основная идея, надеюсь, понятна?

JEEN 24.08.2012 15:38

1. не нужно всех считать идиотами, я ваш код "обдумывал".
2. идея понятна, но и то она "не рабочая" даже на простом примере, а у меня в результате гораздо сложней будет конструкция, там этот "обход" не прокатит
3. Ваша идея заключалась в том, чтобы функция scroll выполнила 17 раз операцию text = 'текст', а потом один раз вставила ее на страницу. Меня такой костыль вряд ли устроит.

вот рабочий пример того что мне нужно
http://www.jstoolbox.com/demo/endless/
используется scroll(), но без бага и без костылей.

JEEN 24.08.2012 16:00

в FireFox тоже все нормально. Только опера выполняет команду больше 1 раза..

LittlePony 24.08.2012 16:03

здесь правильнее поступить так: .scroll() должен только менять состояние — пусть это будет переменная, флаг.
А функция подгрузки дополнительных сообщений должна быть подписана на событие изменения состояния этого флага.
И тогда вы не зависите от багов различных своеобразных браузеров.

melky 24.08.2012 16:07

Цитата:

Сообщение от JEEN (Сообщение 200276)
в FireFox тоже все нормально. Только опера выполняет команду больше 1 раза..

Вы пробовали как-либо ограничивать скорость вызовов* обработчика ?

* отношение количества вызовов к прошедшему времени. или частота вызова, напр. раз в 1 мс.

var last = 0;

$(window).scroll(function()
    var now = +new Date;
    if (now - last > 1) {
        last = now;
        // code ...
        $("span").append('<b>текст</b><br/>'); 
    }
}

JEEN 24.08.2012 16:23

ограничивать время, ставить флаги это конечно же можно. Но это костыль, которым я воспользуюсь, если не найду другого решения.

очень много где используется scroll(), но везде работает без багов. Такое ощущение, что только у меня такой косяк. В любом случае, всем спасибо за помощь.

melky 24.08.2012 16:24

Цитата:

Сообщение от JEEN
Но это костыль

это один из путей увеличения производительности - ибо это событие при прокрутке вызывается очень часто, и если в обработчике что-то отрисовывается на странице (имитация position:fixed сюда же), то будет нехило тормозить.

тем более, если Вы работаете с DOM - будьте готовы к костылям на каждой строке.

LittlePony 24.08.2012 16:33

Цитата:

Сообщение от JEEN (Сообщение 200286)
Но это костыль

нет, это не костыль. Это разграничение сущностей.

JEEN 24.08.2012 16:40

melky, вы меня убедили, спасибо за объяснение.

сделал так
var scrollTimer = null;
$(window).scroll(function () {
    if (scrollTimer) {
        clearTimeout(scrollTimer);
    }
    scrollTimer = setTimeout(handleScroll, 500);
});


});
function handleScroll() {
    scrollTimer = null;
    $("span").append('<b>текст</b><br/>');  
}


и наконец-то нашел этот сервис http://jsfiddle.net/akaAU/10/

всем спасибо!


Часовой пояс GMT +3, время: 03:27.