(因为自己是前端刚入门的小白所以中间出现很多问题,不过这对于我来说就是一次经验的积累)

预想效果:点击"开始",图片循环旋转,不是同时的效果,而是有一定的时间差.点击"开始"后,按钮变为"停止",点击"停止"图片依次停止显示为中奖号码,当中奖号码的最后一位数显示时,按钮变为"再次",并显示"中奖号码,隐藏中间4位,"再点击"再次",图片归零,按钮变为"开始",然后循环执行.实现多次抽奖效果.最后电话号码显示时中间四位隐藏.

开始:

停止:

again:显示"中奖号码"中间4位为星号*

点击"again"归零:

css部分

<style type="text/css">
  * {margin: 0;padding: 0;}
  .content {width: 80%;height: 400px;margin: 200px auto;position: relative;}
  .num_box {width: 1486px;position: absolute;left: 23%;top: 5%;margin-left: -403px;z-index: 8;overflow: hidden;border: 1px solid;}
  .num_bg {background: url(images/5.png) top center repeat-y;width: 122px;height: 150px;float: left;margin-right: 12px;}
  .num {background: url(images/num2.png) top center repeat-y;width: 122px;height: 150px;float: left;margin-right: 12px}
  .btn {width: 170px;height: 49px;line-height: 49px;text-align: center;position: absolute;bottom: 36%;right: 51%;cursor: pointer;}
  #start {background: url(images/draw-02.png) no-repeat;}
  #stop {background: url(images/draw-005.png) no-repeat;}
  #again {background: url(images/draw-008.png) no-repeat;}
</style>

html部分

<div class="content"> //内容容器div
  <div class="num_box">//背景图片div
    <div class="num_bg"></div>
    <div class="num_bg"></div>
    <div class="num_bg"></div>
    <div class="num_bg"></div>
    <div class="num_bg"></div>
    <div class="num_bg"></div>
    <div class="num_bg"></div>
    <div class="num_bg"></div>
    <div class="num_bg"></div>
    <div class="num_bg"></div>
    <div class="num_bg"></div>
  </div>
  <div class="num_box">//中奖号码的图片容器,图片作为背景图执行
    <div class="num"></div>
    <div class="num"></div>
    <div class="num"></div>
    <div class="num"></div>
    <div class="num"></div>
    <div class="num"></div>
    <div class="num"></div>
    <div class="num"></div>
    <div class="num"></div>
    <div class="num"></div>
    <div class="num"></div>
  </div>
  <div id="start" class="btn" onclick="start()"></div>//按钮

  <div class="show"></div>//电话号码显示
</div>

js部分

<script type="text/javascript">
    var u = 150;//ImageWidth
    var c = '1 3 3 4 5 6 8 9 0 9 0'//固定的数据
    var btn = $(".btn");
    function start() {
      var Html = btn.attr('id');//获取按钮的当前id名
      if(Html == "start") {
        startRun();//调用函数
        btn.attr('id', 'stop');//修改按钮的id名
      } else if(Html == "stop") {
        stop(c);//调用函数
      } else {
        btn.attr('id', 'start');//修改按钮的id名
      }
    }
   //点击"开始"执行的开始函数
   function startRun() {
    $(".num").each(function(index) {
      var _num1 = $(this);
      _animate(_num1, u * 10 * (index + 1), 10)//传参调用,在编辑器编辑时,将该注释删除,否则会报错
    })

    function _animate(el, backgroundPositionY, speed) {//封装的动画函数,el当前的元素

      el.animate({
        backgroundPositionY: backgroundPositionY//位置
      }, {
        complete: function() { //complete回调函数
        speed: speed,//速度
        el.css({
          backgroundPositionY: 0//元素css样式位置归零
        });
       _animate(el, backgroundPositionY, speed); //自身调用
      }
    }, "liner")
  }
 }

  //点击"停止"
  function stop(custNo) {
    var num_arr = (custNo + ' ').split(' ');//将字符串分割成数组
    $(".num").each(function(index) {
    var _num = $(this);
    setTimeout(function() {
    _num.stop(true,false); //停止动画
    _num.animate({
      backgroundPositionY: (u * 10 * (index + 1)) - (u * num_arr[index])
    }, {
      complete: function() {
        if(index == 10) {
          if(!_num.is(":animated")) {

          $(".show").html(custNo.substring(0,3)+"****"+custNo.substring(8,11));//手机号码中间四位显示为星号
          btn.attr('id', 'again');
            btn.click(function() {
              Again();
            })
          }
        }
      }
    }, 400 * (index + 1));
  }, 800 * index + 1000); //1000 (指定数据依次的出现速度) index + 100(控制点击停止之后,指定数据出现的时间)
  });
 }

  //点击"再次"

  function Again() {
    $(".num").each(function(index) {
    var _num2 = $(this);
    _num2.stop(true, true);
    _num2.animate({
    backgroundPositionY: (u * 10)
    })
   })
  }
</script>

在本次修改中不会的知识点

1.backgroundPositionY :backgroundPositionY 属性设置 background-image 的垂直位置。

语法:Object.style.backgroundPositionY=position

方法一:

function changePosition()
{
  document.body.style.backgroundPositionY="bottom";
}

方法二:

  tank.style.backgroundPositionY="80px";

2.jquery的animate()动画:执行css属性集的自定义动画

http://www.runoob.com/jquery/eff-animate.html 菜鸟教程的动画基本及css属性地址

http://www.jb51.net/article/58919.htm 本文章中用到的动画回调函数地址

将速度,回调函数,队列等都要放到大括号{}中

代码如下:

$("div").animate( {width:"1000px"}, {queue:false, duration:1000,complete:function(){alert("ok")}})

详解:queue参数可以规定动画是否加入动画队列执行,如果进入动画队列,将按照顺序执行,也就是第一个动画执行完成之后,队列中的第二个动画再执行,以此类推。

   如果queue参数值为true就是将动画加入队列执行,否则就是不加入队列。
  duration参数就是定义动画的持续时间。
  complete参数定义动画的回调函数。

    function startRun() {
      $(".num").each(function(index) {
        var _num1 = $(this);
        _animate(_num1, u * 10 * (index + 1), 10)//传参调用,在编辑器编辑时,将该注释删除,否则会报错
      })

      function _animate(el, backgroundPositionY, speed) {//封装的动画函数,el当前的元素

        el.animate({
          backgroundPositionY: backgroundPositionY//位置
        }, {
          complete: function() { //complete回调函数
          speed: speed,//速度
          el.css({
            backgroundPositionY: 0//元素css样式位置归零
          });
         _animate(el, backgroundPositionY, speed); //自身调用
        }
      }, "liner")
    }
   }

stop()方法

stop()在语法上有两个参数,分别都是Boolean布尔值。且都是可选的,但是也有规定,如下:

$(selector).stop(stopAll,goToEnd)

参数:(默认情况下,不写参数,则会被认为两个参数都是false。)

stopAll:可选。规定是否停止被选元素的所有加入队列的动画。意思就是如果该参数值为true,则会停止所有后续动画或事件。如果该参数值为false,则只停止被选元素当前执行的动画,后续动画不受影响。因此,该参数一般都为false。

goToEnd:可选。规定是否允许完成当前动画,该参数只能在设置了stopAll参数时使用。那么goToEnd参数就有两个选择了,一个是false,一个是true。一般都为true。意思就是允许完成当前动画。

jq动画设置图片抽奖的更多相关文章

  1. jq动画设置图片抽奖(修改效果版)

    效果:点击开始,图片转动,按钮显示"停止",点击停止,选出中奖号码,,最后一个数字停止时,按钮变为"again",点击"again"开始转动 ...

  2. swift 设置图片动画组 iOS11之前 默认图片 设置不成功

    在iOS 11 上, 1.先执行动画组 在设置图片执行帧动画,2.先设置图片在设置帧动画,执行帧动画  没有任何问题 在iOS 10和iOS9上,必须 执行 方法二(先设置图片在设置帧动画,执行帧动画 ...

  3. PyQt5设置图片格式及动画

    1.缩放图片'''使用QImage.Scale(width,height)方法可以来设置图片'''from PyQt5.QtCore import *from PyQt5.QtGui import * ...

  4. 为你的网页图标(Favicon)添加炫丽的动画和图片

    Favico.js 在让你的网页图标显示徽章,图像或视频.你设置可以轻松地在网页图标中使用动画,可以自定义类型的动画,背景颜色和文字颜色.它支持的动画,像幻灯片,渐变,弹出等等. 您可能感兴趣的相关文 ...

  5. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  6. [原创]winform_PC宴会图片抽奖/文字抽奖

    14年6月 好友结婚 14年4月左右知道他们婚礼由迎宾照抽奖的环节 问我有没有可以用的抽奖软件 我网上找了一会儿,就放弃了,自己做一个更快不是? 14年6月,PC宴会图片抽奖软件成功使用 --- 操作 ...

  7. iOS图案锁,支持动画、图片、绘图

    最近忙着搭建一个聊天用的框架,过几天应该会整理写出来吧,原理不难,但是实现后会省很多事.好久没写博客,周末心血来潮写了个图案锁,这东西没什么技术含量,网上一堆,这次这个图案锁顺便联系了怎么打包使用.a ...

  8. iOS UI-三种简单的动画设置

    一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 ...

  9. 基于图像切换器(imageSwitcher)的支持动画的图片浏览器

    利用GridView和ImageSwitcher的基本用法 public class MainActivity extends Activity { int[] imageIds = new int[ ...

随机推荐

  1. 报错:/usr/sbin/mysqld: Can't find file: './performance_schema/events_waits_summary_by_account_by_event_name.frm' (errno: 13 - Permission denied)

    报错背景: Linux环境下安装MySQL数据库. 安装完成,数据库初始化,启动数据库时报错. 报错现象: -- :: [ERROR] Native table 'performance_schema ...

  2. kong插件应用

    插件概述 插件之于kong,就像Spring中的aop功能.在请求到达kong之后,转发给后端应用之前,你可以应用kong自带的插件对请求进行处理,合法认证,限流控制,黑白名单校验,日志采集等等.同时 ...

  3. vue 跨域问题

    前段时间做一个vue打包成安卓和IOS的App,遇到了跨域问题,直接拿了之前项目的配置,却不起作用. import org.springframework.context.annotation.Con ...

  4. dubbo 在不同协议下携带上下文区别

    如果走原生的dubbo协议,RpcContext.getContext()里的attarchments和values 是能够在节点间传递的 但如果hessian协议,attarchments和valu ...

  5. 2018.7.3 lnmp一键安装包无人值守版本 php7.2 + nginx1.14.0 + mariadb5.5 + centos7.1(1503) 环境搭建 + Thinkphp5.1.7 配置

    给自己练习用的,整个过程追求一个简单粗暴,没有配置虚拟主机,现在记录一下过程. 1. 进入到lnmp解压缩后的文件夹conf/rewrite,把thinkphp.conf复制一份到/usr/local ...

  6. Listen and Write 18th Feb 2019

    Weighted blanket has becomes very popular in many homes. they claim it can provide better sleep and ...

  7. Mysql 分组选择

    Mysql 分组选择 在其他的数据库中我们遇到分组选择的问题时,比如在分组中计算前10名的平均分 我们可以使用row_number()over() 比较方便的得到. 但是在mysql中,问题就被抛了出 ...

  8. liunx vi 学习

    vi有两种状态:命令态和编辑态 命令态中常用的命令: 上下左右移动的处理4个箭头外还有h(左),j(下),k(上),l(右) 调到屏幕显示的首行H,尾行L,x行:xG 0将光标移动到行首:$到行尾,M ...

  9. 最简单打开三星s8+usb调试模式的步骤

    就在我们使用安卓手机通过数据线链接到PC的时候,如果手机没有开启usb开发者调试模式,PC则没能够成功读到我们的手机,部分app也没能够正常使用,遇到这个情况我们需要找解决方法将手机的usb开发者调试 ...

  10. Linq to SQL -- Select、Distinct和Count、Sum、Min、Max、Avg

    Select/Distinct操作符 适用场景:o(∩_∩)o… 查询呗. 说明:和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也 ...