js组件slotmachine_SlotMachine

// SlotMachine

var goButton = $("#go_button");

var completed = 0,

imgHeight = 776,

posArr = [

0, //4.4

194, //12.5

194*2, //38.1

194*3

];

window.setTimeout(function(){

go();

},600);

$.addPressListener(goButton,

{

"onPressEnd": function (event)

{

go();

}

});

function go(){

document.body.style.pointerEvents = "none";

a.start();

b.start();

c.start();

$(‘#text‘).style.webkitTransition = "opacity 1s";

$(‘#text‘).style.opacity = "0";

disableControl()

x = window.setInterval(function() {

if(a.speed >= a.maxSpeed && b.speed >= b.maxSpeed && c.speed >= c.maxSpeed) {

enableControl();

window.clearInterval(x);

}

}, 100);

window.setTimeout(function(){

a.stop();

b.stop();

c.stop();

window.setTimeout(function(){

$(‘#text‘).style.webkitTransition = "opacity 1s";

$(‘#text‘).style.opacity = "1";

document.body.style.pointerEvents = "auto";

},2500);

},3500);

}

function enableControl() {

J(‘#go_button‘).attr("disabled", false);

}

function disableControl() {

J(‘#go_button‘).attr("disabled", true);

}

//create slot objects

var a = new Slot(‘#machine1‘, 70, 3.5),

b = new Slot(‘#machine2‘, 65, 3),

c = new Slot(‘#machine3‘, 70, 4);

function Slot(el, max, step) {

this.speed = 0; //speed of the slot at any point of time

this.step = step; //speed will increase at this rate

this.si = null; //holds setInterval object for the given slot

this.el = el; //dom element of the slot

this.maxSpeed = max; //max speed this slot can have

this.pos = null; //final position of the slot

J(el).pan({

fps:30,

dir:‘down‘

});

J(el).spStop();

}

//start

Slot.prototype.start = function() {

var _this = this;

// J(_this.el)[0].style.backgroundImage = "url(../images/reel_blur.png)";

J(_this.el).spStart();

_this.si = window.setInterval(function() {

if(_this.speed < _this.maxSpeed) {

_this.speed += _this.step;

J(_this.el).spSpeed(_this.speed);

}

}, 100);

};

//stop

Slot.prototype.stop = function() {

var _this = this,

limit = 15;

clearInterval(_this.si);

_this.si = window.setInterval(function() {

if(_this.speed > limit) {

_this.speed -= _this.step;

J(_this.el).spSpeed(_this.speed);

}

if(_this.speed <= limit) {

_this.finalPos(_this.el);

J(_this.el).spSpeed(0);

J(_this.el).spStop();

clearInterval(_this.si);

J(_this.el).removeClass(‘motion‘);

_this.speed = 0;

}

}, 100);

};

//final Position

Slot.prototype.finalPos = function() {

var el = this.el,

el_id,

pos,

posMin = 2000000000,

best,

bgPos,

i,

j,

k;

el_id = J(el).attr(‘id‘);

//pos = J(el).css(‘background-position‘); //for some unknown reason, this does not work in IE

pos = document.getElementById(el_id).style.backgroundPosition;

pos = pos.split(‘ ‘)[1];

pos = parseInt(pos, 10);

for(i = 0; i < posArr.length; i++) {

for(j = 0;;j++) {

k = posArr[i] + (imgHeight * j);

if(k > pos) {

if((k - pos) < posMin) {

posMin = k - pos;

best = k;

this.pos = posArr[i]; //update the final position of the slot

}

break;

}

}

}

var number = Math.floor(best / imgHeight);

best = number * imgHeight + imgHeight / 2;//fixed position

bgPos = "0 " + best + "px";

J(el).animate({

backgroundPosition:"(" + bgPos + ")"

}, {

duration: 1000,

complete: function() {

completed ++;

}

});

};

#SlotMachine-background

{

position:absolute;

left: 98px;

top: 223px;

width: 734px;

height: 442px;

background-image: url(../images/SlotMachine-background.98-223.png);

background-size: 734px 442px;

background-repeat: no-repeat;

}

#go_button{

width: 44px;

height: 220px;

left: 678px;

top: 120px;

position: absolute;

}

#machine1, #machine2, #machine3{

position: absolute;

width: 148px;

height: 194px;

}

#machine1{

background-image: url(../images/reel_normal-1.png);

left: 137px;

top: 127px;

}

#machine2{

background-image: url(../images/reel_normal-2.png);

left: 314px;

top: 127px;

}

#machine3{

background-image: url(../images/reel_normal-3.png);

left: 490px;

top: 127px;

}

#text

{

position:absolute;

left: 278px;

top: 488px;

width: 419px;

height: 37px;

background-image: url(../images/text.278-488.png);

background-size: 419px 37px;

background-repeat: no-repeat;

opacity: 0;

}

#title-text

{

position:absolute;

left: 230px;

top: 269px;

width: 497px;

height: 60px;

background-image: url(../images/title-text.230-269.png);

background-size: 497px 60px;

background-repeat: no-repeat;

}

#paper-pop-up

{

background-image: url(../../_/images/paper-list.png);

background-position: center;

}

#paper-pop-up >.close-button

{

position:absolute;

left: 945px;

top: 85px;

width: 42px;

height: 42px;

opacity: 0;

}

用到的框架:

jquery-1.6.1.min.js

jquery.backgroundPosition.js

jquery.spritely.js

原文:http://www.cnblogs.com/MartinCorner/p/3799896.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值