jQuery Scroll(), проблема в Опере
$(window).scroll(function () { $("span").slideToggle(); alert('dsf'); }); span выполнит 3 действия, вместо 1 а alert будет выскакивать 6 раз. В Google Chrome такой проблемы нет. Это только у меня такой баг или это проблема оперы? в интернете не нашел ничего по этому багу. P.S. и еще, дайте пожалуйста ссылку на онлайн интерпретатор JS, Jquery, html. Чтобы можно было тестировать код. В документации есть пример с $("span").css("display", "inline").fadeOut("slow"); он и у меня работает нормально, но с другими функциями происходит многократный вызов |
JEEN,
Пробуйте так: var TimeId; $(window).scroll(function () { clearTimeout(TimeId); TimeId=setTimeout(function () { $("span").slideToggle(); alert('dsf'); },10) }); Интересна версия Оперы - у мну в 11.5 - нет подобного |
Цитата:
div с position:fixed; Allert прерывает события - и они могут возникать снова и снова |
Цитата:
|
Опера 12-я
$(window).scroll(function(){ $("span").append('<b>текст</b><br/>'); }); вот этот код вставляет "текст" 17 раз, вместо 1ого |
http://demo.lovetcms.ru/
вот пример сделал. У вас нормально? |
Ну дык на сколько прокрутили - событий то несколько
Вы что думаете что скроллите непрерывно - ? var TimeId; $(window).scroll(function () { clearTimeout(TimeId); TimeId=setTimeout(function () { $("span").append('<b>текст</b><br/>'); },100) }); Вы текст не .append а div.html('<b>текст</b><br/>') Всовывайте - иначе при каждой прокрутке/дерге добавки |
Deff, мне нужно, чтобы текст добавлялся, а не обновлялся, поэтому html не катит.
за 2 косания колесика мыши у меня должно быть так (скриншот с гугл хрома) ![]() а в опере у меня так ![]() |
В конце концов, всегда можно сделать так:
var text = "" $(window).scroll(function(){ text = "<b>текст</b><br/>" }) $("span").append(text) |
Цитата:
|
конечно не работает :) простите
но читать надо вдумчиво, а не просто копировать. Основная идея, надеюсь, понятна? |
1. не нужно всех считать идиотами, я ваш код "обдумывал".
2. идея понятна, но и то она "не рабочая" даже на простом примере, а у меня в результате гораздо сложней будет конструкция, там этот "обход" не прокатит 3. Ваша идея заключалась в том, чтобы функция scroll выполнила 17 раз операцию text = 'текст', а потом один раз вставила ее на страницу. Меня такой костыль вряд ли устроит. вот рабочий пример того что мне нужно http://www.jstoolbox.com/demo/endless/ используется scroll(), но без бага и без костылей. |
в FireFox тоже все нормально. Только опера выполняет команду больше 1 раза..
|
здесь правильнее поступить так: .scroll() должен только менять состояние — пусть это будет переменная, флаг.
А функция подгрузки дополнительных сообщений должна быть подписана на событие изменения состояния этого флага. И тогда вы не зависите от багов различных своеобразных браузеров. |
Цитата:
* отношение количества вызовов к прошедшему времени. или частота вызова, напр. раз в 1 мс. var last = 0; $(window).scroll(function() var now = +new Date; if (now - last > 1) { last = now; // code ... $("span").append('<b>текст</b><br/>'); } } |
ограничивать время, ставить флаги это конечно же можно. Но это костыль, которым я воспользуюсь, если не найду другого решения.
очень много где используется scroll(), но везде работает без багов. Такое ощущение, что только у меня такой косяк. В любом случае, всем спасибо за помощь. |
Цитата:
тем более, если Вы работаете с DOM - будьте готовы к костылям на каждой строке. |
Цитата:
|
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, время: 16:35. |