#javascript #jquery #hover #zooming #delay
#javascript #jquery #наведите #масштабирование #задержка
Вопрос:
В js есть код, который я написал из одного видеоурока, но перед анимацией задержки нет. Я перепробовал много методов с delay() и setTimeout(), но не получил необходимого результата…
Если бы кто-нибудь мог мне помочь? пожалуйста, сделайте это 🙂
Я буду очень признателен за это.
Вот код с возможностью редактирования и запуска в режиме онлайн: http://jsfiddle.net/S2svG /
И вот этот js-код:
$(function(){
$.fn.popOut=function(user_opts){
return this.each(function(){
var opts=$.extend({
useId:"poppedOut",
padding:20,
border:0,
speed:200
},user_opts);
$(this).mouseover(function(){
// kill any instance of this already
$("#" opts.useId).remove();
// make a copy of the hovered guy
var $div=$(this).clone();
// setup for prelim stuff
$div.css({
"position":"absolute",
"border":opts.border,
"top":$(this).offset().top,
"left":$(this).offset().left,
"-moz-box-shadow":"0px 0px 12px black",
"-webkit-box-shadow":"0px 0px 12px black",
"z-index":"99"
});
// store all of the old props so it can be animate back
$div.attr("id",opts.useId)
.attr("oldWidth",$(this).width())
.attr("oldHeight",$(this).height())
.attr("oldTop",$(this).offset().top)
.attr("oldLeft",$(this).offset().left)
.attr("oldPadding",$(this).css("padding"));
// put this guy on the page
$("body").prepend($div);
// animate the div outward
$div.animate({
"top":$(this).offset().top-Math.abs($(this).height()-opts.height),
"left":$(this).offset().left-opts.padding,
"height":opts.height,
"padding":opts.padding
},opts.speed);
// loop through each selector and animate it to its css object
for(var eachSelector in opts.selectors){
var selectorObject=opts.selectors[eachSelector];
for(var jquerySelector in selectorObject){
var cssObject=selectorObject[jquerySelector];
$div.find(jquerySelector).animate(cssObject,opts.speed);
}
}
$div.mouseleave(function(){
$("#" opts.useId).animate({
width:$(this).attr("oldWidth"),
height:$(this).attr("oldHeight"),
top:$(this).attr("oldTop"),
left:$(this).attr("oldLeft"),
padding:$(this).attr("oldPadding")
},0,function(){
$(this).remove();
});
});
});
});
};
$(".productBox").popOut({
height:300,
border:"1px solid #333",
selectors:[{
".productDescription":{
height:150
}
}]
});
});
Комментарии:
1. Какой результат вы получаете с помощью delay()? Выполняет ли это задержку, но не отменяется при перемещении мыши или что-то в этом роде?
2. Он сказал: «но перед анимацией задержки нет»:-)
Ответ №1:
Комментарии:
1. Да, похоже на то, что я хочу, за исключением одной маленькой детали: при наведении курсора мыши перед масштабированием изображение все равно увеличивается. Вот это видео: youtube.com/watch?v=cngMj-pyr3U
2. Я только что отредактировал свой ответ, новую скрипку, добавил строку кода, которая прерывает анимацию -> $ div.stop().animate();
3. Если ты будешь на Евро-2012 в Киеве (Украина), я угощу тебя варениками и борщом, и если хочешь нашей водки)))
Ответ №2:
Если вам нужна задержка между событием наведения курсора мыши и анимацией, вы можете взглянуть на плагин hoverIntent jQuery:
hoverIntent — это плагин, который пытается определить намерения пользователя… как хрустальный шар, только с движением мыши! Он работает как (и был получен из) встроенного в jQuery hover. Однако вместо немедленного вызова функции onMouseOver она ожидает, пока мышь пользователя не замедлится достаточно, прежде чем выполнить вызов.
Сказав это, вы можете захотеть взглянуть на jQuery.delay()
. Демонстрация здесь.
Комментарии:
1. Та же проблема, что и выше: похоже на то, что я хочу, за исключением одной маленькой детали: при наведении курсора мыши перед масштабированием изображение все равно увеличивается. Вот это видео: youtube.com/watch?v=cngMj-pyr3U
2. Я бы не рекомендовал дополнительный плагин, маленький, но все же 1,4K для чего-то простого, что вы хотите
3. @Sylvio: ты прав. Я добавил альтернативный метод несколько минут назад.
4. но как исправить проблему с масштабированием при наведении курсора мыши до 1 секунды??? youtube.com/watch?v=cngMj-pyr3U
5. @Vitali: Я думаю, это так же просто, как добавить
.stop()
, где это необходимо. Проверьте обновленный fiddle (редакция 54) через минуту.