我正在使用Turbolinks,我有一个在页面之间发生的加载动画。我目前正在使用page:load来完成动画,但是,似乎page:load就像文档就绪而不是window.on加载。
我想要的效果是,当页面加载时,我会在内容上显示叠加层,并在其上方加载动画。一旦页面完全加载(包含图像,对象等),它将淡出叠加层以显示内容。
正在发生的事情是在页面完全加载之前显示内容。这是我正在使用的JavaScript。
(function () {
function showPreloader() {
Turbolinks.enableProgressBar();
$('#status').fadeIn('slow');
$('#preloader').delay(300).fadeIn('slow');
}
function hidePreloader() {
$('#status').fadeOut();
$('#preloader').delay(300).fadeOut('slow');
}
$(document).on('page:fetch', showPreloader);
$(document).on('page:load', hidePreloader);
$(window).on('load', hidePreloader);
})()
答案 0 :(得分:5)
这种解决方法适用于turbolinks 5,但应该很容易适应。
由于turbolinks缓存,它会立即显示加载,它会在进行ajax调用之前呈现页面,从而打破动画。
为了使加载效果有效,我们必须禁用它:
<head>
....
<meta name="turbolinks-cache-control" content="no-cache">
然后我们可以做类似的事情:(使用animated.css)
$(document).on('turbolinks:click', function(){
$('.page-content')
.addClass('animated fadeOut')
.off('webkitAnimationEnd oanimationend msAnimationEnd animationend')
});
$(document).on('turbolinks:load', function(event){
// if call was fired by turbolinks
if (event.originalEvent.data.timing.visitStart) {
$('.page-content')
.addClass('animated fadeIn')
.one('webkitAnimationEnd oanimationend msAnimationEnd animationend', function(){
$('.page-content').removeClass('animated');
});
}else{
$('.page-content').removeClass('hide')
}
...
有了这个,过渡很顺利。
答案 1 :(得分:2)
开箱即用这似乎不可能。
我的解决方案策略是使用像imagesLoaded这样的库。
在$(document).on('page:load', function() {
$('body').imagesLoaded(hidePreloader);
});
上,您将设置一个 imagesLoaded 观察者,在其中触发动画结束。这样你可以延迟它直到加载所有新图像......
代码看起来像这样:
{{1}}
答案 2 :(得分:0)
试试这个:
HTML:
<video>
JS:
<!--top-->
<div style="background-color:
/*background color*/
white
;width:100vw;height:100vh;z-index:999999;position:fixed;top:0;left:0;right:0;bottom:0;background:url(
/*or URL*/
background.jpg
) center center no-repeat;background-size:cover;" id="pgLoader">
<!--document.querySelector("#pgloader loader")
where loader goes-->
<loader style="position:fixed;top:
/*may need to change*/
40%
;left:0;right:0;bottom:0;width:100%;height:100%;text-align:center;">
Loading...
</loader>
</div>
<!--rest of page-->
<h1>hello!</h1>
Blablabla
<img src="http://lorempixel.com/200/200/abstract/">
(再次按下输出按钮刷新演示)