发布于2023-09-25 20:29 阅读(996) 评论(0) 点赞(28) 收藏(2)
我正在创建一个应该以两种语言存在的登陆页面。应显示的文本位于两个 JSON 文件中,分别称为“ru.json”和“en.json”。当用户单击“更改语言”按钮时,将执行以下功能:
function changeLang(){
if (userLang == 'ru') {
userLang = 'en';
document.cookie = 'language=en';
}
else {
userLang = 'ru';
document.cookie = 'language=ru';
}
var translate = new Translate();
var attributeName = 'data-tag';
translate.init(attributeName, userLang);
translate.process();
}
其中 Translate() 如下:
function Translate() {
//initialization
this.init = function(attribute, lng){
this.attribute = attribute;
if (lng !== 'en' && lng !== 'ru') {
this.lng = 'en'
}
else {
this.lng = lng;
}
};
//translate
this.process = function(){
_self = this;
var xrhFile = new XMLHttpRequest();
//load content data
xrhFile.open("GET", "./resources/js/"+this.lng+".json", false);
xrhFile.onreadystatechange = function ()
{
if(xrhFile.readyState === 4)
{
if(xrhFile.status === 200 || xrhFile.status == 0)
{
var LngObject = JSON.parse(xrhFile.responseText);
var allDom = document.getElementsByTagName("*");
for(var i =0; i < allDom.length; i++){
var elem = allDom[i];
var key = elem.getAttribute(_self.attribute);
if(key != null) {
elem.innerHTML = LngObject[key] ;
}
}
}
}
};
xrhFile.send();
}
一切正常,但是,当用户第一次打开页面时,如果他的互联网连接不好,他只能看到页面的元素,而没有文本。虽然只有1-2秒,但仍然很烦人。
问题是,有没有办法检查文本是否已加载并仅在这种情况下显示页面元素?
translate.process() 是异步代码,需要调用服务器并等待其响应。这意味着,当您调用此函数时,它会在后台执行自己的操作,同时页面的其余部分继续加载。这就是为什么用户在该功能仍在运行时看到该页面的原因。
我可以想到的一种最简单的方法是将其添加到 CSS 文件的 head 标签中。
body { display: none }
然后,在this.process函数下,for循环结束后,添加
document.body.style.display = 'block'
作者:黑洞官方问答小能手
链接:http://www.qianduanheidong.com/blog/article/531600/2767c932c68eb37d61fe/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!