异步加载特定的 CSS,并在加载时删除等待消息
Load specific CSS asynchronously and when it is loaded remove waiting message
提高速度并快速向用户显示某些内容。我正在尝试阻止渲染阻塞 css 并使用一些 js 代码异步加载它。我在页面上只有一个css来维护整个页面的设计。我想向用户显示一些请等待的消息,直到此 css 文件加载未完成。
此 CSS 文件的加载完成后,请立即删除此消息。无论所有其他资源加载是否完成。
我正在尝试按照谷歌的建议使用以下js代码(优化CSS交付)来加载css文件:
<script>
var cb = function() {
var l = document.createElement('link'); l.rel = 'stylesheet';
l.href = 'small.css';
var h = document.getElementsByTagName('head')[0]; h.parentNode.insertBefore(l, h);
};
var raf = requestAnimationFrame || mozRequestAnimationFrame ||
webkitRequestAnimationFrame || msRequestAnimationFrame;
if (raf) raf(cb);
else window.addEventListener('load', cb);
</script>
我尝试了以下代码来显示请等待消息:
<script>
document.onreadystatechange = function () {
var state = document.readyState
if (state == 'complete') {
document.getElementById('interactive');
document.getElementById('load').style.visibility = "hidden";
}
}
</script>
但是这段代码会阻止页面,直到所有资源都没有下载,无论是图像、js 还是 css。但我只是希望它发生在特定的 CSS 文件上以避免 FOUC
您可以在默认 CSS 中定义一个预加载器(每次都会加载的那个):
#load {
display: block;
}
在你想要获取的CSS中(small.css
),你可以覆盖定义:
#load {
display: none;
}
文件加载后,由于定义覆盖,加载器也会隐藏。
如果你被允许使用 jquery,那么
$.get(url, function(){
$('<link>', {rel:'stylesheet', type:'text/css', 'href':url}).appendTo('head');
});
})
).then(function(){
//your callback function
}
相关文章:
- 如何删除视频's缩略图时's加载在JW Player's闪光模式
- Javascript图像数组预加载速度和从内存中删除
- 删除Ajax加载内容上的css类
- 在iframe加载后删除类
- 在页面加载时删除CSS模式Flash
- Ajax 加载 GIF 不会在成功时删除
- 异步加载特定的 CSS,并在加载时删除等待消息
- 删除加载javascript/css时的页面闪烁
- 如何在聚合物WebComponentsReady加载后删除预加载器
- 在页面加载时创建/设置活动的默认链接,但在单击其他链接时删除活动链接
- 删除在加载dom之后创建的动态元素
- removeChild,然后再次添加以前删除的Child以重新加载并清理它
- javascript页面加载检查是否存在具有特定类的span(在<tr>下),如果不存在,则删除整个<
- 如何从加载到javascript中的导出XML数据中删除不需要的空格
- 删除条目时Ajax不会重新加载表
- 删除ajax加载的内容和脚本
- 如何删除索引中加载的脚本文件中的重复项.html和业力
- 如何在 DOM 加载后使用 JavaScript 或 JQuery 从 href 属性中删除字符
- 当 AJAX 加载内容时,喜欢和删除按钮不起作用
- 删除不需要的javascript和css是否包括减轻网页加载时间