我寫了一個腳本,其中有兩個函數由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