我最近为我的网站编写了一些动画,它在本地运行得很好,但是当我推送它并尝试访问该页面(由 GithubPages 托管)时,它向我抛出错误。
未捕获类型错误:无法读取 null(...) 的属性“addEventListener”
我去做了一些研究,发现了这个页面:https://teamtreehouse.com/community/error-uncaught-typeerror-cannot-read-property-addeventlistener-of-null
还有这个:
Cannot read property 'addEventListener' of null
我尝试应用这些解决方案,但仍然不起作用。有的解决方案说可能是因为该元素不存在。好吧,由于该元素是 body 元素,因此它 100% 存在并且肯定已定义。
我真的希望我没有犯一些愚蠢的错误!那就尴尬了。
JS附在下面,错误发生在 document.body.addEventListener("mousemove", function(ev) {
var possibleImages = [
"assets/images/Moana.jpg",
"assets/images/GuitarPlaying.png",
"assets/images/Cheese.jpg",
"assets/images/CryptoPhoto.jpg",
"assets/images/LogoSmall.png",
"assets/images/Group5.jpg"
];
document.body.addEventListener("mousemove", function(ev) {
if (Math.random() < 0.85) {
return;
}
const index = Math.round(Math.random() * possibleImages.length);
const image = possibleImages[index];
const el = document.createElement("img");
document.body.appendChild(el);
el.classList.add('emoji');
el.src = image
el.offsetLeft; // forces layout
el.style.left = (event.clientX-410) + 'px';
el.style.top = (event.clientY-50) + 'px';
el.style.transform = 'translate(' + (Math.random() * -1000 + 500) + 'px, 1200px) scale(0)';
el.addEventListener('transitionend', () => {
el.remove()
})
}, true);
最佳答案
问题是您试图在 document.body 完全加载之前读取它。您可以使用 jQuery 简单地修复它:
js:
$( document ).ready(function() {
var possibleImages = [
"assets/images/Moana.jpg",
"assets/images/GuitarPlaying.png",
"assets/images/Cheese.jpg",
"assets/images/CryptoPhoto.jpg",
"assets/images/LogoSmall.png",
"assets/images/Group5.jpg"
];
document.body.addEventListener("mousemove", function(ev) {
if (Math.random() < 0.85) {
return;
}
const index = Math.round(Math.random() * possibleImages.length);
const image = possibleImages[index];
const el = document.createElement("img");
document.body.appendChild(el);
el.classList.add('emoji');
el.src = image
el.offsetLeft; // forces layout
el.style.left = (event.clientX-410) + 'px';
el.style.top = (event.clientY-50) + 'px';
el.style.transform = 'translate(' + (Math.random() * -1000 + 500) + 'px, 1200px) scale(0)';
el.addEventListener('transitionend', () => {
el.remove()
})
}, true);
}
html:
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
您也可以在没有 jQuery 的情况下完成此操作,包括下面写入的所有代码:
document.addEventListener("DOMContentLoaded", function(event) {
//here your code
});
关于Javascript 在本地工作,但不在 Github Pages 网站上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48516736/