Js写九宫格抽奖
国庆出去转了一圈,回来及时把以前写的一些有用的在这儿记录一下
--------------------------------------------我是分割线------------------------------------------------------------
先说说JQuery封装的专门用来处理九宫格抽奖的框架JQuery.latest.min.js,文件地址如下
- https://files.cnblogs.com/files/teersky/JQuery.latest.min.js
用这个框架问题就很简单了,网上例子很多我就不做赘述,给大家发一个地址以供参考
- http://www.cnblogs.com/starof/p/4933907.html
我要说的是用原生的思想写一个九宫格抽奖,效果图如下
注: 图片是随便放的,爬自豆瓣音乐
先放HTML代码
- <div id="container">
- <ul id="oUl">
- <li><img src="data:images/1.jpg"/><div class="mask"></div></li>
- <li><img src="data:images/2.jpg"/><div class="mask"></div></li>
- <li><img src="data:images/3.png"/><div class="mask"></div></li>
- <li><img src="data:images/4.jpg"/><div class="mask"></div></li>
- <a>开始</a>
- <li><img src="data:images/5.jpg"/><div class="mask"></div></li>
- <li><img src="data:images/6.jpg"/><div class="mask"></div></li>
- <li><img src="data:images/7.jpg"/><div class="mask"></div></li>
- <li><img src="data:images/8.jpg"/><div class="mask"></div></li>
- </ul>
- <div id="page"></div>
- </div>
img标签是放图片的地方,而mask是放当标签滚动起来是标记的地方,
a标签是开始按钮
div.page是放获奖信息展示的地方
CSS代码如下:
- * {
- margin: ;
- padding: ;
- }
- #container {
- width: 310px;
- height: 310px;
- margin: 30px auto;
- }
- #oUl {
- width: 310px;
- height: 310px;
- list-style: none;
- }
- #oUl li,
- #oUl a {
- width: 100px;
- height: 100px;
- border: 1px solid #;
- float: left;
- text-align: center;
- line-height: 100px;
- position: relative;
- }
- #oUl li img{
- display: block;
- width: %;
- height: %;
- }
- #oUl li .mask{
- width: %;
- height: %;
- position: absolute;
- left:;
- top:;
- background: url(images/mask.png) no-repeat;
- background-size: cover;
- display: none;
- }
- #oUl a:hover {
- cursor: pointer;
- color: orange;
- font-size: 18px;
- }
- #oUl .active .mask{
- display: block;
- }
- #page {
- line-height: 32px;
- color: #9a9a9a;
- text-align: center;
- position:absolute;
- left: %;
- top: 50px;
- width: 300px;
- height: 50px;
- margin-left: -150px;
- display: none;
- background: #;
- color: #fff;
- }
下面就是最好玩的Js部分了,
- var container = document.getElementById('container'),
- li = container.getElementsByTagName('li'),
- aa = container.getElementsByTagName('a')[0],
- page = document.getElementById('page'),
- timer = null;
- bReady = false;
- var order = [0,1,2,4,7,6,5,3]; //这个是放标签滚动次序的地方
- //随机函数,用于在九宫格跑起来之前就得到要随机到的地方
- function random(n, m) {
- return parseInt((m - n) * Math.random() + n);
- }
- function start(num,str) {
- var i = 0; //此处定义一个i执行效果类似于for循环,不过for循环执行太快,所以不能用
- var t =60; //标记转动速度,也就是每过60毫秒标记重新改变一次
- var round = 10; //表示标记转动的圈数
- var rNum = round*8; //表示标记转动的次数
- timer = setTimeout(setFreq, t);
- function setFreq() {
//首先标记每次刷新就让li所有的class都为空- for(var j = 0; j < li.length; j++) {
- li[j].className = '';
- }
//通过i余8得到此刻在order数组中的数字- var ord = order[i%li.length];
//该数字就是标记应该出现的位置(我不知道JQuery框架是不是这样处理的)- li[ord].className = "active";
- i++; //i自增
- if(i<rNum-8){
//当i的数量小于转rNum-8次的数量,t不变- timer = setTimeout(setFreq, t);
- }else if(i>= rNum-8 && i< rNum+num){
//否则让t每次增加li标签位置序列乘以5,此时计时器运行速度会降低,同时标签刷新速度也会降低- t+=(i-rNum+8)*5;
- timer = setTimeout(setFreq, t);
- }
- if( i >= rNum+num){
//当i大于转rNum加随机出来的数字次计时器结束,出现信息提示框提示中奖信息- page.innerHTML="恭喜你中了" + num + str +"" ;
- var timer2 = null;
- timer2 = setTimeout(function(){
- page.style.display="block";
- clearTimeout(timer2);
- },1000);
- bReady = false; //当计时器结束后让a标签变为可点击状态
- clearTimeout(timer);
- }
- }
- }
当a标签点击后执行代码如下
- var num = 0; //先定义一个num用来存放得到的随机函数,也可以用来存放后台传来的随机数,前台写这种代码安全性不高
- aa.onclick = function() {
- /*'1-8'*/
- if(bReady) return false; //当bReady为true时a标签为不可点状态
- page.style.display="none"; //这个是处理再次点击时让page框消失的代码
- bReady = true; //当点击之后就让bReady为false,即a不可点状态
- num = random(1,9) //随机得到一个数字
- start(num,"000万现金大礼包"); //执行函数start,num为上面的随机数,后面的字符串为在page信息框中展示的信息,可以随便更改
- }
完整项目地址如下,有兴趣的朋友可以瞅瞅
- https://files.cnblogs.com/files/teersky/%E5%8E%9F%E7%94%9F%E4%B9%9D%E5%AE%AB%E6%A0%BC%E6%8A%BD%E5%A5%96.rar
---------------------------------------------------------------我是分割线--------------------------------------------------------------------------------
小弟不才,各位仁兄如有更好的方法欢迎留言斧正。。。
Js写九宫格抽奖的更多相关文章
- php+lottery.js制作九宫格抽奖实例
php+lottery.js制作九宫格抽奖实例,本抽奖功能效果表现好,定制方便简单,新手学习跟直接拿来用都非常不错,兼容IE.火狐.谷歌等浏览器. 引入抽奖插件lottery.js <scrip ...
- JS:九宫格抽奖转盘实例
工作需要,所以做了个抽奖转盘的插件,当然这里只做最简单的演示.可以用于取代一些flash抽奖程序. 机制说明: 1.通过定义lottery-unit来控制节点的个数及索引: 2.通过设置lottery ...
- 【Vue.js游戏机实战】- Vue.js实现九宫格水果机抽奖游戏总结
大家好!先上图看看本次案例的整体效果. 完整版实战课程附源码:[Vue.js游戏机实战]- Vue.js实现九宫格水果机抽奖 实现思路: Vue component实现九宫格水果机组件,可以嵌套到任意 ...
- PHP+Ajax微信手机端九宫格抽奖实例
PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现.支持可以设置中奖概率等. 奖品列表 <div class="lottery ...
- Node.js写文件的三种方法
Node.js写文件的三种方式: 1.通过管道流写文件 采用管道传输二进制流,可以实现自动管理流,可写流不必当心可读流流的过快而崩溃,适合大小文件传输(推荐) var readStream = fs. ...
- 用JS写了一个打字游戏,反正我是通不了关
今天想写个简单的游戏, 打字游戏好像都没写过, 那么就写打字游戏吧, gamePad包含了关卡的信息, 可以用来调整给个关卡字符下落的速度: getRandom函数会返回一个字符对象, 这个对象包含了 ...
- JS写小游戏(一):游戏框架
前言 前一阵发现一个不错的网站,都是一些用html5+css+js写的小游戏,于是打算学习一番,写下这个系列博客主要是为了加深理解,当然也有一些个人感悟,如果英文好可以直接Click Here. 概述 ...
- 去它的h5,我还是用js写原生跨平台app吧
智能手机功能越来越强大,已经在逐渐替代电脑的作用.百度.腾讯.阿里的移动端日活数也在逐步的赶上甚至超越电脑端用户.叫喊着“mobile first”的公司越来越多,App开发者应运而生,且队伍日趋庞大 ...
- 原生js写的贪吃蛇网页版游戏特效
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <bo ...
随机推荐
- PM2部署资料
问题1:pm2的log怎么查看?(pm2 show (name))可以看到日志地址,直接查看 问题2:日志怎么清除:pm2 flush 问题3:修改日志输出路径 问题4:怎么重新加载,restart貌 ...
- JAVA&JS debug
JAVA Chrome Sources 如果当前代码所在文件页面为一界面 → →| -------------------------- ↓↑ ...
- 手机SLAM开发
...惯性定位 由简入繁 保留JPG文件. 回环 建模
- JavaScript中两种类型的全局对象/函数【转】
Snandy Stop, thinking is the essence of progress. JavaScript中两种类型的全局对象/函数 这里所说的JavaScript指浏览器环境中的包括宿 ...
- Android 热修复技术中的CLASS_ISPREVERIFIED问题
一.前言 上一篇博客中,我们通过介绍dex分包原理引出了Android的热补丁技术,而现在我们将解决两个问题. 1. 怎么将修复后的Bug类打包成dex 2. 怎么将外部的dex插入到ClassLoa ...
- (转)@RequestParam @RequestBody @PathVariable 等参数绑定注解详解
引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用: 简介: han ...
- opencv——拟合圆
#include "stdafx.h" #include "cv.h" #include "highgui.h" #include &quo ...
- 解决VS2010中工具箱里没有WPM
我前段时间要用到MS的WPM,但苦于找不到解决不了,无奈重装后一样的情况我的win7 旗舰版版+VS2010旗舰版.在控制面板里找到多媒体重新关闭并从新打开,就OK啦..记得要重启哦...
- Adding Cache-Control headers to Static Files in ASP.NET Core
Thanks to the ASP.NET Core middleware pipeline, it is relatively simple to add additional HTTP heade ...
- Mathcad操作tips:函数、符号计算
函数 1. 利用“:”进行函数定义,如 2. 函数支持range variable输入,如 3. 常用数学函数可以在Insert - Function菜单中寻得. 4. 当不确定某个名字是否是函数名时 ...