利用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 相关文章推荐
js操作textarea 常用方法总结
Dec 03 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
Jan 13 Javascript
node.js操作mongodb学习小结
Apr 25 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
Jun 05 Javascript
简单谈谈Javascript中类型的判断
Oct 19 Javascript
javascript鼠标右键菜单自定义效果
Dec 08 Javascript
video.js使用改变ui过程
Mar 05 Javascript
jQuery.cookie.js使用方法及相关参数解释
Mar 06 Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 Javascript
react-router 路由切换动画的实现示例
Dec 03 Javascript
小程序中设置缓存过期的实现方法
Jan 14 Javascript
vue样式穿透 ::v-deep的具体使用
Jun 04 Javascript
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
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
PHP.MVC的模板标签系统(四)
2006/09/05 PHP
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
贴近用户体验的Jquery日期、时间选择插件
2015/08/19 Javascript
全面理解闭包机制
2016/07/11 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
vue实现表单录入小案例
2019/09/27 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
Python yield使用方法示例
2013/12/04 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
static关键字的用法
2013/10/07 面试题
工商管理专业职业生涯规划
2014/01/01 职场文书
销售提升方案
2014/06/07 职场文书
司法助理专业自荐书
2014/06/13 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
整改报告怎么写
2014/11/06 职场文书
股权投资协议书
2016/03/23 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis