javascript - 暂停动画 2 秒,然后在 jQuery 中自动恢复它(不是在鼠标悬停或鼠标移出时)?

标签 javascript jquery asp.net-mvc ajax animation

我有一个在 jQuery 中的滚动图像,它滚动并且客户端的 Logo 出现在滚动框中并且它不停地滚动。 我可以提高和降低速度。但是对于暂停然后在 2 秒内恢复动画,我无法做到我想要的。 这是我下载源代码的链接 http://net.tutsplus.com/tutorials/javascript-ajax/building-a-jquery-image-scroller/

                **The code in html file**
    <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
    <script type="text/javascript">
        $(function() {

          //remove js-disabled class
            $("#viewer").removeClass("js-disabled");

          //create new container for images
            $("<div>").attr("id", "container").css({ position:"absolute"}).width($(".wrapper").length * 170).height(170).appendTo("div#viewer");

            //add images to container
            $(".wrapper").each(function() {
                $(this).appendTo("div#container");
            });

            //work out duration of anim based on number of images (1 second for each image)
            var duration = $(".wrapper").length * 1000;

            //store speed for later (distance / time)
            var speed = (parseInt($("div#container").width()) + parseInt($("div#viewer").width())) / duration;

            //set direction
            var direction = "rtl";

            //set initial position and class based on direction
            (direction == "rtl") ? $("div#container").css("left", $("div#viewer").width()).addClass("rtl") : $("div#container").css("left", 0 - $("div#container").width()).addClass("ltr") ;

            //animator function
            var animator = function(el, time, dir) {

                //which direction to scroll
                if(dir == "rtl") {

                  //add direction class
                    el.removeClass("ltr").addClass("rtl");

                    //animate the el
                    el.animate({ left:"-" + el.width() + "px" }, time, "linear", function() {

                        //reset container position
                        $(this).css({ left:$("div#imageScroller").width(), right:"" });

                        //restart animation
                        animator($(this), duration, "rtl");

                        //hide controls if visible
                        ($("div#controls").length > 0) ? $("div#controls").slideUp("slow").remove() : null ;            

                    });
                } else {

                  //add direction class
                    el.removeClass("rtl").addClass("ltr");

                    //animate the el
                    el.animate({ left:$("div#viewer").width() + "px" }, time, "linear", function() {

                        //reset container position
                        $(this).css({ left:0 - $("div#container").width() });

                        //restart animation
                        animator($(this), duration, "ltr");

                        //hide controls if visible
                        ($("div#controls").length > 0) ? $("div#controls").slideUp("slow").remove() : null ;            
                    });
                }
            }

            //start anim
            animator($("div#container"), duration, direction);

            //pause on mouseover
            $("a.wrapper").live("mouseover", function() {

                //stop anim
                $("div#container").stop(true);

                //show controls
                ($("div#controls").length == 0) ? $("<div>").attr("id", "controls").appendTo("div#outerContainer").css({ opacity:0.7 }).slideDown("slow") : null ;
                ($("a#rtl").length == 0) ? $("<a>").attr({ id:"rtl", href:"#", title:"rtl" }).appendTo("#controls") : null ;
                ($("a#ltr").length == 0) ? $("<a>").attr({ id:"ltr", href:"#", title:"ltr" }).appendTo("#controls") : null ;

                //variable to hold trigger element
                var title = $(this).attr("title");

                //add p if doesn't exist, update it if it does
                ($("p#title").length == 0) ? $("<p>").attr("id", "title").text(title).appendTo("div#controls") : $("p#title").text(title) ;
            });

            //restart on mouseout
            $("a.wrapper").live("mouseout", function(e) {

                //hide controls if not hovering on them
                (e.relatedTarget == null) ? null : (e.relatedTarget.id != "controls") ? $("div#controls").slideUp("slow").remove() : null ;

                //work out total travel distance
                var totalDistance = parseInt($("div#container").width()) + parseInt($("div#viewer").width());

                //work out distance left to travel
                var distanceLeft = ($("div#container").hasClass("ltr")) ? totalDistance - (parseInt($("div#container").css("left")) + parseInt($("div#container").width())) : totalDistance - (parseInt($("div#viewer").width()) - (parseInt($("div#container").css("left")))) ;

                //new duration is distance left / speed)
                var newDuration = distanceLeft / speed;

                //restart anim
                animator($("div#container"), newDuration, $("div#container").attr("class"));

            });

            //handler for ltr button
            $("#ltr").live("click", function() {

                //stop anim
                $("div#container").stop(true);

                //swap class names
                $("div#container").removeClass("rtl").addClass("ltr");

                //work out total travel distance
                var totalDistance = parseInt($("div#container").width()) + parseInt($("div#viewer").width());

                //work out remaining distance
                var distanceLeft = totalDistance - (parseInt($("div#container").css("left")) + parseInt($("div#container").width()));

                //new duration is distance left / speed)
                var newDuration = distanceLeft / speed;

                //restart anim
                animator($("div#container"), newDuration, "ltr");
            });

            //handler for rtl button
            $("#rtl").live("click", function() {

                //stop anim
                $("div#container").stop(true);

                //swap class names
                $("div#container").removeClass("ltr").addClass("rtl");

                //work out total travel distance
                var totalDistance = parseInt($("div#container").width()) + parseInt($("div#viewer").width());

                //work out remaining distance
                var distanceLeft = totalDistance - (parseInt($("div#viewer").width()) - (parseInt($("div#container").css("left"))));

                //new duration is distance left / speed)
                var newDuration = distanceLeft / speed;

                //restart anim
                animator($("div#container"), newDuration, "rtl");
            });
        });
    </script>

最佳答案

您发布的示例中已经有代码可以停止和恢复动画(mouseover 上的实时 mouseouta.wrapper 事件处理程序)。

您应该能够从这些函数中提取所需的代码,并将其与 jQuery 结合使用 delay函数,或 JavaScript 的原生 setTimeout将动画暂停指定时间量的函数。

关于javascript - 暂停动画 2 秒,然后在 jQuery 中自动恢复它(不是在鼠标悬停或鼠标移出时)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6327116/

相关文章:

javascript - 如何让带有 false animate 队列的 onClick 函数也运行外部函数?

javascript - 如何在另一个div中添加一个div但在随机位置

c# - 如何以编程方式创建 ASP.NET MVC 项目?

c# - EF : The instance of entity type X cannot be tracked because another instance of this type with the same key is already being tracked

javascript - 从数据库获取文本值而不换行以使用它的javascript变量

javascript - 在 TinyMCE 中使用 &lt;style&gt; 标签

javascript - 使用 React hooks 获取 setState is not Define no-undef 错误

javascript - 查询 : fadeIn hidden element in callback

javascript - 有没有办法将内联 CSS 提取到 CSS 文件中

c# - AutoMapper.Mapper.Map 偶尔返回具有空属性的对象