задержка масштабирования изображения при наведении курсора мыши, как в Google images

#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:

Это то, что вам нужно:

http://jsfiddle.net/S2svG/48/

Приветствия

Комментарии:

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) через минуту.