문제

멋진 애니메이션으로 페이지를 맨 위로 스크롤하여 "Going To Top"을 목적으로 페이지 전체에 몇 가지 링크가 있습니다. 예를 들어 페이지가 스크롤하는 동안 때때로 페이지가 스크롤하는 동안 예를 들어 아래로 스크롤하기를 원하지만 불가능합니다. 화면은 말더듬 만 있지만 상단에 도달 할 때까지 계속 애니메이션됩니다.

사용자가 스크롤을 시도하면 애니메이션을 중지하고 싶습니다. 따라서이 코드를 작성했습니다.

$('#gototop').click(function() {
    $('body').animate({scrollTop:0},3000);
    $(window).scroll(function () {
        $('body').stop();
});
    return false;
})

이 코드는 아미트 ()가 스크롤링으로 계산되므로 스크롤하기 때문에 문제가되므로 스스로를 멈추기 전에 약간만 움직입니다.

옵션으로 키 다운을 시도했지만 마우스 스크롤은 키로 등록되지 않습니다.

내 스크롤 함수를 호출 할 수있는 방법이 있습니까? 사용자 애니메이션 ()이 아닌 스크롤?

도움이 되었습니까?

해결책

애니메이션 값을 설정하기 위해 자신의 코드를 작성하고 변경이 애니메이션에서 나오는 것을 나타내는 플래그를 설정할 수 있습니다.

예 : (테스트되지 않은)

var scrollAnimating = false
jQuery.fx.step.scrollTop = function(E) {
    scrollAnimating = true;
    E.elem.scrollTop = E.now;
    scrollAnimating = false;
};

$('#gototop').click(function() {
    $('body').animate({scrollTop:0},3000);
    $(window).scroll(function () {
        if (!scrollAnimating)
            $('body').stop();
    });
    return false;
})

당신은 똑같은 일을 할 수 있습니다 scrollLeft.

그 설정을 가정하고 있습니다 scrollTop 재진입 전화입니다 scroll 이벤트는 라인 내부에서 발사됩니다 E.elem.scrollTop = E.now. 재진입이 아닌 경우 (일부 브라우저에만있을 수 있음) 이벤트는 이후에 해고됩니다. scrollAnimating 다시 설정됩니다 false. 이 문제를 해결하려면 재설정 할 수 있습니다 scrollAnimating 내부 scroll 이벤트.

다른 팁

나는 같은 문제가 있었지만 jQuery 문서에서 바로 해결책을 찾았습니다. 애니메이션이 완료 될 때 콜백 함수를 설정할 수있는 애니메이션 방법의 속성이 있습니다.

http://api.jquery.com/animate/#animate-properties-duration-easing-complete

코드는 다음과 같습니다.

$('#gototop').click(function() {

    //This will help you to check 
    var animationIsFinished = false;

    $('body').animate({scrollTop:0},3000,"swing",function(){

        //this function is called when animation is completed
        animationIsFinished = true;

    });
    $(window).scroll(function () {
        //Check if animation is completed
        if ( !animationIsFinished ){
            $('body').stop();
        }
    });
    return false;
})

그것을 알아 냈습니다! 인터넷을 둘러 본 후 나는 Document.addEventListener 모질라와 document.onmousewheel 스크롤 이벤트를 잡을 IE와 오페라의 경우.

$('#gototop').click(function() {
    $('body').animate({scrollTop:0},3000);

    if(window.addEventListener) document.addEventListener('DOMMouseScroll', stopScroll, false);
    document.onmousewheel = stopScroll;

    function stopScroll() {$('body').stop()};

    return false;
})
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top