深入理解jquery自定义动画animate()
编程学习 2021-07-04 19:59www.dzhlxh.cn编程入门
狼蚁网站SEO优化长沙网络推广就为大家带来一篇深入理解jquery自定义动画animate()。长沙网络推广觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随长沙网络推广过来看看吧
在以前很长一段时间里,网页上的各种特效还需要采用flash 在进行。但最近几年里,我们已经很少看到这种情况了,绝大部分已经使用JavaScript 动画效果来取代flash。这里
说的取代是网页特效部分,而不是动画。网页特效比如:渐变菜单、渐进显示、图片轮播等;而动画比如:故事情节广告、MV 等等。
如果复制当前代码进行在本地测试的时候,请注意把不需要(其他功能展示)的代码注释掉。
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script src="jquery-1.11.2.js"></script> <style type="text/css"> #box { width: 100px; height: 100px; background-color: red; position:absolute; } #pox { width: 100px; height: 100px; background-color: green; position: absolute; top: 200px; } </style> </head> <body> <input type="button" class="button" value="开始" /><input type="button" class="stop" value="停止" /> <input type="button" class="ani" value="查找运动中的动画" /> <div id="box">box</div> <div id="pox">pox</div> </body> </html> <script type="text/javascript"> $(function () { $(".button").click(function () { $("#box").animate({ left: "300px" //要想使用left top bottom right这种方向性的属性 先必须对"#box元素设置CSS 绝对定位 }) }) //自定义动画中,每次开始运动都必须是初始位置或初始状态,而有时我们想通过当前位置或状态下再进行动画。jQuery 提供了自定义动画的累加、累减功能。 $(".button").click(function () { $("#box").animate({ left: "+=50px" //每点击一次.button按钮,#box元素就往左移动50px }) }) //-------------------------------------同步动画 //一个CSS 变化就是一个动画效果,狼蚁网站SEO优化的例子中,已经有四个CSS 变化(分别是width,height,opacity,fontSize的变化)实现了多重动画同步运动的效果。(所谓多重同步运动的效果就是,这四个css属性的值在同一时间,同时变化) $(".button").click(function () { $("#box").animate({ width: "300px", height: "200px", opacity:0.5, //透明度为0.5 注:透明度的值在0-1之间 fontSize:"200px", //字体大小设为30px }) //第一个参数:是一个对象,他是键值对的css }) //--------------------------------------列队动画 //通过回调函数现实队列动画。(效果就是:首先#box的宽度变为300px 然后高度变为200px,然后透明度变为50%,字体大小变为150px 最后弹出一个“完毕”) $(".button").click(function () { $("#box").animate({ width: "300px"}, 1000, function(){ $("#box").animate({height:"200px"},1000,function(){ $("#box").animate({opacity:0.5},1000,function(){ $("#box").animate({fontSize:"150px"},1000,function(){alert("完毕")}) }); }); }); }) //在同一个元素的基础上,使用链式调用也可以实现列队动画 $(".button").click(function () { $("#box") .animate({ width: "300px" }, 1000) .animate({ height: "200px" }, 1000) .animate({ opacity: 0.5 }, 1000) .animate({ fontSize: "150px" }, 1000, function () { alert("列队动画执行完毕")}) }); //在同一个元素的基础上,通过依次顺序实现列队动画 (如果有多个元素则不能实现,两个元素之间的动画是同步的。) $(".button").click(function () { $("#box").animate({ width: "300px" }, 1000); $("#box").animate({ height: "200px" }, 1000); $("#box").animate({ opacity: 0.5 }, 1000); $("#box").animate({ fontSize: "150px" }, 1000, function () { alert("列队动画执行完毕")}); }) //如果有多个元素则不能实现 不信请看狼蚁网站SEO优化代码 (通过执行狼蚁网站SEO优化这段代码,我们发现#box 与#pox这两个元素的动画是同时执行的,属于#box的那两段动画是先执行 $("#box").animate({ width: "300px" }, 1000)然后再执行("#box").animate({ opacity: 0.5 }, 1000); 他们两个有列队动画的效果) 而属于#pox的两段动画是先执行 $("#pox").animate({ height: "200px" }, 1000)然后再执行 $("#pox").animate({ fontSize: "150px" }, 1000)他们两个有列队动画的效果。 但是 $("#box").animate({ width: "300px" }, 1000)与$("#pox").animate({ height: "200px" }, 1000); 同时执行的。 $("#box").animate({ opacity: 0.5 }, 1000)与$("#pox").animate({ fontSize: "150px" }, 1000)是同时执行的。 //前面说了这么一大堆 其实就是: //#box的第一条和第三条是列队动画 //#pox的第二条和第四条是列队动画 //#box的第一条和#pox的第二条是同步动画 //#box的第三条和#pox的第四条是同步动画 $(".button").click(function () { $("#box").animate({ width: "300px" }, 1000); $("#pox").animate({ height: "200px" }, 1000); $("#box").animate({ opacity: 0.5 }, 1000); $("#pox").animate({ fontSize: "150px" }, 1000, function () { alert("列队动画执行完毕")}); }) //那我们现在的需求是:不管你有几个元素,我都要他们依次实现列队动画效果。(测试了一下,只能用这种回调函数嵌套的方式来实现了) $(".button").click(function () { $("#box").animate({ width: "300px" }, 1000, function () { $("#pox").animate({ height: "200px" }, 1000, function () { $("#box").animate({ height: "200px"}, 1000, function () { $("#pox").animate({ fontSize: "150px" }, 1000, function () { alert("列队动画执行完毕") }); }) }) }) }) // ---------------------------------动画与非动画 进行队列 【queue()】 //我们知道动画可以有列队效果。但是一个普通的css(比如改变背景颜色)如果实现与动画进行列队呢? $(".button").click(function () { $("#box").slideUp(1000).slideDown(1000).css("background", "yellow") }) //本来我们是想要实现队列动画的,也就是先让#box滑动隐藏,然后再让它滑动显示,最后让它改变颜色。可是我们运行这段呢代码,我们看到第一时间就执行了css("background","yellow")这段代码。 //通过上面的代码我们了解到 css()方法不是动画方法,会和第一个动画同时执行。也就是说非动画不能列队。 //现在问题又来了。我现在想要实现列队动画,也想非动画和动画一起列队怎么办呢? 其实我们可以使用回调函数实现的。请看狼蚁网站SEO优化的代码 $(".button").click(function () { $("#box") .slideUp(1000) .slideDown(1000, function () { $(this).css("background", "yellow") }) .hide(3000); }) //但如果上面这样的话,当列队动画繁多的时候,可读性不但下降,而原本的动画方法不够清晰。所以,我们的想法是每个操作都是自己独立的方法。那么jQuery 提供了一个类似于回调函数的方法:.queue() $(".button").click(function () { //三个动画。 $("#box") .slideUp(1000) .slideDown(1000) .queue(function () { $(this).css("background", "yellow");}) }) //现在,我们想继续在.queue()方法后面再增加一个隐藏动画,这时发现居然无法实现。这是.queue()特性导致的。有两种方法可以解决这个问题,jQuery 的.queue()的回调函数可以传递一个参数,这个参数是next 函数,在结尾处调用这个next()方法即可再链式执行列队动画。 //链式编程实现队列动画 $(".button").click(function () { //四个动画 $("#box") .slideUp(1000) .slideDown(1000) .queue(function (next) { //这个next是一个函数 $(this).css("background", "yellow"); next();}) .hide(1000); }); //顺序编程实现队列动画 我们看到使用顺序调用的列队,逐个执行,非常清晰 $(".button").click(function () { $("#box").slideUp(1000); $("#box").slideDown(1000); $("#box").queue(function (next) { $(this).css("background", "yellow"); next(); }); $("#box").hide(1000); }); //因为next 函数是jQuery1.4 版本以后才出现的,而之前我们普遍使用的是.dequeue()方法。意思为执行下一个元素列队中的函数。 //使用.dequeue()方法执行下一个函数动画 //$(".button").click(function () { // $('#box').slideUp('slow').slideDown('slow').queue(function () { // $(this).css('background', 'orange'); // $(this).dequeue(); //相当于上面的那句next() 只是这里的function()括号里不像上面那样需要传递一个next函数 // }).hide(1000) /