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, время: 21:45. |