javascript - Odstrániť poslucháča udalosti Scroll používaného v spojení s funkciou obmedzovania frekvencie


Mám funkciu, ktorú volám ktorá otvára konkrétne zobrazenie na mojej stránke.

function dayViewOpen(target){
         var date = getDate();
          ..
          ..
          ..
        document.addEventListener('scroll',throttle(function(event){
            scrollAddData(date);
        },10));
}

podobne mám funkciu na zatvorenie toho konkrétneho pohľadu

 function dayViewClose(target){
        ..
        ..


    }

Všetko fungovalo doteraz dokonale. Ale problémy začínajú, keď musím odstrániť predtým pridaného poslucháča udalostí. To znamená, že musím odstrániť poslucháča udalostí, keď volám funkciu dayViewclose();

Chápem, že potrebujeme mať odkaz na poslucháča, aby sme ho mohli odstrániť, takže keď to robím takto.

var handler = throttle(function(event){
                scrollAddData();
            },10);

 function dayViewOpen(target){
         var date = getDate();
          ..
          ..
          ..
        document.addEventListener('scroll',handler,false);
}

 function dayViewClose(target){
        ..
        ..

        //remove earlier added event listener
       document.removeEventListener('scroll',handler,false);
    }
  • potom nie som schopný odovzdať parameter date do môjho handlera ( ako môžem odovzdať parameter date do handlera ) a
  • Aj keď prepustím parameter dátumu, stále nie som schopný odstrániť obsluhovač pomocou removeEventListener. ( ako môžem správne odstrániť event listener )

Každá pomoc by bola veľmi ocenená

Odpoveď č. 1

Môžete skúsiť deklarovať poslucháča udalostí navonok, ale nastaviť ho vo vnútri:

var handler;

function dayViewOpen(target){
    var date = getDate();
    /* ... */
    handler = throttle(function(event){
        scrollAddData(date);
    }, 10);
    document.addEventListener('scroll', handler, false);
}

function dayViewClose(target){
    /* ... */
    document.removeEventListener('scroll', handler, false);
}