这个需要注意的是:
无论你怎么使用setInterval(),一定要注意【设表先关】,先clearInterval()
【否则】会产生的问题是:你的动画是越来越快,也就是setInterval嵌套使用时,内部的会越来越快,但是当先clearInterval之后这个问题就可以得到解决
1、如何定时向后台发送请求?setInterval();
// 使用setInterval定时器向后台发送请求时,一定要先清除定时器,然后再设置 clearInterval(outerTimer); outerTimer = setInterval(getFromRD,60000);
2、getFromRD代码
// 每隔一段时间向后台发一次请求
var getFromRD= function() {
var htmlStr = '';
$.ajax({
type:'get',
url:'json/prizeList.json',
dataType:'json', //注意因为这里使用的是测试数据prizeList.json,所以是json;换成线上url之后就要使用jsonp了
success:function (data) {
if(data.state < 0) {
console.log('系统异常');
return;
}else {
var data = data.data;
var dataPrizeList = data.prizeList;
// 一二三等奖区
if (!!data.firstPrize) {
$(".firstprize").html(data.firstPrize.userName || '虚位以待');
}
if(!!data.secondPrize) {
$(".secondprize").html(data.secondPrize.userName || '虚位以待');
}
if(!!data.thirdPrize) {
$(".thirdprize").html(data.thirdPrize.userName || '虚位以待');
}
// 中奖展示区
for(var i=0; i<dataPrizeList.length; i++) {
htmlStr += '<li>'+
'<span>'+dataPrizeList[i].userName+'</span>'+
'<span>抽中了</span>'+
'<span>'+dataPrizeList[i].prizeName+'</span>'+
'</li>';
}
$(".roll ul").html(htmlStr);
prizeListRoll(); // 调用滚动动画
}
},
error:function (err) {
console.log(err)
}
});
}
3、滚动动画函数 prizeListRoll
// prizeListRoll
// 两个接收定时器的变量
var outerTimer,
innerTimer;
// 中奖列表滚动动画
var prizeListRoll = function () {
// 中奖盒子
var $roll = $(".roll");
// 要滚动的盒子
var $rollUl = $(".roll ul");
var nowTop = 0;
// 有几条中奖信息
var liLength = $roll.find("li").length;
// 每条中奖展示信息的高度
var liHeight = $roll.find("li").outerHeight();
// 所有中奖展示信息的高度
var allLiHeight = parseInt(liHeight*liLength);
// 滚动的速度
var rollSpeed = 90;
var timer;
// 当中奖信息>=5时开始滚动
if (liLength>=5) {
// 拷贝所有的中奖信息li并追加到最后ul
$rollUl.find('li').clone().appendTo($rollUl);
// 滚动动画
var listRoll = function () {
nowTop -= 1;
if (nowTop <= -allLiHeight) {
nowTop = 0;
}
$rollUl.css("top",nowTop);
}
clearInterval(innerTimer);
innerTimer = setInterval(listRoll,rollSpeed);
}
// 鼠标移动/离开盒子时的动画
$roll.mouseenter(function () {
clearInterval(innerTimer);
}).mouseleave(function () {
clearInterval(innerTimer);
innerTimer = setInterval(listRoll,rollSpeed);
});
}