Ответ 1
Попробуйте следующее:
$(".pressimage img").mouseleave( function(){
var that = this;
setTimeout( function(){
$(that).css('z-index','1');
},500);
});
Как я могу отложить изменение CSS в jquery? Вот мой код:
$("document").ready(function() {
$(".pressimage img").mouseenter(function() {
$jq(this).css('z-index','1000');
});
$(".pressimage img").mouseleave(1000,function() {
$jq(this).css('z-index','1');
});
});
Мне нужно, чтобы функция mouseleave имела место около 1/2 секунды после ухода мыши.
Я использую какой-либо другой jquery, чтобы сделать изображения расширяющимися при наведении курсора мыши. Когда они расширяются, они покрывают друг друга, поэтому мне нужно, чтобы z-индекс анимированного изображения был выше, чем другой. Затем, когда мышь оставляет z-индекс, он должен вернуться в нормальное состояние.
Приведенный выше код работает, за исключением того, что z-index изменяется, как только мышь уходит, поэтому анимация не успевает закончить. Поэтому мне нужно немного отложить функцию mouseleave. Благодаря
ОБНОВЛЕНИЕ
Вот мой сайт: http://smartpeopletalkfast.co.uk/ppr6/press
Ive поместил мой код в голову:
$jq("document").ready(function() {
$jq(".pressimage img").mouseenter(function() {
$jq(this).css('z-index','100');
});
$jq(".pressimage img").mouseleave(function() {
$jq(this).css('z-index','1');
});
});
Этот код работает нормально, но не имеет никакой задержки. Если вы наведите курсор на верхнее левое изображение, оно отлично работает, но как только вы отключаете его, оно идет за изображение под ним. Благодаря
Попробуйте следующее:
$(".pressimage img").mouseleave( function(){
var that = this;
setTimeout( function(){
$(that).css('z-index','1');
},500);
});
Задержка работает только с элементами в очереди, поэтому вам нужно добавить изменение css в очередь для задержки на работу. Затем разложите. Следующий код иллюстрирует это:
$('.pressimage img')
.delay(1000)
.queue(function(){
$(this).css({'z-index','1'});
$(this).dequeue();
});
Обратите внимание, что решение sanon выше является более естественным, чем это, потому что оно использует метод jQuery .queue
вместо злоупотребления .animate
для той же цели.
Оригинальный ответ ниже:
setTimeout - самый естественный способ, но если вы хотите остаться в своей функциональной цепочке jQuery, вы можете использовать функцию анимации с длительностью 0.
Пример:
$("img").delay(1000).animate({'z-index': 1000},0)
Если вы хотите сделать что-либо еще, кроме числовых изменений css, тогда вам нужно создать функцию, но это все равно может произойти внутри этого вызова анимации:
$("img").delay(1000).animate({zoom:1},0,function(){$(this).src('otherImage.png');})
Я просто помещаю этот масштаб: 1 там, потому что, если вы укажете пустой объект {} там, он не считается реальным эффектом, поэтому не идет в очередь на эффекты, поэтому немедленно выполняет полную функцию.
Вы можете сделать это с помощью setTimeout();
$("document").ready(function() {
var timer;
$(".pressimage img").mouseenter(function() {
$jq(this).css('z-index','1000');
clearTimeout(timer);
});
$(".pressimage img").mouseleave(1000,function() {
timer = setTimeout(function(){
$jq(this).css('z-index','1');
}, 500);
});
});
Код в setTimeout (код, задержка) выполняется после задержки миллисекунд. У вас могут быть проблемы с непреднамеренными изменениями, если вы слишком быстро перемещаете мышь, поэтому я очистил действие таймаута на mouseenter().
$("document").ready(function() {
$(".pressimage img").mouseenter(function() {
$jq(this).css('z-index','1000');
});
$(".pressimage img").mouseleave(1000,function() {
$jq(this).delay(500).css('z-index','1');
});
});
Это работает?:)
http://jsfiddle.net/loktar/yK5ga/
Убедитесь, что я выполняю то, что я делаю, назначая тайм-аут переменной, а затем очищая ее при наведении курсора мыши, поэтому она не будет стрелять, если вы быстро нажмете мышь.
$("document").ready(function() {
var imgTimeout;
$("img").hover(
function() {
clearTimeout(imgTimeout);
$(this).css('z-index','1000');
},
function() {
var element = $(this);
imgTimeout = setTimeout(function(){element.css('z-index','1');}, 1000);
});
});
Попробуйте следующее.
jQuery.fn.extend({
qcss: function(map){
$(this).queue(function(next){
$(this).css(map);
next();
});
return this;
}
});
http://forum.jquery.com/topic/delay-css
проверен и работает для моей цели отсрочить свойство css после анимации.