jq动画设置图片抽奖
(因为自己是前端刚入门的小白所以中间出现很多问题,不过这对于我来说就是一次经验的积累)
预想效果:点击"开始",图片循环旋转,不是同时的效果,而是有一定的时间差.点击"开始"后,按钮变为"停止",点击"停止"图片依次停止显示为中奖号码,当中奖号码的最后一位数显示时,按钮变为"再次",并显示"中奖号码,隐藏中间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动画设置图片抽奖的更多相关文章
- jq动画设置图片抽奖(修改效果版)
效果:点击开始,图片转动,按钮显示"停止",点击停止,选出中奖号码,,最后一个数字停止时,按钮变为"again",点击"again"开始转动 ...
- swift 设置图片动画组 iOS11之前 默认图片 设置不成功
在iOS 11 上, 1.先执行动画组 在设置图片执行帧动画,2.先设置图片在设置帧动画,执行帧动画 没有任何问题 在iOS 10和iOS9上,必须 执行 方法二(先设置图片在设置帧动画,执行帧动画 ...
- PyQt5设置图片格式及动画
1.缩放图片'''使用QImage.Scale(width,height)方法可以来设置图片'''from PyQt5.QtCore import *from PyQt5.QtGui import * ...
- 为你的网页图标(Favicon)添加炫丽的动画和图片
Favico.js 在让你的网页图标显示徽章,图像或视频.你设置可以轻松地在网页图标中使用动画,可以自定义类型的动画,背景颜色和文字颜色.它支持的动画,像幻灯片,渐变,弹出等等. 您可能感兴趣的相关文 ...
- iOS开发UI篇—iOS开发中三种简单的动画设置
iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...
- [原创]winform_PC宴会图片抽奖/文字抽奖
14年6月 好友结婚 14年4月左右知道他们婚礼由迎宾照抽奖的环节 问我有没有可以用的抽奖软件 我网上找了一会儿,就放弃了,自己做一个更快不是? 14年6月,PC宴会图片抽奖软件成功使用 --- 操作 ...
- iOS图案锁,支持动画、图片、绘图
最近忙着搭建一个聊天用的框架,过几天应该会整理写出来吧,原理不难,但是实现后会省很多事.好久没写博客,周末心血来潮写了个图案锁,这东西没什么技术含量,网上一堆,这次这个图案锁顺便联系了怎么打包使用.a ...
- iOS UI-三种简单的动画设置
一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 ...
- 基于图像切换器(imageSwitcher)的支持动画的图片浏览器
利用GridView和ImageSwitcher的基本用法 public class MainActivity extends Activity { int[] imageIds = new int[ ...
随机推荐
- 报错:/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 ...
- kong插件应用
插件概述 插件之于kong,就像Spring中的aop功能.在请求到达kong之后,转发给后端应用之前,你可以应用kong自带的插件对请求进行处理,合法认证,限流控制,黑白名单校验,日志采集等等.同时 ...
- vue 跨域问题
前段时间做一个vue打包成安卓和IOS的App,遇到了跨域问题,直接拿了之前项目的配置,却不起作用. import org.springframework.context.annotation.Con ...
- dubbo 在不同协议下携带上下文区别
如果走原生的dubbo协议,RpcContext.getContext()里的attarchments和values 是能够在节点间传递的 但如果hessian协议,attarchments和valu ...
- 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 ...
- Listen and Write 18th Feb 2019
Weighted blanket has becomes very popular in many homes. they claim it can provide better sleep and ...
- Mysql 分组选择
Mysql 分组选择 在其他的数据库中我们遇到分组选择的问题时,比如在分组中计算前10名的平均分 我们可以使用row_number()over() 比较方便的得到. 但是在mysql中,问题就被抛了出 ...
- liunx vi 学习
vi有两种状态:命令态和编辑态 命令态中常用的命令: 上下左右移动的处理4个箭头外还有h(左),j(下),k(上),l(右) 调到屏幕显示的首行H,尾行L,x行:xG 0将光标移动到行首:$到行尾,M ...
- 最简单打开三星s8+usb调试模式的步骤
就在我们使用安卓手机通过数据线链接到PC的时候,如果手机没有开启usb开发者调试模式,PC则没能够成功读到我们的手机,部分app也没能够正常使用,遇到这个情况我们需要找解决方法将手机的usb开发者调试 ...
- Linq to SQL -- Select、Distinct和Count、Sum、Min、Max、Avg
Select/Distinct操作符 适用场景:o(∩_∩)o… 查询呗. 说明:和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也 ...