我放在一起香草JavaScript函数检查,看看是否在页面上的元件X秒(var timerDelay
)内加载,并且之后如果DOM元素X秒仍在加载,加载器旋转器被示出(<div class="psspinner"></div>
)。一旦所有DOM元素完成加载,从DOM中删除微调器。我已经把似乎是在Chrome和Firefox中正常工作,但无法在Internet Explorer 11为什么页面微调JavaScript不能在IE11中工作,但可以在Chrome和FireFox中使用?
我重拍使用jQuery的脚本,因为它没有在IE11与香草JS工作。由于该脚本负责检查是否所有DOM元素都加载到页面上,所以使用jQuery会适得其反,因为它在脚本启动之前依靠jQuery库加载。使用Vanilla JS不依赖于库,并且加载速度会更快。
我不知道为什么下面的功能不会IE11工作。我已经尝试了一些组合,比如将querySelectorAll
与getElementsByClassName
交换出来,但是我没有尝试过。有什么建议么?
这里是一个JS捣鼓在一个开发环境中提供的代码:https://jsfiddle.net/7f1hhezs/
平原JS版本:
/**
* Page Load Spinner
* - Add Spinner to DOM
* - Vanilla JS
*/
function pSpinner() {
var timerDelay = 0;
var spinnerHtml = '<div class="pspinner"></div>';
// Append HTML to body
var appendSpinner = document.body.innerHTML += spinnerHtml;
// Initiating setTimeout before showing spinner
setTimeout(function() {
if (document.querySelectorAll('.pspinner').length > 0) {
console.log('loaded');
document.querySelector('.pspinner').setAttribute('style', 'display: block; opacity: 1.00;');
} else {
console.log('false');
return false;
}
}, timerDelay);
// Remove spinner once DOM load completes
window.addEventListener('load', function() {
var removeElem = document.querySelectorAll('.pspinner')[0];
removeElem.parentNode.removeChild(removeElem);
});
}
document.addEventListener('DOMContentLoaded', function() {
pSpinner();
});
jQuery的版本:
/**
* Page Load Spinner
* - Add Spinner to DOM
* - jQuery
*/
function pSpinner() {
var timerDelay = 2500;
var spinnerHtml = '<div class="pspinner"></div>';
var spinnerSel = $('.pspinner');
// Append HTML to body
var appendSpinner = $('body').append(spinnerHtml);
// Initiating setTimeout before showing spinner
setTimeout(function() {
$('.pspinner').css({ display: 'block' });
$('.pspinner').animate({ opacity: 1.00 }, 150);
}, timerDelay);
// Remove spinner once DOM load completes
//window.addEventListener('DOMContentLoaded', function() {
window.addEventListener('load', function() {
$('.pspinner').remove();
});
}
$(document).ready(function(){ pSpinner(); });
是否有在控制台中的任何错误?您是否添加了console.log行来找出没有被调用的内容? – epascarello
不是一个问题的答案,但'document.querySelectorAll( 'pspinner ')[0]'可以用'document.querySelector代替('。pspinner')'。类似的优化可以在'setTimeout'回调中进行,它似乎多次查询'.pspinner'。 – Chris
嗨epascarello,是的,我添加了console.logs,没有错误出现。我在整个函数过程中添加了console.logs,编号为1 - 8.在Chrome和FF中,数字的顺序是相同的,但在IE中不同。 ''setTimeout'内部的if条件(从来不是真实条件)IE总是打假,而Chrome和FF都达到了真实条件。 – Pegues