亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

深入理解jquery自定義動畫animate()

2019-11-20 09:56:25
字體:
來源:轉載
供稿:網友

在以前很長一段時間里,網頁上的各種特效還需要采用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 變化就是一個動畫效果,下面的例子中,已經有四個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("列隊動畫執行完畢")});      })      //如果有多個元素則不能實現 不信請看下面代碼 (通過執行下面這段代碼,我們發現#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()方法不是動畫方法,會和第一個動畫同時執行。也就是說非動畫不能列隊。      //現在問題又來了。我現在想要實現列隊動畫,也想非動畫和動畫一起列隊怎么辦呢? 其實我們可以使用回調函數實現的。請看下面的代碼      $(".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)     //});       //-----------------------------動畫的清除 【clearQueue()】        //jQuery 還提供了一個清理列隊的功能方法:.clearQueue()。把它放入一個列隊的回調函 數或.queue()方法里,就可以把剩下為執行的列隊給移除。      //清理動畫列隊      //假如我想在執行完第二個動畫那就就不再執行了。那么只要在第二個動畫的回調函數哪里添加一句$(this).clearQueue()就可以停止后面的列隊動畫了     $(".button").click(function () {              $("#box")         .slideUp(1000)         .slideDown(1000, function () { $(this).clearQueue() })         .queue(function (next) { $(this).css("background", "yellow"); next() })         .hide(1000);     })      //那么如果獲取列隊動畫的長度呢?       function getQueueCount() {       return $("#box").queue("fx").length; //獲取當前列隊的長度,fx 是默認列隊的參數     }          //用法     $(".button").click(function () {        //下面這段代碼總共有slideUp,slideDown,queue,hide這四個動畫       $("#box")         .slideUp(1000, function () { alert(getQueueCount()) }) //執行到這一步的時候會打印出:4 它后面還有三個動畫,所以下一步的時候會打印出3         .slideDown(1000, function () { alert(getQueueCount()) }) //執行到這一步的時候會打印出:3         .queue(function (next) { alert(getQueueCount()); $(this).css("background", "yellow"); next() }) //執行到這一步的時候會打印出:2         .hide(1000, function () { alert(getQueueCount()) }); //執行到這一步的時候會打印出:1      });           //---------------------------------動畫的停止【stop()】        //很多時候需要停止正在運行中的動畫,jQuery 為此提供了一個.stop()方法。它有兩個可選參數:.stop(clearQueue, gotoEnd);clearQueue 傳遞一個布爾值,代表是否清空未執行完的動畫列隊,gotoEnd 代表是否直接將正在執行的動畫跳轉到末狀態。      $(".button").click(function () {       $("#box")         .animate({left:"1000px"} ,3000)     })      $(".stop").click(function () {       $("#box").stop(); //將#box這個元素的動畫停止掉。沒有參數的stop()方法只是單純的停止動畫     })       //那下面再來了解下,列隊動畫的停止          $(".button").click(function () {       $("#box").animate({ left: "300px" },1000)            .animate({ bottom: "300px" }, 1000)            .animate({ width: "300px" }, 1000)            .animate({ height: "300px" }, 1000)                       })      //$(".stop").click(function () {     //  $("#box").stop(); // 如果用沒有參數的stop()方法去停止有列隊動畫,那么只會停止掉第一個列隊動畫,后面的列隊動畫會繼續執行。     //})      //那么現在我想當我點擊停止按鈕的時候,我就需要整個將列隊動畫停止下來,而不是僅僅停止第一個,怎么辦呢? 答案是:我們可以給stop()方法加參數     //stop()方法有兩個可選參數:     //第一個可選參數,如果為true,就代表停止并清除掉后面的隊列動畫。即:動畫完全停止(默認值為false)     //第二個可選參數,如果為true,就代表停止并清除掉后面的隊列動畫,并且當前動畫會立刻跳轉到當前這條動畫執行完畢的末尾位置(默認為false)     $(".stop").click(function () { $("#box").stop(true, true); })           //--------------------------------動畫的延遲【delay()】       $(".button").click(function () {       $("#box").delay(2000)    //如果delay(2000) 直接寫在$("#box")元素后面,就表示延遲2秒再執行動畫         .animate({ left: "300px" }, 1000)         .animate({ bottom: "300px" }, 1000)         .animate({ width: "300px" }, 1000).delay(3000) // 寫在這里表示等animate({ width: "300px" }, 1000)這段代碼執行完后,延遲3秒再執行下面的代碼         .animate({ height: "300px" }, 1000)     })        //-----------------------------------獲取當前正在執行的動畫 【:animated 過濾器】       $(".button").click(function () {       //$("#box").slideUp(1000, function abc() {       //  $(this).slideToggle(1000, abc); //無限循環的調用自己。實現動畫不停的執行。       //})       //或者用這以下這種方式也可以實現 動畫不停的自執行       $("#box").slideToggle(1000, function () {         $(this).slideToggle(1000, arguments.callee); //arguments.callee表示調用自身。 和上面那一句是一樣的       })      })      $(".ani").click(function () {       $(":animated").css("background", "blue").stop(true); //獲取當前正在執行的動畫,并將它的顏色改為藍色后停止動畫的執行     })        //---------------------動畫的全局屬性【$.fx.off屬性可以關閉頁面上所有的動畫】【$.fx.interval屬性可以調整動畫每秒運行的幀數】          //$.fx.interval 屬性用于設置jQuery動畫每隔多少毫秒繪制一幀圖像 (默認為13 毫秒) 數字越小越流暢,但可能影響瀏覽器性能。          //$.fx.interval = 100; // 設置動畫繪制一幀幀的時間為100毫秒,(默認是13毫秒)      //$.fx.off = true; //關閉頁面上所有的動畫            //補充:在.animate()方法中,還有一個參數,easing 運動方式,這個參數,大部分參數值需要通過插件來使用,在后面的課程中,會詳細講解。自帶的參數有兩個:swing(緩動)、linear(勻速),默認為swing。     $('.button').click(function () {        $('#box').animate({ left: '800px' }, 1000, 'swing'); //swing 表示緩動運行,緩速運動有個特點,就是剛開始運行的慢,到了中間就比較快,最后又慢下來(中間快,兩頭慢) 整段代碼的意思就是在1秒鐘內 以緩動方式運行動畫        $('#pox').animate({ left: '800px' }, 1000, 'linear'); //linear表示勻速運行,速度一直不變 整段代碼的意思就是在1秒鐘內 以勻速方式運行動畫     });   }); </script> 

以上這篇深入理解jquery自定義動畫animate()就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91色在线播放| 日本久久久久久久久| 久久久久国产视频| 中文字幕一区日韩电影| 久久久久久69| 欧美日韩性视频| 91深夜福利视频| 欧美—级高清免费播放| 欧美在线观看一区二区三区| 国产精品h片在线播放| 精品动漫一区二区三区| 大胆欧美人体视频| 超碰精品一区二区三区乱码| 亚洲视频在线观看视频| 欲色天天网综合久久| 成人av在线网址| 亚洲国产精品高清久久久| 国产精品久久久一区| 欧美国产日韩二区| 久久久综合免费视频| 精品视频在线播放免| 亚洲欧洲第一视频| 久久久久久久久久久网站| 国产精品精品视频一区二区三区| 亚洲激情自拍图| 久久久久久九九九| 亚洲欧美第一页| 亚洲精品电影久久久| 久久人体大胆视频| 性欧美办公室18xxxxhd| 国产精品a久久久久久| 69国产精品成人在线播放| 一本色道久久综合狠狠躁篇怎么玩| 久久免费精品视频| 欧美黑人极品猛少妇色xxxxx| 成人国产精品色哟哟| 国产精品jvid在线观看蜜臀| 日韩电影免费观看在线观看| 亚洲第一免费播放区| 亚洲欧美激情精品一区二区| 国产精品久久一区| 亚洲视频在线观看视频| 91av视频在线观看| 精品国产一区二区三区久久| 国内免费久久久久久久久久久| 欧美多人乱p欧美4p久久| 成人伊人精品色xxxx视频| 国产福利成人在线| 久久久久亚洲精品成人网小说| 成人高清视频观看www| 久久亚洲欧美日韩精品专区| 国产精品视频男人的天堂| 精品国内产的精品视频在线观看| 欧美成人激情在线| 日韩av在线免费播放| 亚洲精品99久久久久| 日韩在线精品一区| 欧美小视频在线| 欧美亚洲另类制服自拍| 久久成年人视频| 最近免费中文字幕视频2019| 疯狂欧美牲乱大交777| 日韩av一区二区在线观看| 97在线免费观看视频| 亚洲国产一区二区三区四区| 欧美理论片在线观看| 国产午夜精品理论片a级探花| 日韩精品视频观看| 国产亚洲欧美日韩美女| 成人有码视频在线播放| 亚洲一区二区三区在线视频| 久久精品视频网站| 精品国模在线视频| 欧美性极品少妇精品网站| 日韩在线视频国产| 97国产精品人人爽人人做| 亚洲一区久久久| 国产在线视频不卡| 成人激情电影一区二区| 国产伊人精品在线| 欧美精品videofree1080p| 精品中文字幕在线2019| 亚洲亚裔videos黑人hd| 精品欧美aⅴ在线网站| 91成人在线视频| 91国在线精品国内播放| 欧美老女人在线视频| 亚洲图片制服诱惑| 久久精品国产69国产精品亚洲| 日本乱人伦a精品| 亚洲精品之草原avav久久| 亚洲国产成人91精品| 热99精品只有里视频精品| 精品久久久久久久久久久久久| 国产精品亚洲片夜色在线| 51午夜精品视频| 91免费看片网站| 国产色婷婷国产综合在线理论片a| 亚洲成人1234| 亚洲图片在区色| 日韩电影中文字幕av| 国产精品va在线播放| 性欧美激情精品| 久久伊人色综合| 尤物九九久久国产精品的特点| 日韩在线观看免费高清| 久久久999成人| 日韩中文字幕在线视频播放| 欧美在线xxx| 欧美乱人伦中文字幕在线| 成人国产精品久久久久久亚洲| 亚洲精品98久久久久久中文字幕| 亚洲欧美日韩一区在线| 亚洲性av在线| 久久精品国产综合| 久久久精品美女| 国产精品香蕉在线观看| 日韩欧美在线观看视频| 国产精品视频中文字幕91| 中文一区二区视频| 中文字幕亚洲无线码在线一区| 91伊人影院在线播放| 国产亚洲精品久久久优势| 97香蕉超级碰碰久久免费软件| 日韩欧美在线看| www.久久撸.com| 日日噜噜噜夜夜爽亚洲精品| 97精品国产aⅴ7777| 国产一区二区三区高清在线观看| 5252色成人免费视频| 久久久亚洲成人| 黄色一区二区在线| 正在播放国产一区| 精品福利一区二区| 亚洲午夜激情免费视频| 亚洲国产天堂久久综合| 亚洲成人a级网| 热99久久精品| 日韩av网站电影| 美女福利视频一区| 久久久97精品| www日韩中文字幕在线看| 欧美亚洲另类激情另类| 国产精品青青在线观看爽香蕉| 国产精品久久在线观看| 亚洲国产精品久久久久秋霞蜜臀| 色偷偷av一区二区三区乱| 久久人人爽人人爽爽久久| 欧美午夜性色大片在线观看| 国产在线观看一区二区三区| 精品视频9999| 中文字幕欧美视频在线| 欧美韩日一区二区| 97国产成人精品视频| 日韩欧美中文字幕在线观看| 日韩欧美在线视频观看| 懂色av一区二区三区| 亚洲xxxx妇黄裸体| 久久九九免费视频| 久久人人爽人人爽爽久久| 久久九九亚洲综合| 亚洲美女性视频| 色综合色综合久久综合频道88| 久久在线精品视频|