function runLottey(Elem){ // 1. 获取画布对象 var context = Elem.getContext('2d'); // 2. 获取画布的宽度和高度 const WIDTH = Elem.width; const HEIGHT = Elem.height; // 3. 将抽奖图片加载 var as = new Image(); as.src = "img/as.png";// 相对于index.html页面 var pin = new Image(); pin.src = "img/pin.png"; // 4. 平移整个画布 context.translate(WIDTH/2,HEIGHT/2); // 5. 动态绘制 var loop = setInterval(draw,50); // 6. 初始化旋转的角度值 - 生成随机数(0 - 360) var pie = Math.random()*(Math.PI*2); // 7. 定义每次旋转增加的角度值 var addPie = 0; // 8. 定义每次旋转差值 var add = Math.PI/180; // 8. 定义开始旋转的时间 var startTime; // 8. 定义专门用于绘制图片的函数 function draw(){ // 旋转后,每次增加的角度值+addPie if(addPie == 0){ addPie += addPie; }else{ addPie += add; } // 旋转并绘制转盘图片 context.rotate(pie + addPie); myDraw(as,-as.width/2,-as.height/2); // 旋转并绘制指针图片 context.rotate(-(pie + addPie)); myDraw(pin,-pin.width/2+10,-pin.height/2-10); // 获取当前的时间 var endTime = new Date().getTime(); // 判断如果执行了10秒,执行旋转 if((endTime-startTime) <= 5000){ // 加速旋转 add += Math.PI/360; }else if((endTime-startTime) > 5000 && (endTime-startTime) < 10000){ // 减速旋转 add -= Math.PI/360; }else if((endTime-startTime) >= 10000){ clearInterval(loop); loop=null; $("#btnLottery").removeAttr("disabled"); } } function start(){ addPie = Math.PI/180; startTime = new Date().getTime(); // 将按钮变为不可操作 $("#btnLottery").attr("disabled","disabled"); } // 通用的绘制图片的方法 function myDraw(img,x,y){ context.drawImage(img,x,y); } return start; }
//HTML的代码 var start = runLottey($("#lotteryCvs")[0]); $("#btnLottery").click(function(){ start(); });
问题:第一次点击按钮时,转盘能旋转,等停止再次点击按钮,转盘不转了,请问是不是定时器的原因?
你要把 setInterval(draw,50) 放进 start里面,
第一次执行了runLottey($("#lotteryCvs")[0]); 定时器存在没问题;
再点击定时器已经不存在了
但是我把定时器放在里面的时候他就不会停止了,第一个定时器执行完,第二个定时器一直执行,请问一下具体怎么改才好?
@钱钱钱啊: 主要是变量作业域问题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"></script>
</head>
<body >
<input type="button" id="btnLottery" value="Start" />
<script>
function runLottey(){
// 7. 定义每次旋转增加的角度值
this.addPie = 0;
// 8. 定义每次旋转差值
this.add = 5;
// 8. 定义开始旋转的时间
this.startTime=new Date().getTime();;
this.endTime = new Date().getTime();
// 8. 定义专门用于绘制图片的函数
function draw(){
// 旋转后,每次增加的角度值+addPie
if(addPie == 0){
addPie += 1;
}else{
addPie += add;
}
console.debug(addPie);
// 获取当前的时间
endTime = new Date().getTime();
// 判断如果执行了10秒,执行旋转
if((endTime-startTime) <= 5000){
// 加速旋转
console.debug("+5");
add += 5;
}else if((endTime-startTime) > 5000 && (endTime-startTime) < 10000){
// 减速旋转
console.debug("-5");
add -= 5;
}else if((endTime-startTime) >= 10000){
clearInterval(loop);
loop=null;
console.debug("done");
$("#btnLottery").removeAttr("disabled");
}
}
function start(){
this.addPie = 0;
this.startTime = new Date().getTime();
this.loop = setInterval(draw,1000);
// 将按钮变为不可操作
$("#btnLottery").attr("disabled","disabled");
}
return start;
}
var start = runLottey();
$("#btnLottery").click(function(){
start();
});
start();
</script>
</body>
</html>
控制台报什么错误了没?
我看你的start方法写了两个,这样怕是会出问题
没有-.-