Использовать setTimeout
легко. Он принимает функцию в качестве первого аргумента - как и многие методы jQuery - и время в миллисекундах в качестве второго.
Я начал с вашего кода и немного изменил его рефакторинг. Первоначально, имелась возможность возникновения состояния гонки, если пользователь наведет курсор мыши на изображение, а затем снова на него, прежде чем таймер сработает. Теперь логика переключения на альтернативное изображение и обратно на оригинал отделена. Обработчик при наведении курсора также замыкается, если изображения уже выгружены. Я также кэширую объект jQuery, возвращаемый $(this)
, для небольшого улучшения скорости (кэширование объектов jQuery - хорошая практика).
Я изменил атрибут hover
на data-hover
(спецификация HTML5 позволяет использовать пользовательские атрибуты, но требует, чтобы они начинались с data-
) и проверил его наличие в селекторе при наведении курсора.
Наконец, я удалил лишнюю ready
оболочку ($(document).ready(function(){…})
и $(function(){…}
одинаковы, не нужно иметь их обоих).
$(function() {
$('.rollover[data-hover]').mouseover(function() {
var $this = $(this), originalImage = $this.attr('src');
if ($this.data('imagesSwapped')) {
return;
}
$this.attr('src', $this.attr('data-hover')).data('imagesSwapped', true);
setTimeout(function(){
$this.attr('src', originalImage).removeData('imagesSwapped');
}, 500);
});
});
Код не был проверен.