利用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 相关文章推荐
jQuery 连续列表实现代码
Dec 21 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
Feb 24 Javascript
js charAt的使用示例
Feb 18 Javascript
浅谈JavaScript的事件
Feb 27 Javascript
jquery实现一个简单的表单验证实例
Mar 30 Javascript
AngularJS中watch监听用法分析
Nov 04 Javascript
ajax实现动态下拉框示例
Jan 10 Javascript
Jquery获取radio选中的值
May 05 jQuery
Angular2使用Angular-CLI快速搭建工程(二)
May 21 Javascript
vue做网页开场视频的实例代码
Oct 20 Javascript
讲解vue-router之什么是动态路由
May 28 Javascript
JS+css3实现幻灯片轮播图
Aug 14 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
Zerg剧情介绍
2020/03/14 星际争霸
php array_slice函数的使用以及参数详解
2008/08/30 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
php生成HTML文件的类方法
2019/10/11 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
javascript hashtable 修正版 下载
2010/12/30 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
loading动画特效小结
2017/01/22 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
简明 Python 基础学习教程
2007/02/08 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
python pyheatmap包绘制热力图
2018/11/09 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
手把手教你将Flask应用封装成Docker服务的实现
2020/08/19 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
SQL Server笔试题
2012/01/10 面试题
广州品高软件.net笔面试题目
2012/04/18 面试题
计算机专业个人简短的自我评价
2013/10/23 职场文书
留守儿童工作方案
2014/06/02 职场文书
员工年终自我评价
2014/09/14 职场文书
2014年技术员工作总结
2014/11/18 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
电力培训学习心得体会
2016/01/11 职场文书
排查并解决MySQL生产库内存使用率高的报警
2022/04/11 MySQL