如何在卸载页面之前激发CSS转换



当用户进入页面并离开页面时,我想为网站进行一些简单的页面转换。

现在,我决定使用一个简单的CSS转换。我在页面中添加了一个元素.amb-preloader,默认情况下它是一个覆盖整个屏幕的灰色矩形。当页面加载时,我在元素中添加一个类,使矩形消失:

$(document).ready(function() {
$('.amb-preloader').addClass('amb-loaded');
});

现在我想要一些相似但相反的东西,当用户点击链接时。类.amb-loaded应该从.amb-preloader中删除,然后出现灰色矩形(需要600ms(。在那600毫秒之后,当灰色矩形出现在所有内容的前面时,浏览器应该像往常一样转到下一页。

我是这样做的:

$('a').click(function(e){
var url = $(this).attr('href');
var element = $(this);

$(this).preventDefault();

$('.amb-preloader').removeClass('amb-loaded');
$(this).trigger('click');

});

这种行为在除Safari之外的所有浏览器中都非常有效。在我所有的苹果设备上,Safari都不起作用。

我在Safari的控制台上检查了这一点,它给了我错误RangeError: Maximum call stack size exceeded。我在互联网上搜索了这个,它说一个函数调用自己,因此保持循环。

我不知道为什么它在Safari中不起作用,而在其他浏览器中却起作用。你知道我应该怎么做才能在Safari上修复它吗?或者这部动画还有更好的替代品吗?

也许完整的错误信息会有所帮助:

[Error] RangeError: Maximum call stack size exceeded.
n (jquery.js:2:420)
pushStack (jquery.js:2:764)
find (jquery.js:2:24069)
(anonieme functie) (jquery-migrate.min.js:2:8937)
(anonieme functie) (jquery.js:2:24601)
(anonieme functie) (jquery-migrate.min.js:2:3143)
n (jquery.js:2:420)
(anonieme functie) (pageload.js:17)
dispatch (jquery.js:3:12375)
(anonieme functie) (jquery.js:3:9094)
trigger (jquery.js:3:11494)
(anonieme functie) (jquery-migrate.min.js:2:8280)
(anonieme functie) (jquery.js:3:18873)
each (jquery.js:2:2908)
each (jquery.js:2:851)
trigger (jquery.js:3:18846)
(anonieme functie) (pageload.js:18)
dispatch (jquery.js:3:12375)
(anonieme functie) (jquery.js:3:9094)
trigger (jquery.js:3:11494)
(anonieme functie) (jquery-migrate.min.js:2:8280)
(anonieme functie) (jquery.js:3:18873)
each (jquery.js:2:2908)
each (jquery.js:2:851)
trigger (jquery.js:3:18846)
(anonieme functie) (pageload.js:18)
dispatch (jquery.js:3:12375)
(anonieme functie) (jquery.js:3:9094)
trigger (jquery.js:3:11494)
(anonieme functie) (jquery-migrate.min.js:2:8280)
(anonieme functie) (jquery.js:3:18873)
each (jquery.js:2:2908)
each (jquery.js:2:851)
trigger (jquery.js:3:18846)
(anonieme functie) (pageload.js:18)
dispatch (jquery.js:3:12375)
(anonieme functie) (jquery.js:3:9094)
trigger (jquery.js:3:11494)
(anonieme functie) (jquery-migrate.min.js:2:8280)
(anonieme functie) (jquery.js:3:18873)
each (jquery.js:2:2908)
each (jquery.js:2:851)
trigger (jquery.js:3:18846)
(anonieme functie) (pageload.js:18)
dispatch (jquery.js:3:12375)
(anonieme functie) (jquery.js:3:9094)
trigger (jquery.js:3:11494)
(anonieme functie) (jquery-migrate.min.js:2:8280)
(anonieme functie) (jquery.js:3:18873)
each (jquery.js:2:2908)
each (jquery.js:2:851)
trigger (jquery.js:3:18846)
(anonieme functie) (pageload.js:18)
dispatch (jquery.js:3:12375)
(anonieme functie) (jquery.js:3:9094)
trigger (jquery.js:3:11494)
(anonieme functie) (jquery-migrate.min.js:2:8280)
(anonieme functie) (jquery.js:3:18873)
each (jquery.js:2:2908)
each (jquery.js:2:851)
trigger (jquery.js:3:18846)
(anonieme functie) (pageload.js:18)
dispatch (jquery.js:3:12375)
(anonieme functie) (jquery.js:3:9094)
trigger (jquery.js:3:11494)
(anonieme functie) (jquery-migrate.min.js:2:8280)
(anonieme functie) (jquery.js:3:18873)
each (jquery.js:2:2908)
each (jquery.js:2:851)
trigger (jquery.js:3:18846)
(anonieme functie) (pageload.js:18)
dispatch (jquery.js:3:12375)
(anonieme functie) (jquery.js:3:9094)
trigger (jquery.js:3:11494)
(anonieme functie) (jquery-migrate.min.js:2:8280)
(anonieme functie) (jquery.js:3:18873)
each (jquery.js:2:2908)
each (jquery.js:2:851)
trigger (jquery.js:3:18846)
(anonieme functie) (pageload.js:18)
dispatch (jquery.js:3:12375)
(anonieme functie) (jquery.js:3:9094)
trigger (jquery.js:3:11494)
(anonieme functie) (jquery-migrate.min.js:2:8280)
(anonieme functie) (jquery.js:3:18873)
each (jquery.js:2:2908)
each (jquery.js:2:851)
trigger (jquery.js:3:18846)
(anonieme functie) (pageload.js:18)
dispatch (jquery.js:3:12375)
(anonieme functie) (jquery.js:3:9094)
trigger (jquery.js:3:11494)
(anonieme functie) (jquery-migrate.min.js:2:8280)
(anonieme functie) (jquery.js:3:18873)
each (jquery.js:2:2908)
each (jquery.js:2:851)
trigger (jquery.js:3:18846)
(anonieme functie) (pageload.js:18)
dispatch (jquery.js:3:12375)
(anonieme functie) (jquery.js:3:9094)

(anonieme functie=匿名函数,荷兰语直译(

非常感谢!

最终解决方案

感谢StefanN的回答,我对其进行了一点修改,最终的解决方案代码如下:

$('a').click(function(event) {
var url = $(this).attr('href');
var element = $(this);
event.preventDefault();

if ($('.amb-preloader').hasClass('amb-loaded')) {
$('.amb-preloader').removeClass('amb-loaded');    
setTimeout(function() {
window.location.href = url;
}, 300);
} else {
return;
}
});

$('a').click(function(e) {
var url = $(this).attr('href');
var element = $(this);
$(this).preventDefault
if ($('.amb-preloader').hasClass('amb-loaded')) {
$('.amb-preloader').removeClass('amb-loaded');
$(this).trigger('click');
} else {
return;
}
});

您的代码呈现在一个无限循环中。这将导致再次单击:$(this(.触发器('click'(;

解决方案是,如果className仍分配给元素,则添加一个检查。如果是:继续并触发另一次点击。如果不是:返回;

相关内容

  • 没有找到相关文章

最新更新