2010-06-21 2 views
0

У меня есть шесть опций меню в моем webapp, и когда пользователь наводит курсор на ссылку (ul> li> a), я переключаю изображение, чтобы показать соответствующую фотографию, и я исчезаю изображение в и из. Тем не менее, я заметил, что когда пользователь быстро перемещал свою мышь между ссылками, очередь не обрабатывалась должным образом, и пользователь часто зависал по ссылке и имел старое изображение, отображаемое из предыдущего наведения. После небольшого чтения оказалось, что правильная вещь - использовать метод stop(), но когда я пытаюсь его реализовать, ie6 сообщает о переполнении стека.метод остановки jquery, вызывающий переполнение потока ie6

Вот мой старый код (который имеет старую проблему изображения):

if(webImage != 'img/template/slide_web.png') { 
         $('#slide img').fadeOut(function() { 
          $(this).load(function() {$(this).fadeIn(); }); 
          $(this).attr('src','img/template/slide_web.png'); 
         }); 

А вот мой новый код (который решает старую проблему, но приводит к IE6 к переполнению стека на первой линии):

if(webImage != 'img/template/slide_web.png') { 
         $('#slide img').stop(true, true).fadeOut(function() { 
          $(this).load(function() {$(this).stop(true, true).fadeIn(); }); 
          $(this).attr('src','img/template/slide_web.png'); 
         }); 

Я реализую метод stop() неправильно? Или есть другой способ избежать того, что jQuery увянет очередь от потери своего места?

ответ

0

Проблема эта линия:

$(this).load(function() {$(this).stop(true, true).fadeIn(); }); 

Вы связывание нового.load() обработчика (хотя и та же функция) каждые раз вы гаснуть, так что вы должны либо связать его один раз, вне этой сферы, или .unbind() его, как это:

$(this).unbind('load').load(function() {$(this).stop(true, true).fadeIn(); }); 

Без этого, он пытается запустить эти обработчики нагрузки все сразу, что-то она не может рука le, эффективно, он выполняет .stop(true, true).fadeIn()много раз подряд.

+0

Спасибо, это сделало вещи немного более стабильными, однако теперь я получаю переполнение стека в ie6 всякий раз, когда я «прерываю» затухание одного изображения, начиная другое. Это возвращает меня к мысли о функции stop(). – Nick

+0

На данный момент я только что заменил свой код на этот плагин, отлично работает :) http://www.hieu.co.uk/blog/index.php/imageswitch/ – Nick

+0

@Nick - (Привет, другой Nick!) Это зависит на эффекте, но я думаю, что вам нужно было бы '.stop (true)' в этом случае, а не сначала попробовать и завершить текущую анимацию, что и делает второй аргумент :) –

Смежные вопросы