我写了一个脚本,其中有两个函数由setInterval()
执行。setInterval()同时执行的两个函数正在相互减速
一个功能rotateTheSun()
不断旋转一个物体,另一个moveSlide()
处理移动滑动格onclick
。
每当常量函数运行时,div滑动速度非常慢。
这是一个JS问题,还是我写了一个坏脚本(像往常一样)?
来源:
window.onload = initAll;
function initAll(){
slideDivs = document.getElementsByClassName("slide");
slideLinks = document.getElementsByClassName("slide-link");
isMoving = false;
curSlideState = 2;
desSlideState = "";
transformDeg = 0;
for(var i=0; i < slideDivs.length; i++){
slideDivs[i].style.left = i*100 + "px";
}
for(var i=0; i < slideLinks.length; i++){
slideLinks[i].onclick = moveSlide;
}
rotatingSun = document.getElementById("rotating-sun");
rotatingSun.style.MozTransform = "rotate(" + transformDeg + "deg)";
rotatingSun.style.WebkitTransform = "rotate(" + transformDeg + "deg)";
rotatingSun.style.OTransform = "rotate(" + transformDeg + "deg)";
rotatingSun.style.transform = "rotate(" + transformDeg + "deg)";
sunTimer = setInterval(rotateTheSun, 33);
}
function moveSlide(){
elementToMove = this.parentNode.parentNode;
if(elementToMove.tagName == "DIV" && isMoving == false){
for(var i=0; i < slideDivs.length; i++){
if(elementToMove == slideDivs[i]){
desSlideState = i;
}
}
moveAction = (curSlideState - desSlideState);
if(moveAction == 0){
return false;
}
if(moveAction > 0){
moveDirection = 1;
}
else{
moveDirection = -1;
}
switch (moveAction){
case 0:
return false;
break;
case +2:
divToMove1 = slideDivs[1];
divToMove2 = slideDivs[2];
break;
case -2:
divToMove1 = slideDivs[2];
divToMove2 = slideDivs[1];
break;
case +1:
if(curSlideState == 2){
divToMove1 = slideDivs[2];
divToMove2 = "";
}
else{
divToMove1 = slideDivs[1];
divToMove2 = "";
}
break;
case -1:
if(curSlideState == 1){
divToMove1 = slideDivs[2];
divToMove2 = "";
}
else{
divToMove1 = slideDivs[1];
divToMove2 = "";
}
break;
}
}
else{
return false;
}
moveCounter = 0;
isMoving = true;
timeMove();
return false;
}
function timeMove(){
slideTimer = setInterval("executeMove()", 5);
}
function executeMove(){
curLeft1 = parseFloat(divToMove1.style.left);
if(divToMove2){
curLeft2 = parseFloat(divToMove2.style.left);
}
divToMove1.style.left = curLeft1 + 10*moveDirection + "px";
if(divToMove2){
divToMove2.style.left = curLeft2 + 10*moveDirection + "px";
}
moveCounter += 1;
if(moveCounter == 66){
clearInterval(slideTimer);
curSlideState = desSlideState;
isMoving = false;
}
}
function rotateTheSun(){
transformDeg += 0.1;
if(transformDeg > 360){
transformDeg = 0;
}
rotatingSun.style.MozTransform = "rotate(" + transformDeg + "deg)";
rotatingSun.style.WebkitTransform = "rotate(" + transformDeg + "deg)";
rotatingSun.style.OTransform = "rotate(" + transformDeg + "deg)";
rotatingSun.style.transform = "rotate(" + transformDeg + "deg)";
}
我改变了时间间隔为33,并传递了一个函数本身而不是一个字符串。 – Dean 2010-09-14 09:08:02
嗯,250毫秒≠2.5秒 – 2010-09-14 10:10:42
这是什么.....固定 – 2010-09-14 17:34:58