利用Jquery队列实现根据输入数量显示的动画


Posted in Javascript onSeptember 01, 2016

先来看看要实现的效果图

利用Jquery队列实现根据输入数量显示的动画

如上面的gif图所示,可以在输入框中,输入要产生的动画的数量,然后点击click me按钮,就产生了效果。产生的效果是通过在数组中预设的几种。这里为了演示方便,没有设置具体的形状,比如可以更换为一些其它的iconfont来实现效果。

实现思路

通过$.queue$.dequeue来实现动画队列的存取与取出实现效果。首先通过按照input输入的数字来形成对应数量效果对象的数组。然后在把数组存放到$.queue中,最后通过click me按钮触发,一个一个取出动画序列,实现动画。

注意

这里要注意的是,在一个一个取出动画的时候,用到了setInterval,不需要的时候一定要清除计时器,否则会影响序列,不停的取出。

<!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>

总结

以上就是这篇文章的全部内容,感兴趣的朋友们自己运行操作下会更容易理解,如果有疑问可以留言交流,希望这篇文章对大家能有所帮助。

Javascript 相关文章推荐
FireFox中textNode分片的问题
Apr 10 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
Mar 22 Javascript
js浏览器本地存储store.js介绍及应用
May 13 Javascript
使用命令对象代替switch语句的写法示例
Feb 28 Javascript
使用AngularJS处理单选框和复选框的简单方法
Jun 19 Javascript
AngularJS入门教程之双向绑定详解
Aug 18 Javascript
纯JS代码实现隔行变色鼠标移入高亮
Nov 23 Javascript
10个经典的网页鼠标特效代码
Jan 09 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
Feb 27 Javascript
通过js给网页加上水印背景实例
Jun 17 Javascript
vue中利用iscroll.js解决pc端滚动问题
Feb 15 Javascript
jQuery 移除事件的方法
Jun 20 jQuery
JavaScript中子对象访问父对象的方式详解
Sep 01 #Javascript
浅谈JavaScript 数据属性和访问器属性
Sep 01 #Javascript
老生常谈JavaScript 函数表达式
Sep 01 #Javascript
Ubuntu系统下Angularjs开发环境安装
Sep 01 #Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
Sep 01 #Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
Sep 01 #Javascript
深入理解jQuery3.0的domManip函数
Sep 01 #Javascript
You might like
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
joomla数据库操作示例代码
2016/01/06 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
javascript call方法使用说明
2010/01/11 Javascript
jQuery each()方法的使用方法
2010/03/18 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
利用JS进行图片的切换即特效展示图片
2013/12/03 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
2015/08/07 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
3种vue组件的书写形式
2017/11/29 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
python 6种方法实现单例模式
2020/12/15 Python
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
公务员职务工作的自我评价
2013/11/01 职场文书
求职自荐书范文
2013/12/04 职场文书
单位实习证明怎么写
2014/01/17 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
毕业实习评语
2014/02/10 职场文书
股指期货心得体会
2014/09/10 职场文书
入党积极分子党支部意见
2015/06/02 职场文书