无法删除Javascript上的eventlistener
我有这样一个函数:无法删除Javascript上的eventlistener,javascript,dom-events,Javascript,Dom Events,我有这样一个函数: if (localStorage.wsttoc_stat === undefined) { localStorage.wsttoc_stat = "Stop"; } function ScrollToTop() { var elem = document.querySelector('.elementclass'); var scroll_height = elem.scrollTop; var scroll_offset = e
if (localStorage.wsttoc_stat === undefined) { localStorage.wsttoc_stat = "Stop"; }
function ScrollToTop()
{
var elem = document.querySelector('.elementclass');
var scroll_height = elem.scrollTop;
var scroll_offset = elem.offsetTop;
function gotoTop()
{
if(scroll_height > scroll_offset)
{
setTimeout(function(){
elem.scrollTop = scroll_offset;
}, 1000);
setTimeout(function(){
elem.scroll_height = elem.scrollTop;
}, 2000);
}
}
console.log(localStorage.wsttoc_stat);
if(localStorage.wsttoc_stat == "Scrolling")
{
localStorage.wsttoc_stat = 'Stop';
console.log(localStorage.wsttoc_stat);
elem.removeEventListener('scroll', gotoTop);
} else {
localStorage.wsttoc_stat = "Scrolling";
console.log(localStorage.wsttoc_stat);
elem.addEventListener('scroll', gotoTop);
gotoTop();
}
}
document.querySelector('#elementid').addEventListener('click', function(){ ScrollToTop(); });
if (localStorage.wsttoc_stat === undefined) {
localStorage.wsttoc_stat = "Stop";
}
function gotoTop() {
var elem = document.querySelector('.elementclass');
var scroll_height = elem.scrollTop;
var scroll_offset = elem.offsetTop;
if (scroll_height > scroll_offset) {
setTimeout(function() {
elem.scrollTop = scroll_offset;
}, 1000);
setTimeout(function() {
elem.scroll_height = elem.scrollTop;
}, 2000);
}
}
function ScrollToTop() {
var elem = document.querySelector('.elementclass');
console.log(localStorage.wsttoc_stat);
if (localStorage.wsttoc_stat == "Scrolling") {
localStorage.wsttoc_stat = 'Stop';
console.log(localStorage.wsttoc_stat);
elem.removeEventListener('scroll', gotoTop);
} else {
localStorage.wsttoc_stat = "Scrolling";
console.log(localStorage.wsttoc_stat);
elem.addEventListener('scroll', gotoTop);
gotoTop();
}
}
document.querySelector('#elementid').addEventListener('click', function() {
ScrollToTop();
});
该功能通过单击按钮来执行。
它已经在运行,但当我点击按钮停止时,它会一直滚动
请告诉我哪里出错了?只要
document.querySelector('#elementid').addEventListener('click',ScrollToTop);
由于每次调用ScrollToTop
时,它都会创建一个新的gotoTop
函数,因此gotoTop
的引用发生了更改。这就是为什么removeEventListener
没有达到您的预期。尝试如下更改代码:
if (localStorage.wsttoc_stat === undefined) { localStorage.wsttoc_stat = "Stop"; }
function ScrollToTop()
{
var elem = document.querySelector('.elementclass');
var scroll_height = elem.scrollTop;
var scroll_offset = elem.offsetTop;
function gotoTop()
{
if(scroll_height > scroll_offset)
{
setTimeout(function(){
elem.scrollTop = scroll_offset;
}, 1000);
setTimeout(function(){
elem.scroll_height = elem.scrollTop;
}, 2000);
}
}
console.log(localStorage.wsttoc_stat);
if(localStorage.wsttoc_stat == "Scrolling")
{
localStorage.wsttoc_stat = 'Stop';
console.log(localStorage.wsttoc_stat);
elem.removeEventListener('scroll', gotoTop);
} else {
localStorage.wsttoc_stat = "Scrolling";
console.log(localStorage.wsttoc_stat);
elem.addEventListener('scroll', gotoTop);
gotoTop();
}
}
document.querySelector('#elementid').addEventListener('click', function(){ ScrollToTop(); });
if (localStorage.wsttoc_stat === undefined) {
localStorage.wsttoc_stat = "Stop";
}
function gotoTop() {
var elem = document.querySelector('.elementclass');
var scroll_height = elem.scrollTop;
var scroll_offset = elem.offsetTop;
if (scroll_height > scroll_offset) {
setTimeout(function() {
elem.scrollTop = scroll_offset;
}, 1000);
setTimeout(function() {
elem.scroll_height = elem.scrollTop;
}, 2000);
}
}
function ScrollToTop() {
var elem = document.querySelector('.elementclass');
console.log(localStorage.wsttoc_stat);
if (localStorage.wsttoc_stat == "Scrolling") {
localStorage.wsttoc_stat = 'Stop';
console.log(localStorage.wsttoc_stat);
elem.removeEventListener('scroll', gotoTop);
} else {
localStorage.wsttoc_stat = "Scrolling";
console.log(localStorage.wsttoc_stat);
elem.addEventListener('scroll', gotoTop);
gotoTop();
}
}
document.querySelector('#elementid').addEventListener('click', function() {
ScrollToTop();
});
你好sodust,欢迎来到Stack Overflow。你能给你的答案提供更多的背景吗?为什么它会起作用?您提供的代码实际上与问题中的代码在功能上没有区别。