2012-01-08 129 views
3

这里是我的工作小提琴:http://jsfiddle.net/Scd9b/延迟的链路点击

我怎样才能延缓点击后的HREF功能?

例如用户点击链接,消息滑落有一瞬间...和2秒后用户继续到其链接的页面。

对不起,每个人都忘了提及有一些没有链接的锚。

回答

4

您可以模拟通过设置window.location的导航到一个页面。因此,我们将阻止该链接的正常功能与preventDefault,然后在setTimeout,我们将设置正确window.location的:

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

+0

但我也有一些没有链接的锚点。这些被重定向到一个未定义的URL。任何方式让这个脚本工作与重定向未链接的锚点? – henryaaron 2012-01-08 05:24:46

+0

你是什么意思取消联系? – ctcherry 2012-01-08 05:26:09

+0

'Hello' – henryaaron 2012-01-08 05:26:58

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

但我也有一些锚链没有链接。这些被重定向到一个未定义的URL。任何方式让这个脚本工作与重定向未链接的锚点? – henryaaron 2012-01-08 05:26:10

+0

检查loc是否有值。编辑的代码。或者你可以使用一个确保它有href的选择器。 a.question [href] – epascarello 2012-01-08 05:50:45

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 2012-01-08 05:25:52

+0

只有'prop()'。用'attr()'替换它,你会没事的。尽管我推荐使用最新版本。 – Purag 2012-01-08 05:32:38

+0

我希望...我的网站不会让我。 – henryaaron 2012-01-08 05:33:10

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。任何方式让这个脚本工作与重定向未链接的锚点? – henryaaron 2012-01-08 05:25:03

+0

@ user1090389 - 为此使用'$(“a.question [href]”)''选择器而不是'$(“a.question”)' – techfoobar 2012-01-08 05:27:34

+0

@techfoobar但是我仍然希望动画能够处理那些不是链接... – henryaaron 2012-01-08 05:29:09

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/

修改您的切换是这样的:

$("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

用于使用动画的完成功能而不是'setTimeout()'。 – jfriend00 2012-01-08 05:21:13

+0

@ jfriend00:为什么它更好? – Purag 2012-01-08 05:22:29

+0

@Purmou这样我们可以确定用户看到完整的动画。也是这样,我们不必担心链接延迟超过动画持续时间。即我们可以自由使用慢速或快速或2000等。 – techfoobar 2012-01-08 05:26:19

0

这应做到:

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