@jood/appearer
Version:
javascript intersection observer
72 lines • 6.23 kB
JavaScript
import { AppearEvent } from '../common/types';
import { Subject } from 'rxjs';
/**
* Stage 에 등록될 Actor.
* 스테이지에 진입, 이탈 시 계속 알려주는 기본형.
* @class BaseActor
* @implements {IActor}
*/
export class BaseActor {
/**
* @param element 옵저버에 등록되어야 하는 native element
*/
constructor(element) {
/**
* 이벤트 Observable
* @see https://rxjs-dev.firebaseapp.com/guide/subject
*/
this.events = new Subject();
/**
* 현재 진입 여부 상태
*/
this.isAppear = null;
this.element = element;
}
/**
* 해당 인스턴스를 관찰하는 스테이지를 연결
* @param stage 스테이지
*/
bind(stage) {
this.stage = stage;
}
/**
* 진입, 이탈 등 이벤트 알림
* @param type 이벤트 타입
* @param [entry] 상태 변경시 관찰된 상태
*/
dispatch(type, entry) {
this.events.next(new AppearEvent(type, {
actor: this,
entry,
}));
}
/**
* 스테이지 진입
* @param [entry] 스테이지 진입시 관찰 상태
*/
appear(entry) {
if (this.isAppear === true)
return;
this.isAppear = true;
this.dispatch(AppearEvent.APPEAR, entry);
}
/**
* 스테이지 이탈
* @param [entry] 스테이지 이탈시 관찰 상태
*/
disappear(entry) {
if (this.isAppear === false)
return;
this.isAppear = false;
this.dispatch(AppearEvent.DISAPPEAR, entry);
}
/**
* 파기
*/
dispose() {
if (this.stage) {
this.stage.unobserve(this);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9qb29kLWFwcGVhcmVyL2pvb2QtYXBwZWFyZXIvcHJvamVjdHMvcGFja2FnZXMvc3JjLyIsInNvdXJjZXMiOlsiYWN0b3IvYmFzZS1hY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFdBQVcsRUFBa0IsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9COzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDcEI7O09BRUc7SUFDSCxZQUFZLE9BQXFCO1FBU2pDOzs7V0FHRztRQUNILFdBQU0sR0FBeUIsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQU8xRDs7V0FFRztRQUNILGFBQVEsR0FBWSxJQUFJLENBQUM7UUF0QnZCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUF1QkQ7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLEtBQXdCO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLElBQVksRUFBRSxLQUFpQztRQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7WUFDcEIsS0FBSyxFQUFFLElBQUk7WUFDWCxLQUFLO1NBQ04sQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQWlDO1FBQ3RDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJO1lBQUUsT0FBTztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxLQUFpQztRQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSztZQUFFLE9BQU87UUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdG9yRWxlbWVudCwgQXBwZWFyRXZlbnQsIElBY3RvciwgSVN0YWdlIH0gZnJvbSAnLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBTdGFnZSDsl5Ag65Ox66Gd65CgIEFjdG9yLlxuICog7Iqk7YWM7J207KeA7JeQIOynhOyehSwg7J207YOIIOyLnCDqs4Tsho0g7JWM66Ck7KO864qUIOq4sOuzuO2YlS5cbiAqIEBjbGFzcyBCYXNlQWN0b3JcbiAqIEBpbXBsZW1lbnRzIHtJQWN0b3J9XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlQWN0b3IgaW1wbGVtZW50cyBJQWN0b3Ige1xuICAvKipcbiAgICogQHBhcmFtIGVsZW1lbnQg7Ji17KCA67KE7JeQIOuTseuhneuQmOyWtOyVvCDtlZjripQgbmF0aXZlIGVsZW1lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEFjdG9yRWxlbWVudCkge1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICog7Ji17KCA67KE7JeQIOuTseuhneuQoCBuYXRpdmUgZWxlbWVudFxuICAgKi9cbiAgZWxlbWVudDogQWN0b3JFbGVtZW50O1xuXG4gIC8qKlxuICAgKiDsnbTrsqTtirggT2JzZXJ2YWJsZVxuICAgKiBAc2VlIGh0dHBzOi8vcnhqcy1kZXYuZmlyZWJhc2VhcHAuY29tL2d1aWRlL3N1YmplY3RcbiAgICovXG4gIGV2ZW50czogU3ViamVjdDxBcHBlYXJFdmVudD4gPSBuZXcgU3ViamVjdDxBcHBlYXJFdmVudD4oKTtcblxuICAvKipcbiAgICog7ZW064u5IOyduOyKpO2EtOyKpOqwgCDrk7HroZ3rkJwg7Iqk7YWM7J207KeAXG4gICAqL1xuICBzdGFnZTogSVN0YWdlPEJhc2VBY3Rvcj47XG5cbiAgLyoqXG4gICAqIO2YhOyerCDsp4TsnoUg7Jes67aAIOyDge2DnFxuICAgKi9cbiAgaXNBcHBlYXI6IGJvb2xlYW4gPSBudWxsO1xuXG4gIC8qKlxuICAgKiDtlbTri7kg7J247Iqk7YS07Iqk66W8IOq0gOywsO2VmOuKlCDsiqTthYzsnbTsp4Drpbwg7Jew6rKwXG4gICAqIEBwYXJhbSBzdGFnZSDsiqTthYzsnbTsp4BcbiAgICovXG4gIGJpbmQoc3RhZ2U6IElTdGFnZTxCYXNlQWN0b3I+KSB7XG4gICAgdGhpcy5zdGFnZSA9IHN0YWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIOynhOyehSwg7J207YOIIOuTsSDsnbTrsqTtirgg7JWM66a8XG4gICAqIEBwYXJhbSB0eXBlIOydtOuypO2KuCDtg4DsnoVcbiAgICogQHBhcmFtIFtlbnRyeV0g7IOB7YOcIOuzgOqyveyLnCDqtIDssLDrkJwg7IOB7YOcXG4gICAqL1xuICBkaXNwYXRjaCh0eXBlOiBzdHJpbmcsIGVudHJ5PzogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSkge1xuICAgIHRoaXMuZXZlbnRzLm5leHQoXG4gICAgICBuZXcgQXBwZWFyRXZlbnQodHlwZSwge1xuICAgICAgICBhY3RvcjogdGhpcyxcbiAgICAgICAgZW50cnksXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog7Iqk7YWM7J207KeAIOynhOyehVxuICAgKiBAcGFyYW0gW2VudHJ5XSDsiqTthYzsnbTsp4Ag7KeE7J6F7IucIOq0gOywsCDsg4Htg5xcbiAgICovXG4gIGFwcGVhcihlbnRyeT86IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0FwcGVhciA9PT0gdHJ1ZSkgcmV0dXJuO1xuICAgIHRoaXMuaXNBcHBlYXIgPSB0cnVlO1xuICAgIHRoaXMuZGlzcGF0Y2goQXBwZWFyRXZlbnQuQVBQRUFSLCBlbnRyeSk7XG4gIH1cblxuICAvKipcbiAgICog7Iqk7YWM7J207KeAIOydtO2DiFxuICAgKiBAcGFyYW0gW2VudHJ5XSDsiqTthYzsnbTsp4Ag7J207YOI7IucIOq0gOywsCDsg4Htg5xcbiAgICovXG4gIGRpc2FwcGVhcihlbnRyeT86IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0FwcGVhciA9PT0gZmFsc2UpIHJldHVybjtcbiAgICB0aGlzLmlzQXBwZWFyID0gZmFsc2U7XG4gICAgdGhpcy5kaXNwYXRjaChBcHBlYXJFdmVudC5ESVNBUFBFQVIsIGVudHJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtjIzquLBcbiAgICovXG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuc3RhZ2UpIHtcbiAgICAgIHRoaXMuc3RhZ2UudW5vYnNlcnZlKHRoaXMpO1xuICAgIH1cbiAgfVxufVxuIl19