当用户进入页面并离开页面时,我想为网站进行一些简单的页面转换。
现在,我决定使用一个简单的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仍分配给元素,则添加一个检查。如果是:继续并触发另一次点击。如果不是:返回;