单击链接时页面淡出,mailto: 链接除外
Page fadeOut when links are clicked, except mailto: links
在下面的代码中,我淡出任何页面,然后在单击任何标签时淡入新页面。但是,在某些情况下,我们不希望在单击时淡出页面,例如,当标签设置为通过 target="_blank"
从外部打开时。下面的代码反映了这一点并且运行成功。
但是,我不确定如何实现的一件事是防止 link 包含 mailto: 引用时淡出,因为显然这是为了打开邮件客户端而设计的 window.所以我不希望页面淡出?
谢谢。
$(window).bind("pageshow", function(event) {
if (event.originalEvent.persisted) {
window.location.reload();
}
});
(function($) {
if (window.history) {
$(window).on('popstate', function() {
$("body").show();
});
}
// When links are clicked
$(document).on("click", "a", function() {
var $link = $(this);
var $href = $link.attr("href");
var $target = $link.attr("target");
// If link exists
if ($href) {
// Fade out all links unless set to open in external window target="_blank"
if ($target !== "_blank") {
$("body").fadeOut(250, function() {
history.pushState($href, null, null);
window.location.href = $href;
});
return false;
}
}
});
// On page load, fade in
$(document).ready(function() {
$("body").fadeTo(250, 1);
});
}(window.jQuery));
只需勾选 link url:
if($href.indexOf('mailto:') === 0){
//the url starts with mailto:
//it is an email link
}
更具体到您的用例,扩展检查 _blank
:
的 if 语句
if ($target !== "_blank" && $href.indexOf('mailto:') !== 0) {
//...
}
对于包含 mailto:
引用的 link,只需更改代码中的这一部分
if ($href) {
有了这个
if ($href && $href.indexOf('mailto:')!==-1) {
或者检查这个 fiddle 演示 :not
的用法。在您的情况下,不要忘记使用 event.preventDefault()
作为打开邮件客户端 window.
的 mailto links
一个非常优雅的方法是使用 css 属性的强大功能 select 或者并通过验证,所以你只需要这个:
$(document).on('click','a[href]:not([href^=mailto],[target="_blank"])',function(){
$("body").fadeOut(250, function() {
history.pushState(this.href, null, null);
window.location.href = this.href;
});
return false;
})
这是 "magic" 发生的地方:a[href]:not([href^=mailto],[target="_blank"])
(已更新以包含 "has href
" 子句
我只 select 链接 href 不以 mailto
开头并且没有 target="_blank"
有关属性的更多信息 select或:https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
在下面的代码中,我淡出任何页面,然后在单击任何标签时淡入新页面。但是,在某些情况下,我们不希望在单击时淡出页面,例如,当标签设置为通过 target="_blank"
从外部打开时。下面的代码反映了这一点并且运行成功。
但是,我不确定如何实现的一件事是防止 link 包含 mailto: 引用时淡出,因为显然这是为了打开邮件客户端而设计的 window.所以我不希望页面淡出?
谢谢。
$(window).bind("pageshow", function(event) {
if (event.originalEvent.persisted) {
window.location.reload();
}
});
(function($) {
if (window.history) {
$(window).on('popstate', function() {
$("body").show();
});
}
// When links are clicked
$(document).on("click", "a", function() {
var $link = $(this);
var $href = $link.attr("href");
var $target = $link.attr("target");
// If link exists
if ($href) {
// Fade out all links unless set to open in external window target="_blank"
if ($target !== "_blank") {
$("body").fadeOut(250, function() {
history.pushState($href, null, null);
window.location.href = $href;
});
return false;
}
}
});
// On page load, fade in
$(document).ready(function() {
$("body").fadeTo(250, 1);
});
}(window.jQuery));
只需勾选 link url:
if($href.indexOf('mailto:') === 0){
//the url starts with mailto:
//it is an email link
}
更具体到您的用例,扩展检查 _blank
:
if ($target !== "_blank" && $href.indexOf('mailto:') !== 0) {
//...
}
对于包含 mailto:
引用的 link,只需更改代码中的这一部分
if ($href) {
有了这个
if ($href && $href.indexOf('mailto:')!==-1) {
或者检查这个 fiddle 演示 :not
的用法。在您的情况下,不要忘记使用 event.preventDefault()
作为打开邮件客户端 window.
一个非常优雅的方法是使用 css 属性的强大功能 select 或者并通过验证,所以你只需要这个:
$(document).on('click','a[href]:not([href^=mailto],[target="_blank"])',function(){
$("body").fadeOut(250, function() {
history.pushState(this.href, null, null);
window.location.href = this.href;
});
return false;
})
这是 "magic" 发生的地方:a[href]:not([href^=mailto],[target="_blank"])
(已更新以包含 "has href
" 子句
我只 select 链接 href 不以 mailto
开头并且没有 target="_blank"
有关属性的更多信息 select或:https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors