提问人:Soumya Roy 提问时间:2/5/2023 最后编辑:BarmarSoumya Roy 更新时间:2/5/2023 访问量:99
为什么事件侦听器没有应用于内部函数?
Why Event Listener not getting applied to the inside function?
问:
我有一些函数,其中一个函数具有调整大小事件侦听器,而该函数内部还有另一个函数。但是由于外部函数具有 resize 功能,我希望内部函数也会在 resize 事件中被调用。但是内部函数不适用于调整大小。这里有什么问题?
JAVASCRIPT的
function chekon() {
document.addEventListener('DOMContentLoaded', upme);
window.addEventListener('resize', upme);
function upme() {
var rome = document.getElementById("out-cmnt");
var rect = rome.getBoundingClientRect();
var poss = rect.top + window.scrollY;
var iwwr = window.innerWidth;
var koss = rect.bottom + window.scrollY;
var loss = koss - poss;
window.addEventListener('scroll', doso, false);
function doso() {
lopp = document.getElementById("Web_1920__1");
hope = lopp.clientHeight;
const meme = document.body.scrollHeight;
const keke = hope / meme;
const scsc = window.scrollY;
var scmx = (document.documentElement.scrollHeight - document.documentElement.clientHeight);
var innr = window.innerHeight;
console.log("innr inner-height = ", innr);
}
}
}
chekon();
那么,为什么在调整窗口大小时,resize 事件侦听器没有应用于内部 doso 函数呢?doso 函数位于 upme 函数内部。我是否需要在这两个函数上应用调整大小事件侦听器,即使 doso 函数在 upme 中。
答:
问题是window.addEventListener('scroll', doso, false);在首次调用 UPME 函数时,UPME 函数内部仅执行一次。在后续调用 upme 时,window.addEventListener('scroll', doso, false);line 将不会再次执行,并且 doso 函数不会注册为滚动事件侦听器。要使在每个 resize 事件上调用 doso 函数,您需要移动 window.addEventListener('scroll', doso, false);在 UPME 函数之外,因此每次调用 UPME 时都可以执行它。
评论
问题是您在“upme”函数中添加了“scroll”事件侦听器。这意味着 “doso” 函数只会在首次调用 “upme” 函数时注册为 “scroll” 事件侦听器一次。
若要解决此问题,应将“scroll”事件侦听器移到“upme”函数之外,以便每次调用“upme”函数时都会注册它,包括由于“resize”事件而调用它时。
下面是代码的更正版本:
function chekon() {
document.addEventListener('DOMContentLoaded', upme);
window.addEventListener('resize', upme);
window.addEventListener('scroll', doso, false);
function upme() {
var rome = document.getElementById("out-cmnt");
var rect = rome.getBoundingClientRect();
var poss = rect.top + window.scrollY;
var iwwr = window.innerWidth;
var koss = rect.bottom + window.scrollY;
var loss = koss - poss;
}
function doso() {
lopp = document.getElementById("Web_1920__1");
hope = lopp.clientHeight;
const meme = document.body.scrollHeight;
const keke = hope / meme;
const scsc = window.scrollY;
var scmx = (document.documentElement.scrollHeight - document.documentElement.clientHeight);
var innr = window.innerHeight;
console.log("innr inner-height = ", innr);
}
}
chekon();
评论
upme()
document.addEventListener('DOMContentLoaded', upme);
评论