利用Jquery隊(duì)列實(shí)現(xiàn)根據(jù)輸入數(shù)量顯示的動(dòng)畫(huà)
先來(lái)看看要實(shí)現(xiàn)的效果圖
如上面的gif圖所示,可以在輸入框中,輸入要產(chǎn)生的動(dòng)畫(huà)的數(shù)量,然后點(diǎn)擊click me按鈕,就產(chǎn)生了效果。產(chǎn)生的效果是通過(guò)在數(shù)組中預(yù)設(shè)的幾種。這里為了演示方便,沒(méi)有設(shè)置具體的形狀,比如可以更換為一些其它的iconfont來(lái)實(shí)現(xiàn)效果。
實(shí)現(xiàn)思路
通過(guò)$.queue
和$.dequeue
來(lái)實(shí)現(xiàn)動(dòng)畫(huà)隊(duì)列的存取與取出實(shí)現(xiàn)效果。首先通過(guò)按照input
輸入的數(shù)字來(lái)形成對(duì)應(yīng)數(shù)量效果對(duì)象的數(shù)組。然后在把數(shù)組存放到$.queue
中,最后通過(guò)click me
按鈕觸發(fā),一個(gè)一個(gè)取出動(dòng)畫(huà)序列,實(shí)現(xiàn)動(dòng)畫(huà)。
注意
這里要注意的是,在一個(gè)一個(gè)取出動(dòng)畫(huà)的時(shí)候,用到了setInterval
,不需要的時(shí)候一定要清除計(jì)時(shí)器,否則會(huì)影響序列,不停的取出。
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="/jquery-2.1.4.min.js" type="text/javascript"></script> <style> *{ padding: 0; margin: 0; } .box{ width: 50px; height: 50px; border: 1px solid slateblue; position: relative; left: 750px; top: 500px; } .animate{ width: 50px; height: 50px; border: 1px solid skyblue; background: slateblue; opacity: 0; position: absolute; } .up{ z-index: 999; background: red; width: 50px; height: 50px; border: 1px solid skyblue; } #btn{ background: slateblue; position: absolute; left: 0; top: 0; } .number{ position: absolute; top: 600px; left: 740px; width: 100px; height: 30px; } #btnTrg{ background: slateblue; width: 100px; height: 30px; border: 0; position: absolute; top: 600px; left: 600px; } .result{ position: absolute; top: 600px; left: 900px; width: 100px; height: 30px; background: skyblue; text-align: center; } </style> </head> <body> <div id="content"></div> <div class="box"> <span class="animate1 animate"></span> <span class="animate2 animate"></span> <span class="animate3 animate"></span> <span class="animate4 animate"></span> <span class="animate5 animate"></span> <span class="animate6 animate"></span> <div class="up"></div> </div> <div id="btn"></div> <button id="btnTrg">click me</button> <input type="text" class="number" id="num"/> <span class="result"></span> </body> <script> var span1=$(".animate1"); var span2=$(".animate2"); var span3=$(".animate3"); var span4=$(".animate4"); var span5=$(".animate5"); var span6=$(".animate6"); var box=$("#content"); var btn=$("#btn"); var btnTrg=$("#btnTrg"); var input=$("#num"); var result=$(".result"); var resultNum=1; var ani=[ function () { span1.css({ background:"red", opacity:1 }).animate({ left:-300, top:-100 }, function () { result.html(resultNum++) }).animate({ left:-50, top:-450, opacity:0.2 }, function () { $(this).css({ left:0, top:0, opacity:0 }) }) }, function () { span2.css({ background:"blue", opacity:1 }).animate({ left:-200, top:-200 }, function () { result.html(resultNum++) }).animate({ left:-50, top:-450, opacity:0.2 }, function () { $(this).css({ left:0, top:0, opacity:0 }) }) }, function () { span3.css({ background:"pink", opacity:1 }).animate({ left:-100, top:-300 }, function () { result.html(resultNum++) }).animate({ left:-50, top:-450, opacity:0.2 }, function () { $(this).css({ left:0, top:0, opacity:0 }) }) }, function () { span4.css({ background:"green", opacity:1 }).animate({ left:100, top:-300 }, function () { result.html(resultNum++) }).animate({ left:50, top:-450, opacity:0.2 }, function () { $(this).css({ left:0, top:0, opacity:0 }) }) }, function () { span5.css({ background:"orange", opacity:1 }).animate({ left:200, top:-200 }, function () { result.html(resultNum++) }).animate({ left:50, top:-450, opacity:0.2 }, function () { $(this).css({ left:0, top:0, opacity:0 }) }) }, function () { span6.css({ background:"black", opacity:1 }).animate({ left:300, top:-150 }, function () { result.html(resultNum++) }).animate({ left:50, top:-450, opacity:0.2 }, function () { $(this).css({ left:0, top:0, opacity:0 }) }) } ]; var queue; var len=0; var flag=0; var timer; input.on("keyup", function () { var result=[]; var value=input.val(); len=value; if(flag>=len){ clearInterval(timer); } if(value<6){ result =ani.slice(0,value); queue=$.queue(box,"animate",result); }else if(value>6){ var num1=Math.floor(value/6); var num2=value%6; for(var i=0;i<num1;i++){ result=result.concat(ani); } result=result.concat(ani.slice(0,num2)); console.log(result); $.queue(box,"animate",result); } }); btnTrg.on("click", function () { resultNum=0; flag=0; timer=setInterval(function () { flag++; console.log(flag); $.dequeue(box,"animate"); },500); }) </script> </html>
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容,感興趣的朋友們自己運(yùn)行操作下會(huì)更容易理解,如果有疑問(wèn)可以留言交流,希望這篇文章對(duì)大家能有所幫助。
- jQuery隊(duì)列控制方法詳解queue()/dequeue()/clearQueue()
- jQuery中queue()方法用法實(shí)例
- jquery隊(duì)列queue與原生模仿其實(shí)現(xiàn)方法分享
- jQuery中隊(duì)列queue()函數(shù)的實(shí)例教程
- jQuery 事件隊(duì)列調(diào)整方法
- jquery隊(duì)列函數(shù)用法實(shí)例
- 用隊(duì)列模擬jquery的動(dòng)畫(huà)算法實(shí)例
- jQuery使用動(dòng)畫(huà)隊(duì)列自定義動(dòng)畫(huà)操作示例
- JQuery中queue方法用法示例
相關(guān)文章
JS JQUERY實(shí)現(xiàn)滾動(dòng)條自動(dòng)滾到底的方法
這篇文章主要介紹了JS JQUERY實(shí)現(xiàn)滾動(dòng)條自動(dòng)滾到底的方法,需要的朋友可以參考下2015-01-01EasyUI Datebox 日期驗(yàn)證之開(kāi)始日期小于結(jié)束時(shí)間
這篇文章主要介紹了EasyUI Datebox 日期驗(yàn)證之開(kāi)始日期小于結(jié)束時(shí)間,需要的朋友可以參考下2017-05-05jQuery實(shí)現(xiàn)仿QQ空間裝扮預(yù)覽圖片的鼠標(biāo)提示效果代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)仿QQ空間裝扮預(yù)覽圖片的鼠標(biāo)提示效果代碼,基于jQuery鼠標(biāo)事件動(dòng)態(tài)操作頁(yè)面元素樣式的動(dòng)態(tài)變換實(shí)現(xiàn)該功能,需要的朋友可以參考下2015-10-10jquery解析json格式數(shù)據(jù)的方法(對(duì)象、字符串)
這篇文章主要介紹了jquery解析json格式數(shù)據(jù)的方法,包括針對(duì)json對(duì)象及json字符串的解析技巧,并附帶了完整的jQuery解析json數(shù)據(jù)示例,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11jQuery on()方法綁定動(dòng)態(tài)元素的點(diǎn)擊事件無(wú)響應(yīng)的解決辦法
這篇文章主要介紹了jQuery on()方法綁定動(dòng)態(tài)元素的點(diǎn)擊事件無(wú)響應(yīng)的解決辦法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07