2012-05-03 3 views
0

div 애니메이션에 관한 질문을 먼저 게시했으며 약간 수정하려고합니다. 페이지가로드 될 때마다 회전하는 div이 있습니다. 그것 위로 공중 선회 할 때, 나는 그것을 멈추고 싶습니다.호버링을하지 않을 때 jquery 애니메이션을 중지 하시겠습니까?

여기 여기에 스크립트를

rotate(); //the function which rotates the div 
$("#div2").hover(function() { 
    $("#div2").stop(); 
});​ 

있어 내 JS 페이지

var obj = "div2"; 
var angle = 0; 
var interval = 2323; 
increment = 5; 

function rotate() { 
    $('#' + obj).css({ 
     '-moz-transform': 'rotate(' + angle + 'deg)', 
     'msTransform': 'rotate(' + angle + 'deg)', 
     '-webkit-transform': 'rotate(' + angle + 'deg)', 
     '-o-transform': 'rotate(' + angle + 'deg)' 
    }); 
    angle += increment; 
    setTimeout(rotate, interval); 
}​ 
+1

그럼 뭐가 문제 야? – xbonez

+0

호버링 할 때 실제로 멈추지 않을 것이라고 명시 적으로 명시해야합니까? – user1104854

+0

예, 도움을 줄 수있는 다른 세부 정보와 함께 – xbonez

답변

3

사용 clearTimeout() 방법입니다. 예를 들어 :

var obj = "div2"; 
var angle = 0; 
var interval = 100; 
var increment = 5; 
var timer = null; 

function rotate() { 
    $('#' + obj).css({ 
     '-moz-transform': 'rotate(' + angle + 'deg)', 
     'msTransform': 'rotate(' + angle + 'deg)', 
     '-webkit-transform': 'rotate(' + angle + 'deg)', 
     '-o-transform': 'rotate(' + angle + 'deg)' 
    }); 
    angle += increment; 
    timer = setTimeout(rotate, interval); 
} 

$("#div2").hover(function() { 
    clearTimeout(timer); 
}, function() { 
    rotate(); 
}); 

rotate(); //the function which rotates the div​​ 

DEMO : 당신이 회전 당신 자신의 구현을하고 http://jsfiddle.net/Uf9qZ/

+0

'rotate()'함수 내부를 검사하고'hover '로 전환하는 글로벌 부울을 제안하려고했지만 해결책은 훨씬 더 우아한. +1. – DangerMonkey

+0

제대로 작동하지 않습니다. 페이지가로드 될 때 회전하지 않지만 마우스를 올리거나 내리면 약간 회전합니다 (아마 5º). – user1104854

+0

@ user1104854 2.3 초에 5 % 각도 증가분을가집니다. 시간 증가를 줄이십시오. 답변 업데이트에서 데모를 확인하십시오. – VisioN

1

, 당신은뿐만 아니라 관리를 직접 처리해야하기 때문에 setTimeout 객체를 캐시하고 때 clearTimeout를 사용합니다 중지해야 그것을

+0

그래서 clearTimeout을 트리거하는 함수를 만들 수 있습니까? – user1104854

3
var elm = $("#div2"), 
    angle = 0, 
    interval = 2323, 
    increment = 5, 
    T = setInterval(rotate, interval); 

elm.on({ 
    mouseenter: function() { 
     clearInterval(T); 
    }, 
    mouseleave: function() { 
     T = setInterval(rotate, interval); 
    } 
}); 

function rotate() { 
    elm.css({ 
     '-moz-transform': 'rotate(' + angle + 'deg)', 
     'msTransform': 'rotate(' + angle + 'deg)', 
     '-webkit-transform': 'rotate(' + angle + 'deg)', 
     '-o-transform': 'rotate(' + angle + 'deg)' 
    }); 
    angle += increment; 
}​ 

FIDDLE

+0

+1은'setInterval' 변형입니다;) – VisioN

+0

고마워요, 이것도 작동합니다. 천천히 setinteral을 "down"시키는 어떤 방법이 있습니까? 1에서 2000까지 말한 다음 중지 하시겠습니까? – user1104854

관련 문제