样式表完成加载后如何运行函数?
这是我的代码..
var d = document,
css = d.head.appendChild(d.createElement('link'))
css.rel = 'stylesheet';
css.type = 'text/css';
css.href = "https://unpkg.com/tachyons@4.10.0/css/tachyons.css"
样式表完成加载后如何运行函数?
这是我的代码..
var d = document,
css = d.head.appendChild(d.createElement('link'))
css.rel = 'stylesheet';
css.type = 'text/css';
css.href = "https://unpkg.com/tachyons@4.10.0/css/tachyons.css"
根据 MDN 的<link>: The External Resource Link element,
load
您可以通过观察触发事件来确定样式表何时加载;同样,您可以通过观察事件来检测在处理样式表时是否发生错误error
:<script> var myStylesheet = document.querySelector('#my-stylesheet'); myStylesheet.onload = function() { // Do something interesting; the sheet has been loaded } myStylesheet.onerror = function() { console.log("An error occurred loading the stylesheet!"); } </script> <link rel="stylesheet" href="mystylesheet.css" id="my-stylesheet">
注意:
load
一旦样式表及其所有导入的内容被加载和解析,并且在样式开始应用于内容之前,该事件就会触发。
这是针对接受CSS onload的现代浏览器优化的跨浏览器解决方案。它可以追溯到 2011 年,当时只有 Opera 和 Internet Explorer 分别支持 css 上的 onload 事件和 onreadystatechange。请参阅下面的链接。
var d = document,
css = d.head.appendChild(d.createElement('link')),
src = "https://unpkg.com/tachyons@4.10.0/css/tachyons.css"
css.rel = 'stylesheet';
css.type = 'text/css';
css.href = src
在加载器之后添加这个
if (typeof css.onload != 'undefined') css.onload = myFun;
else {
var img = d.createElement("img");
img.onerror = function() {
myFun();
d.body.removeChild(img);
}
d.body.appendChild(img);
img.src = src;
}
function myFun() {
/* ..... CONTINUE CODE HERE ..... */
}
答案基于此链接说:
幕后发生的事情是浏览器尝试在img元素中加载 CSS,并且由于样式表不是图像类型,所以img元素会引发onerror事件并执行我们的函数。值得庆幸的是,浏览器会在确定它不是图像并触发onerror事件之前加载整个 CSS 文件。