(-1)写在前面

这个idea不是我的,首先向这位前辈致敬。

我用的是chrome49, jquery3.0。

完整的程序案例在我的百度云盘http://pan.baidu.com/s/1jI2QSnW

最近大四实习,该走的都走了,过两天也要去北京找一个web前段的实习机会,世界这么大,我不得不去看看…。

(0)知识储备

a. webkitTransitionEnd

webkit是浏览器前缀,webkitTransitionEnd在过渡完成后触发。类似DOM对象.click的方式注册事件,对于webkitTransitionEnd事件是无效的。

b. transform:scale(0.8)

已元素中心为准缩放元素,被元素包裹的内容也跟着缩放,元素实际大小没有发生化,(已计算后的属性值为准),注意jquery3.0的width()、height()方法会取得缩放后的尺寸!。对元素margin、top、left不跟着元素的缩放而缩放。该属性不会继承。

c. #arrow:active

活动是一种持续的行为,已一个div元素为例,当你一直按着鼠标左键或有键不放,就会匹配改选择器。

d. transform:rotate(45deg)

默认以元素中心为轴心转动元素,如图所示:

transform:rotate(45deg)执行完毕后,在0度位置的信息在45度位置,转动是整体的,注意0度和45度这个组合,可以围绕圆心瞬时针转动到任意位置,在这个案例中,我们关心的是元素转动的度数和指针指向区域的关系。

(1)效果图

(2)具体代码

a. html文件

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset=utf-8>

<script   type="text/javascript" src="debug-jquery-3.0.0.js"></script>

<script  type="text/javascript" src="base.js"></script>

<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">

<title>为了生活</title>

<style type="text/css">

*

{

margin:0;

padding:0;

}

body

{

position:absolute;

}

#active

{

width:640px;

height:640px;

position:absolute;

transform:scale(0.8);

}

#dial

{

width:640px;

height:640px;

position:absolute;

}

#arrow

{

width:240px;

height:252px;

overflow:hidden;

position:absolute;

}

#arrow:active

{

/*鼠标右键按在#arrow上时,元素缩小*/

transform:scale(0.95);

}

</style>

</head

<body>

<div id="active">

<div id="dial"><img src="data:images\lanren.png" width="640" height="640"/></div>

<div id="arrow"><img src="data:images\arrow.png" width="750" height="252"/></div>

</div>

</body>

</html>

base.js

$(function()

{

var $arrow = $("#arrow"),

$active = $("#active"),

$dial = $("#dial"),

rounds = 5*360;      //基础圈数

$arrow.centerPos();//使元素水平垂直居中、centerPos是自定义函数

$active.centerPos();

window.onresize = function()

{

$arrow.centerPos();

$active.centerPos();

}

$arrow.click(function()

{

if($arrow.data("ding")) return;//如果#arrow正在转动,不向下执行

$arrow.data("ding", true);//true表示转动,false表示已停止

var deg = $.random(0,360);//产生一个>=0&&<=360的数

$arrow.data("deg",deg);

$dial.css({

transform:"rotate("+(rounds+deg)+"deg)",

transition:"3s",

});

})

$dial.on("webkitTransitionEnd",function()

{

//旋转结束执行

$arrow.data("ding",false);

$dial.css({

transition:"none",//不指定none的话等同于transition:"3s"

transform:"rotate("+$arrow.data("deg")+"deg)",

/*

这么做会从deg(上次)转到5*360+deg(本次)

如果不这么左第一次转动之后,再次转动会5*360+deg(上次)转到5*360+deg(本次)

*/

});

var award = getAward();

alert(award);

})

function getAward()

{

var deg = $arrow.data("deg")

/*

有指针的哪个图片初始方向相对于圆盘往右偏了2度...

*/

if ((deg >= 332 && deg <= 360) || (deg > 0 && deg < 32))

{

return "三网通流量 10M";

}

else if ((deg >= 32 && deg < 92))

{

return "话费20元";

}

else if (deg >= 92 && deg < 152)

{

return "ipad mini4";

}

else if (deg >= 152 && deg < 212)

{

return "话费5元";

}

else if (deg >= 210 && deg < 272)

{

return "三网通流量 30M";

}

else if (deg >= 272 && deg < 332)

{

return "iPhone7";

}

}

});

$.random = function(min,max,filter)

{

var i,

n = Math.floor(Math.random()*(max-min+1)+min);

if(filter != undefined && filter.constructor == Array)

{

for(i=filter.length-1;i>-1;i--)

{

if(n == filter[i])

{

n = Math.floor(Math.random()*(max-min+1)+min)

i = filter.length;

}

}

}

return n;

}

//top、left根据父元素的宽和高计算

$.fn.centerPos = function()

{

var parent;

this.each(function(index)

{

parent = this.parentNode;

if(parent == document.body)

{

parent = window;

}

var position = $(this).css("position");

if(position == "fixed" || position=="absolute")

{

$(this).css("left",parent != window ?(parent.offsetWidth-this.offsetWidth)/2:(parent.innerWidth-this.offsetWidth)/2);

$(this).css("top",parent != window ?(parent.offsetHeight-this.offsetHeight)/2:(parent.innerHeight-this.offsetHeight)/2);

}

else

{

window.console.error("没有设置有效的position值");

}

})

return this;

}

function next(current)

{

var parent = current.parentNode,

children = parent.children,

//childNodes、nextSibling maybe contain ObjectText

length = children.length;

for(var i=0;i<length;i++)

{

if(current == children[i])

break;

}

//if not lastChild

if(i<length-1)

{

return children[i+1];

}

else

{

//recursion search until parent == document.body

if(parent != document.body)

{

return next(parent);

}

else

{

window.console.warn("Can not get next sibling");

}

}

}

function getRandomInteger(min,max)

{

return Math.floor(Math.random()*(max-min+1))+min

}

function imitateMouseEvent(element,type)

{

var event = document.createEvent("Events");

event.initEvent(type,true,true);

element.dispatchEvent(event);

}

showMessage.i = 0;

function showMessage(object)

{

var body = $("body")[0];

var $p =$("#debugp");

if($p.length==0)

{

$p = $("<p/>").attr("id","debugp");

$(body).prepend($p);

}

$p[0].innerHTML += "<br/>"+(showAttribute.i++)+"   |   "+object;

}

showAttribute.i=0;

function showAttribute(object,filter)

{

var body = $("body")[0];

var $p =$("#debugp");

if($p.length==0)

{

$p = $("<p/>").attr("id","debugp");

$(body).prepend($p);

}

if(getType(filter).indexOf(DataType.string)!=-1)

{

for(var a in object)

{

if(a.indexOf(filter)!=-1)

{

$p[0].innerHTML += a+"   "+object[a]+"<br/>";

}

}

}

else if(getType(filter) == DataType.RegExp)

{

for(var a in object)

{

if(filter.test(a))

{

$p[0].innerHTML += a+"   "+object[a]+"<br/>";

}

}

}

else if(getType(filter) == DataType.UNDEFINED)

{

for(var a in object)

{

$p[0].innerHTML += a+"   "+object[a]+"<br/>";

}

}

else

{

window.console.error(arguments.callee.toString().match(/^function +(.+)\(/)[1]+"第二个参数应传递字符串或正则表达式");

}

$p[0].innerHTML +=showAttribute.i+++"--------------------------------------<br/>"

}

function showCollection(collection)

{

var body = $("body")[0];

var $p =$("#debugp");

if($p.length==0)

{

$p = $("<p/>").attr("id","debugp");

$(body).prepend($p);

}

for(var i=0;i<collection.length;i++)

$p[0].innerHTML = collection[i]+"    |"+"<br/>" + $p[0].innerHTML;

}

function showLength(collection)

{

var body = $("body")[0];

var $p =$("#debugp");

if($p.length==0)

{

$p = $("<p/>").attr("id","debugp");

$(body).prepend($p);

}

$p[0].innerHTML = collection.length+"     |"+"<br/>" +      $p[0].innerHTML;

}

function DataType()

{

}

DataType.RegExp = "RegExp";

DataType.ObjectString = "Objectstring";

DataType.string = "string";

DataType.NULL = "null";

DataType.UNDEFINED = "undefined";

DataType.ObjectNumber = "Objectnumber";

DataType.number = "number";

DataType.ObjectBoolean = "Objectboolean";

DataType.boolean = "boolean";

DataType.function = "function";

DataType.array = "array";

function getType(type)

{

if(typeof type == DataType.UNDEFINED)

  {

    return DataType.UNDEFINED;

  }

  else if(typeof type == "object")

  {

    if(type == null)

    {

      return DataType.NULL ;

    }

    else

    {

      if(typeof type.valueOf() == DataType.string)

      {

        return DataType.ObjectString

      }

      else if(typeof type.valueOf() == DataType.number)

      {

        return DataType.ObjectNumber;

      }

      else if(typeof type.valueOf() == DataType.boolean)

      {

        return DataType.ObjectBoolean;

      }

      else if(type instanceof Array)

      {

        return DataType.array;

      }

else if(type instanceof RegExp)

{

return DataType.RegExp;

}

else if(typeof type.constructor == DataType.function)

{

return type.constructor.toString().match(/^function +(.+)\(/)[1];

}

    }

  }

  else if(typeof type == DataType.function)

  {

    return DataType.function

  }

  else

  {

    return typeof type;

  }

}

jQuery-H5-css3转盘抽奖-遁地龙卷风的更多相关文章

  1. jquery——九宫格大转盘抽奖

    一.用到的图片 二.代码如下,重点是js部分 <!DOCTYPE html> <html> <head> <meta http-equiv="Con ...

  2. css3转盘抽奖

    做到一个活动,需要转盘抽奖,于是想到使用css3的动画效果,其中主要包含transition的动画过渡,transform的rotate的旋转效果,在这里只用到2d的旋转, 特别强调的是,因为需要和后 ...

  3. JQuery data方法的使用-遁地龙卷风

    (-1)说明 我用的是chrome49,这个方法涉及到JQuery版本问题,我手里有3.0的,有1.9.1,后面将1.9.1及其以前的称为低版本,3.0称为高版本 测试例子用到的showMessage ...

  4. JQuery simpleModal插件的使用-遁地龙卷风

    (0)写在前面 jquery.simpleModal.浏览器这三者的兼容性,不仅显示在报错上,还体现在所呈现的效果不是预期上. 说一下我的环境 jquery-1.8.3.js jquery.simpl ...

  5. JQuery插件Validation的使用-遁地龙卷风

    第二版 (-1)写在前面 本文不是要详细说明Validation插件的使用,而是将满足开发需求的代码已最应该使用的方式写出来,并附有详细的注释 想要了解更多,去jquery的官网,有最新,最全面的,后 ...

  6. 幸运大转盘-jQuery+PHP实现的抽奖程序

    目前好多网站上应用的转盘抽奖程序大多是基于flash的,而本文结合实例将使用jQuery和PHP来实现转盘抽奖程序,为了便于理解,作者分两部分来讲解,本文讲解第一部分,侧重使用jQuery实现转盘的转 ...

  7. jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现

    jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现 在线实例 查看演示 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...

  8. 纯CSS3大转盘抽奖(响应式、可配置)

    源于前段时候微信小程序最初火爆公测时段,把以前用 Canvas 实现的大转盘抽奖移植成微信小程序,无奈当时小程序对 Canvas 支持不够完善,只好降低用 CSS3 实现.虽然比不上 Canvas 绘 ...

  9. jquery转盘抽奖的研究

    先看效果: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...

随机推荐

  1. 第10章 Java类的三大特性之一:多态

    1.Java中的多态 多态是指对象的多种形态,主要包括这两种: 1.1引用多态 a.父类的引用可以指向本类的对象b.父类的引用可以指向子类的对象举个例子:父类Anmail,子类Dog,可以使用父类An ...

  2. U3D-页游-检测机制-webplayer-调试方法

    前言 页游目前有两个客户端入口: 网页端 (unity webplayer) 游戏微端 (unity standalone) 关于微端的技术,可参考我之前的文章: dotNet开发游戏微端 游戏微端的 ...

  3. 2.bootstrap练习笔记-轮播图

    bootstrap练习笔记-轮播图 1.要使用轮播图,首先要将其放在一个主div里面 设置id为myCaroysel class为carousel slide 设置id是标识这个div是轮播图,等到l ...

  4. cf Round 607

    A.Chain Reaction(DP+二分) 题意:一排有n个灯塔,每个灯塔给出坐标xi和力量yi,每次从最右边依次点亮灯塔,每点亮一个灯塔,它左边的距离它yi范围内的灯塔将受到损坏.现在允许在最右 ...

  5. css设置select高度(IE,FF,Chrome)[转]

    大家都知道select是无法设置高度和边框颜色等等的在ie67下面,其他的都是可以的,所以有时候为了在所有的浏览器下显示都一致,就使用了 js的模拟,这个是大家经常碰到的,js不光要模拟外观还有模拟事 ...

  6. 《如何在大学里脱颖而出(How to Win at College)》读书笔记

    <如何在大学里脱颖而出(How to Win at College)>读书笔记 图书简介 中文版: 英文版: 作者卡尔·纽波特(Cal Newport)于 2004 年6月以优等生荣誉学会 ...

  7. 详解 Android Activity 生命周期

    从以下几个方面详细说一下Activity的生命周期: 1.回到主屏幕再打开和退出程序的时候. 2.屏幕旋转的时候. 3.打开其它的Activity的情况. 4.打开一个Layou透明的Activity ...

  8. 分享一个自制的 .net线程池

    扯淡 由于项目需求,需要开发一些程序去爬取一些网站的信息,算是小爬虫程序吧.爬网页这东西是要经过网络传输,如果程序运行起来串行执行请求爬取,会很慢,我想没人会这样做.为了提高爬取效率,必须使用多线程并 ...

  9. 解决Xamarin Android墙的问题

    Xamarin Android项目在编译时会从google的服务器下载缺失的m2repository相关文件,虽然不明白这是干什么的,但是情况就是Andorid SDK Manager不会去下载这个东 ...

  10. I finally made sense of front end build tools. You can, too.

    来源于:https://medium.freecodecamp.com/making-sense-of-front-end-build-tools-3a1b3a87043b#.nvnd2vsd8   ...