在dom准备好之前交换css文件,因为我不想让我的页面轻弹
Swap css files before dom is ready as i dont want my page to flick?
磁头
<head>
<meta charset="UTF-8"/>
<title>abc</title>
<script type='text/javascript' src='/js/jquery-min.js'></script>
<link rel="stylesheet" type="text/css" href="/css/style.css">
<script type='text/javascript' src='/js/service.js'></script>
</head>
问题我想在dom准备好删除css并动态添加css(我从json对象中获得其文件路径(之前进行检查。我必须这样做的问题是,在交换css文件时,我可以看到页面上的行为(如闪烁(。想法?
service.js内部的方法
parse : function(data){
var fileName = data.css;
var styleFound = false;
$('link').each(function(){
for(i=0; i<fileName.length;i++){
if($(this).attr('href')=== fileName[i].file){
styleFound = true;
$(this).remove();
console.log(this);
}
}
});
if(styleFound){
for(i=0; i<fileName.length;i++){
if (document.createStyleSheet)
document.createStyleSheet(fileName[i].file);
else {
$("head").append($("<link rel='stylesheet' type='text/css' href='"+fileName[i].file+"' />"));
}
}
}
},
};
getService();
您可以做的事情如下:
在初始页面中,除了一个小文件,上面写着:之外,根本不加载任何css
/* hide everything */
* {
display: none;
}
/* show some sort of loader */
#loader {
display: block;
background: rgba(0,0,0,.8) url(image/loading.gif) no-repeat center center;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
...
}
尽可能快地,使用JavaScript开始在标题中插入到适当样式表的链接
加载完所有样式表后,删除指向上述样式表的链接,甚至可能删除#loader
div,再次使用javascript(平滑偏离路线,可能在短暂的最小延迟后,以防止其快速闪烁(
它可能并不完美,但你的用户会清楚发生了什么,你不会得到现在的闪光效果。返回的用户永远不会看到加载程序,因为对于已经在缓存中的css文件,事情应该足够快。
然而,这种技术的一大缺点是,非javascript用户将看不到除加载程序之外的任何内容。
顺便说一句,我个人认为这是应该由服务器处理的事情,它应该根据浏览器语言环境或其他什么在标题中设置正确的样式表。。。
您可以将css加载为文本文件,并将其附加在样式标记中。这将确保在加载其他文件之前先加载该文件。
$.ajax({
type: "GET",
url: fileName[i].file,
dataType: "text",
async: true,
success: function (data)
{
$("head").append("<style data-href='" + fileName[i].file + "'>" + data + "</style>");
}
});
要删除此样式标签,
$("style[data-href='" + fileName[i].file + "']").remove();
或者你甚至可以禁用样式表
$("style[data-href='" + fileName[i].file + "']").attr('disabled', 'disabled');
相关文章:
- 为什么我的列表不使用Ion出现
- 为什么typeof的数组的数组的未定义值返回为“0”;未定义的“;我的条件不认为是真的
- 为什么我的集装箱不在中心
- 为什么我的标签不在同一高度
- 我的脚本不起作用
- 我的函数不会返回要保存在数组中的对象
- 为什么我的JS不添加一个HTML类
- 我的javascript不会在没有警报的情况下运行
- 我的函数不起作用,Ajax调用,JQuery,调用外部?我不知道
- 在jQuery中,我的函数不起作用
- Angular资源对我的代码不起作用
- jquery css没有'我的情况不太好
- AngularJS:为什么我的表不亮
- 为什么我的JSFiddle不工作?(放置脚本的位置)
- 为什么我的 isNaN 不起作用
- 我的图标不想更改大小
- 我想使用 innerHTML 显示变量的值,但我的代码不起作用
- 我正在尝试更改我网站上的时钟颜色.我的代码不起作用,我想知道我犯了什么错误
- 当我将原型分配给函数时,我得到了不想要的输出
- 我的元素不想向上滚动