У меня много проблем при попытке удалить прослушиватель событий.
Я создал веб-сайт, который довольно сильно зависит от JavaScript. Когда вы перемещаетесь по сайту, он в основном загружается в элементы динамически без обновления страницы с помощью литералов шаблона.
Мне иногда приходится загружать контент и добавлять бесконечную прокрутку, но также я могу снова удалить это событие.
Это код, который я использую для обработки событий прокрутки:
var start = 30;
var active = true;
function yHandler(elem)
{
var oHeight = selectElems('content_main', 'i').offsetHeight;
var yOffset = window.pageYOffset;
var hLimit = yOffset + window.innerHeight;
if (hLimit >= oHeight - 500 && active === true)
{
active = false;
new requestContent({
page: GET.page,
type: returnContentType(GET.page),
scroll: true,
start: start
}, (results) => {
if(results){
setTimeout(()=>{
active = true;
start = start + 30;;
}, 400);
new ContentActive();
}
});
}
}
var scrollRoute =
{
contentScroll: () =>{
yHandler();
}
};
var scrollHandler = function(options)
{
var func = options.func.name;
var funcOptions = options.func.options;
var elem = options.elem;
var flag = options.flag;
this.events = () => {
addEvent(elem, 'scroll', ()=>{
scrollRoute[func](elem, funcOptions);
}, flag);
}
this.clear = () => {
elem.removeEventListener('scroll', scrollRoute[func](), flag);
}
}
Я использую эту функцию для установки событий
function addEvent(obj, type, fn, flag = false) {
if (obj.addEventListener) {
obj.addEventListener(type, fn, flag);
} else if (obj.attachEvent) {
obj["e" + type + fn] = fn;
obj[type + fn] = function () {
obj["e" + type + fn](window.event);
};
obj.attachEvent("on" + type, obj[type + fn]);
} else {
obj["on" + type] = obj["e" + type + fn];
}
}
Я вызываю этот код из любого кода, когдаМне нужно установить событие бесконечной прокрутки
new scrollHandler({
func: {
'name':'contentScroll',
},
elem: window,
flag: true,
}).events();
Я вызываю этот код из любого кода, когда мне нужно удалить событие бесконечной прокрутки, но без какой-либо удачи
new scrollHandler({
func: {
'name':'contentScroll',
},
elem: window,
flag: true,
}).clear();
Как мнеуспешно удалить слушатель события? Я не могу просто назвать экземпляры, которые в конечном итоге будут такими грязными при настройке и удалении событий прокрутки из разных мест.