自定义动画animate

语法:
animate(params, speed, callback);
1.自定义简单动画
1 $(function () {
2 $("#panel").click(function () {
3     $(this).animate({left:"500px"},3000);
4 });
5 });
2.累加, 累减动画
在之前的代码中,设置{left:"500px"}作为动画参数.如果在500px之前加上"+="或者"-="符号即表示在当前位置累加或者累减.
1 $(function () {
2 $("#panel").click(function () {
3     $(this).animate({left:"+=500px"},3000);
4 });
5 });
3.多重动画
同时执行多个动画.
1 $(function () {
2 $("#panel").click(function () {
3     $(this).animate({left:"+=500px",height:"+=50px"},3000);
4 });
5 });
4.按顺序执行多个动画
animate是按顺序执行的动画.
1 $(this).animate({left:"500px"},3000)
2         .animate({height:"500px"},3000);    

这样的动画效果的执行具有先后顺序,称为"动画队列".

5.综合动画

1 $(function () {
2 $("#panel").css("opacity",".5");//设置不透明度
3 $("#panel").click(function () {
4     $(this).animate({left:"400px",height:"200px",opacity:"1"},3000)
5     .animate({top:"200px",width:"200px"},3000)
6     .fadeOut("slow");
7 });
8 });

运行代码后, 动画效果一共执行了三步,从这个例子可以看出, 为同一元素应用多重效果时, 可以通过链式方式对这些效果进行排队.

6.动画回调函数
 1 $(function () {
 2 $("#panel").css("opacity",".5");//设置不透明度
 3 $("#panel").click(function () {
 4     $(this).animate({left:"400px",height:"200px",opacity:"1"},3000)
 5                 .animate({top:"200px",width:"200px"},3000,function () {
 6     $(this).css("border","5px solid blue");
 7 });
 8 //.fadeOut("slow");
 9 //.css("border","5px solid blue");
10         /***
11          * .fadeOut("slow");修改.css("border","5px solid blue");
12          * 预期效果是在动画的最后一步改变元素的样式, 而实际效果是, 刚刚开始执行动画的时候, css()方法就被执行.
13          * 原因:css()方法并不会加入到动画队列中,而是立即执行.
14          * 可以使用回调函数对非动画方法实现排队.只要把css()方法下载最后一个动画的回调函数里面即可.
15          */
16 });
17 });
callback回调函数适用于jQuery所有动画效果方法.
停止动画和判断是否处于动画状态
1.停止元素的动画.
选多时候需要停止匹配元素正在进行的动画, 如果需要在某处停止动画, 需要使用stop()方法.
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <style type="text/css">
 7         #panel{position:relative;width:100px;height:100px;border:1px solid gold;background-color:darkkhaki;cursor:pointer;}
 8     </style>
 9 </head>
10 <body>
11 <div id="panel"></div>
12 <script type="text/javascript" src="js/jquery-1-8-3.js"></script>
13 <script type="text/javascript">
14 $(function () {
15     /***
16      * stop([clearQueue][,gotoEnd]);
17      *  clearQueue:清空队列 === 是否要清空未执行完的动画队列
18      *  gotoEnd:到终点 ===是否直接将正在执行的动画跳转到末状态
19      *  这两个参数都是可选参数.为布尔值.
20      *  如果直接使用stop()方法, 则会立即停止当前正在进行的动画.
21      *  如果接下来还有动画等待继续进行, 则以当前状态开始接下来的动画.
22      *  经常会遇到这种情况,在为一个元素绑定hover事件之后, 用户把光标移入元素时会触发动画效果, 而当这个动画还没有结束时,用户就将光标移出这个元素了,
23      *  那么光标移出的红花效果将会被放进队列之中,等待光标移入动画结束后在执行.
24      *  因此, 如果光标移入移出得过快就会导致动画效果和光标的动作不一致.
25      *  此时,只要在光标的移入,移出动画之前加入stop()方法,就能解决这个问题.stop()方法会结束当前正在进行的动画, 并立即执行队列中的下一个动画.
26      */
27     $("#panel").hover(function(){
28        $(this).stop()
29                .animate({height: "150px", width: "300px" }, 200);
30     },function () {
31         $(this).stop()
32                 .animate({height: "22px", width: "60px" }, 300);
33     });
34 });
35 </script>
36 </body>
37 </html>
stop(true, true)使用:
 1 /***
 2  * gotoEnd:到终点 ===是否直接将正在执行的动画跳转到末状态
 3  * 通常用于后一个动画需要基于前一个动画的末状态的情况.可以通过stop(false, true)这种方式来让当前动画直接到达末状态.
 4  * 当然也可以两者结合起来使用stop(true, true), 即停止当前动画并直接到达当前动画的末状态, 并清空动画队列.
 5  * jQuery只能设置正在执行的动画的最终状态,而没有提供直接到达未执行订花队列最终状态的方法.
 6  */
 7 $("div.content").stop(true, true)
 8         .animate({width: "300px"}, 200)
 9         .animate({height: "150px"}, 300)
10         .animate({opacity: "0.2"}, 2000);
判断元素是否处于动画状态
在使用animate()方法的时候, 要避免动画基类而导致的动画与用户的行为不一致.
当用户快速在某个元素上执行animate()动画时, 就会出现动画积累.解决方法就是判断元素是否正在处于动画状态, 如果元素不处于动画状态, 才伪元素添加新的动画.否则不添加.
1 if(!$("div.content").is(":animated")){ //判断元素是否处于动画状态
2     //如果当前没有进行动画, 则添加新动画
3 }

视频展示例子:

效果截图

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>videoshow</title>
  6     <style type="text/css">
  7         *{margin:0;padding:0;}
  8         body{background-color:#FFF;color:#FFF;font:12px/1.5em Helvetica,Arial,sans-serif;}
  9         h1,h2,h3,h4,h5,h6{font-size:1em;}
 10         a{color:#2B93D2;text-decoration:none;}
 11         a:hover{color:#E31E1C;text-decoration:none;}
 12         ul,li{list-style:none;}
 13         fieldset,img{border:none;}
 14         .v_show{width:595px;margin:20px 0 1px 60px;}
 15         .v_caption{height:35px;background:url(img/btn_cartoon.gif) no-repeat 0 0;overflow:hidden;}
 16         .v_caption h2{float:left;width:84px;height:35px;background:url(img/btn_cartoon.gif) no-repeat;text-indent:-9999px;}
 17         .v_caption .cartoon{background-position:0 -100px;}
 18         .v_caption .variety{background-position:-100px -100px;}
 19         .highlight_tip{display:inline;float:left;margin:14px 0 0 10px;}
 20         .highlight_tip span{display:inline;float:left;width:7px;height:7px;overflow:hidden;margin:0 2px;background:url(img/btn_cartoon.gif) no-repeat 0 -320px;text-indent:-9999px;}
 21         .highlight_tip .current{background-position:0 -220px;}
 22         .change_btn{float:left;margin:7px 0 0 10px; }
 23         .change_btn span{display:block; float:left; width:30px; height:23px; overflow:hidden;background:url(img/btn_cartoon.gif) no-repeat;text-indent:-9999px;cursor:pointer;}
 24         .change_btn .prev{background-position:0 -400px;}
 25         .change_btn .next{width:31px;background-position:-30px -400px;}
 26         .v_caption em{display:inline;float:right;margin:10px 12px 0 0;font-family:simsun;}
 27         .v_content{position:relative;width:592px;height:160px;overflow:hidden;border-right:1px solid #E7E7E7;border-bottom:1px solid #E7E7E7;border-left:1px solid #E7E7E7;}
 28         .v_content_list{position:absolute;width:2500px;top:0px;left:0px;}
 29         .v_content ul{float:left;}
 30         .v_content ul li{display:inline;float:left;margin:10px 2px 0;padding:8px;background:url(img/v_bg.gif) no-repeat;}
 31         .v_content ul li a{display:block;width:128px;height:80px;overflow:hidden;}
 32         .v_content ul li img{width:128px;height:96px; }
 33         .v_content ul li h4{width:128px;height:18px;overflow:hidden;margin-top:12px;font-weight:normal;}
 34         .v_content ul li h4 a{display:inline !important;height:auto !important;}
 35         .v_content ul li span{color:#666;}
 36         .v_content ul li em{color:#888;font-family:Verdana;font-size:0.9em;}
 37     </style>
 38 </head>
 39 <body>
 40 <div class="v_show">
 41     <div class="v_caption">
 42         <!--头部标题, 按钮等-->
 43         <h2 class="cartoon" title="卡通动漫">卡通动漫</h2>
 44         <div class="highlight_tip">
 45             <span class="current">1</span>
 46             <span>2</span>
 47             <span>3</span>
 48             <span>4</span>
 49         </div>
 50         <div class="change_btn">
 51             <span class="prev">上一页</span>
 52             <span class="next">下一页</span>
 53         </div>
 54         <em><a href="#">更多</a></em>
 55     </div>
 56     <div class="v_content">
 57         <!--视频内容展示区域-->
 58         <div  class="v_content_list">
 59             <ul>
 60                 <li><a href=""><img src="img/01.jpg" alt="海贼王"></a><h4><a href="">海贼王</a></h4><span>播放:<em>28,276</em></span></li>
 61                 <li><a href=""><img src="img/01.jpg" alt="海贼王"></a><h4><a href="">海贼王</a></h4><span>播放:<em>28,276</em></span></li>
 62                 <li><a href=""><img src="img/01.jpg" alt="海贼王"></a><h4><a href="">海贼王</a></h4><span>播放:<em>28,276</em></span></li>
 63                 <li><a href=""><img src="img/01.jpg" alt="海贼王"></a><h4><a href="">海贼王</a></h4><span>播放:<em>28,276</em></span></li>
 64                 <li><a href=""><img src="img/02.jpg" alt="哆啦A梦"></a><h4><a href="">哆啦A梦</a></h4><span>播放:<em>33,326</em></span></li>
 65                 <li><a href=""><img src="img/02.jpg" alt="哆啦A梦"></a><h4><a href="">哆啦A梦</a></h4><span>播放:<em>33,326</em></span></li>
 66                 <li><a href=""><img src="img/02.jpg" alt="哆啦A梦"></a><h4><a href="">哆啦A梦</a></h4><span>播放:<em>33,326</em></span></li>
 67                 <li><a href=""><img src="img/02.jpg" alt="哆啦A梦"></a><h4><a href="">哆啦A梦</a></h4><span>播放:<em>33,326</em></span></li>
 68                 <li><a href=""><img src="img/03.jpg" alt="火影忍者"></a><h4><a href="">火影忍者</a></h4><span>播放:<em>28,276</em></span></li>
 69                 <li><a href=""><img src="img/03.jpg" alt="火影忍者"></a><h4><a href="">火影忍者</a></h4><span>播放:<em>28,276</em></span></li>
 70                 <li><a href=""><img src="img/03.jpg" alt="火影忍者"></a><h4><a href="">火影忍者</a></h4><span>播放:<em>28,276</em></span></li>
 71                 <li><a href=""><img src="img/03.jpg" alt="火影忍者"></a><h4><a href="">火影忍者</a></h4><span>播放:<em>28,276</em></span></li>
 72                 <li><a href=""><img src="img/04.jpg" alt="龙珠"></a><h4><a href="">龙珠</a></h4><span>播放:<em>57,865</em></span></li>
 73                 <li><a href=""><img src="img/04.jpg" alt="龙珠"></a><h4><a href="">龙珠</a></h4><span>播放:<em>57,865</em></span></li>
 74                 <li><a href=""><img src="img/04.jpg" alt="龙珠"></a><h4><a href="">龙珠</a></h4><span>播放:<em>57,865</em></span></li>
 75                 <li><a href=""><img src="img/04.jpg" alt="龙珠"></a><h4><a href="">龙珠</a></h4><span>播放:<em>57,865</em></span></li>
 76             </ul>
 77         </div>
 78     </div>
 79 </div>
 80 <script type="text/javascript" src="js/jquery-1-8-3.js"></script>
 81 <script type="text/javascript">
 82 $(function () {
 83     var page = 1;
 84     var i = 4;//每版放4张图片
 85     //向后按钮
 86     $("span.next").click(function () {
 87         var $parent = $(this).parents("div.v_show");//根据当前点击元素获取到父元素
 88         var $v_show = $parent.find("div.v_content_list");//找到视频内容展示区域
 89         var $v_content = $parent.find("div.v_content");//找到视频内容展示区域外围div元素
 90         var v_width = $v_content.width();
 91         var len = $v_show.find("li").length;
 92         var page_count = Math.ceil(len / i);//只要不是整数, 就往大的方向取最小整数
 93         if(!$v_show.is(":animated")){///判断视频内容展示区域是否正在处于动画
 94             if(page == page_count){//已经到最后一个页面了,如果再往后,必须跳转到第一个页面
 95                 $v_show.animate({left: "0px"},"slow");//通过改变left的值,条转到一个版面
 96                 page = 1;
 97             }else{
 98                 $v_show.animate({left: '-='+v_width},"slow");//通过改变left的值,达到每次换一个页面
 99                 page++;
100             }
101             $parent.find("span").eq((page-1)).addClass("current").siblings().removeClass("current");
102         }
103     });
104     //往前按钮
105     $("span.prev").click(function(){
106         var $parent = $(this).parents("div.v_show");//根据当前点击元素获取到父元素
107         var $v_show = $parent.find("div.v_content_list");//找到视频内容展示区域
108         var $v_content = $parent.find("div.v_content");//找到视频内容展示区域外围div元素
109         var v_width = $v_content.width();
110         var len = $v_show.find("li").length;
111         var page_count = Math.ceil(len / i);//只要不是整数, 就往大的方向取最小整数
112         if(!$v_show.is(":animated")){///判断视频内容展示区域是否正在处于动画
113             if(page == 1){//已经到第一个页面了,如果再往前,必须条转到最后一个版面
114                 $v_show.animate({left: '-='+v_width*(page_count-1)}, "slow");
115                 page = page_count;
116             }else{
117                 $v_show.animate({left: "+="+v_width},"slow");
118                 page--;
119             }
120             $parent.find("span").eq(page-1).addClass("current").siblings().removeClass("current");
121         }
122     });
123 });
124 </script>
125 </body>
126 </html>
posted @ 2016-09-21 15:58  SkyTeam_LBM  阅读(539)  评论(0编辑  收藏  举报