2012-01-08 3 views
3

을 클릭 내가 함께 일하고 있어요 바이올린의 : http://jsfiddle.net/Scd9b/지연 링크는 여기에

가 어떻게 클릭 후 HREF 기능을 지연시킬 수는?

예를 들어 사용자가 링크를 클릭하면 메시지가 번 슬라이드 ...과 2 초 후 사용자는 링크 된 페이지로 계속 이동합니다.

죄송합니다. 모든 사람은 링크되지 않은 앵커가 있음을 잊어 버렸습니다.

답변

4

. 그래서 우리는 preventDefault와 링크의 정상적인 기능을 차단 한 후 setTimeout에, 우리는 올바른에서는 window.location을 설정합니다 :

http://jsfiddle.net/LwFkn/3/

+0

하지만 링크되지 않은 앵커도 있습니다. 이러한 URL은 정의되지 않은 URL로 리디렉션됩니다. 연결 해제 된 앵커를 리디렉션하지 않고이 스크립트를 작동시키는 방법은 무엇입니까? – henryaaron

+0

링크 해제로 인해 무엇을 의미합니까? – ctcherry

+0

'Hello ' – henryaaron

1

클릭을 취소하고 setTimeout을 사용하여 위치를 변경하십시오.

$(document).ready(function(){ 

    $("span.answer").hide(); 

    $("a.question").click(function(e){ 
     $(this).toggleClass("active").next().slideToggle("slow"); 
     e.preventDefault(); 
     var loc = this.href; 
     if(loc){ 
      window.setTimeout(function(){ window.location.href=loc; }, 2000); 
     } 
    }); 

}); 
+0

을뿐만 아니라 I 링크되지 않은 앵커가 있습니다. 이러한 URL은 정의되지 않은 URL로 리디렉션됩니다. 연결 해제 된 앵커를 리디렉션하지 않고이 스크립트를 작동시키는 방법은 무엇입니까? – henryaaron

+0

loc에 값이 있는지 확인하십시오. 편집 된 코드. 또는 href가 있는지 확인하는 선택기를 사용할 수 있습니다. a.question [href] – epascarello

0

먼저 링크의 기본 동작을 방지하십시오. 그런 다음 2 초의 제한 시간을 추가하십시오. 그러면 페이지가 링크의 href 속성에있는 url으로 리디렉션됩니다.

$("a.question").click(function(e){ 
    e.preventDefault(); 
    $(this).toggleClass("active").next().slideToggle("slow"); 
    setTimeout(function(){ 
     location.href = $(this).prop("href"); 
    }, 2000); 
}); 

Example.

+0

이것은 jQuery 1.4.2와 맞지 않을까요? – henryaaron

+0

'prop()'만 있습니다. 'attr()'로 바꾸면 괜찮을 것이다. 어쨌든 최신 버전을 사용하는 것이 좋습니다. – Purag

+0

나는 내 사이트가 나를 허용하지 않길 바란다. – henryaaron

1
$(document).ready(function(){ 

    $("span.answer").hide(); 

    $("a.question").click(function(e){ 
     e.preventDefault(); 
     $(this).toggleClass("active").next().slideToggle("slow"); 
     var Link = $(this).attr("href"); 
     setTimeout(function() 
     { 
      window.location.href = Link; 
     },2000); 
    }); 

}); 
+0

하지만 링크되지 않은 앵커도 있습니다. 이러한 URL은 정의되지 않은 URL로 리디렉션됩니다. 연결 해제 된 앵커를 리디렉션하지 않고이 스크립트를 작동시키는 방법은 무엇입니까? – henryaaron

+0

@ user1090389 -'$ ("a.question") 대신에'$ ("a.question [href]")'선택기를 사용하십시오. – techfoobar

+0

@techfoobar 그러나 여전히 애니메이션은 linked ... – henryaaron

0

클릭 핸들러에서 e.preventDefault는 어떻습니까? 그런 다음 목적지로 이동하는 setTimeout을 수행 하시겠습니까?

$("a.question").click(function(e){ 
    e.preventDefault(); 
    $(this).toggleClass("active").next().slideToggle("slow"); 
    setTimeout('window.location.href=' + $(this).attr(href), 2000); 
}); 
6

확인이 바이올린 : http://jsfiddle.net/C87wM/1/

이처럼 토글 수정 : 당신은 설정에서는 window.location하여 페이지로 이동 시뮬레이션 할 수 있습니다

$("a.question[href]").click(function(){ 
    var self = $(this); 
    self.toggleClass("active").next().slideToggle(2000, function() { 
     window.location.href = self.attr('href'); // go to href after the slide animation completes 
    }); 
    return false; // And also make sure you return false from your click handler. 
}); 
+2

+1은'setTimeout()'보다는 애니메이션의 완성 함수를 사용합니다. – jfriend00

+0

@ jfriend00 : 왜 더 나아 졌습니까? – Purag

+0

@Purmou 이렇게하면 사용자가 전체 애니메이션을 볼 수 있습니다. 또한이 방법을 사용하면 링크 지연이 애니메이션 재생 시간보다 더 길어지는 것에 대해 걱정할 필요가 없습니다. 즉 느린 속도 또는 빠른 속도 또는 2,000 등을 자유롭게 사용할 수 있습니다. – techfoobar

0

이 그것을 수행해야합니다

$("a[href]").click(function() { 
    var url = this.href; 
    setTimeout(function() { 
     location.href = url; 
    }, 2000); 
    return false; 
});