import { EventEmitter } from '../event'; import { IVisibilityStatus } from './types'; /** * 실행된 browser 기준으로, visibilityChange event 에 맞는 vendorPrefix 반환 * @memberof VisibilityChangeObserver * @export * @returns {String} */ export declare function getVendorPrefix(): string; /** * getVendorPrefix 의 값 * @constant * @memberof VisibilityChangeObserver * @type {String} */ export declare const VENDOR_PREFIX: string; /** * browser 상의 visibilitychange event 명 * @constant * @memberof VisibilityChangeObserver * @type {String} */ export declare const VISIBILITY_EVENT_NAME: string; /** * browser 상의 visibility hidden 시점의 event 명 * @constant * @memberof VisibilityChangeObserver * @type {String} */ export declare const HIDDEN_METHOD_NAME: string; /** * VisibilityChange Event Types * @event VisibilityChangeObserver#VISIBILITY_EVENTS * @memberof VisibilityChangeObserver * @property {String} CHANGE - 변경 시점 * @property {String} GET_STATUS - 현재 상태값 체크 */ /** * @export * @readonly * @enum {VISIBILITY_EVENTS} */ export declare enum VISIBILITY_EVENTS { CHANGE = "VISIBILITY_CHANGE-EVENTS-CHANGE", GET_STATUS = "VISIBILITY_CHANGE-EVENTS-GET_STATUS" } /** * browser 의 visibility 변화를 감지 * @export * @class VisibilityChangeObserver * @alias observer/VisibilityChangeObserver * @extends {EventEmitter} * @see https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API * @see https://caniuse.com/#search=visibilityState * @throws {Error} browser 에서 지원하지 못하는 경우 - throw new Error('VisibilityChange 지원되지 않는 브라우저입니다.'); * @example import { VisibilityChangeObserver, VISIBILITY_EVENTS } from '@nonoll/code-snippet/observer'; const createElement = ({ tag = 'div', id = '', style = '', value = '', text = '' }) => { const doc = window.document; const target = doc.createElement(tag); target.setAttribute('id', id); target.setAttribute('style', style); target.setAttribute('value', value); if (text) { target.textContent = text; } return target; } let observer; const forExample = () => { if (observer) { console.log('already example'); return; } const doc = window.document; observer = new VisibilityChangeObserver(); observer.on(VISIBILITY_EVENTS.CHANGE, ({ isHidden, isShow }) => { console.log('change', isHidden, isShow); }); observer.attach(); observer.emit(VISIBILITY_EVENTS.GET_STATUS); const statusButton = createElement({ tag: 'button', text: 'status' }); const openButton = createElement({ tag: 'button', text: 'window open' }); doc.body.appendChild(statusButton); doc.body.appendChild(openButton); statusButton.addEventListener('click', e => { e.preventDefault(); console.log('statusButton clicked'); if (!observer) { return; } // observer.emit(VISIBILITY_EVENTS.GET_STATUS); const { isHidden, isShow } = observer.getStatus(); console.log('getStatus', isHidden, isShow); }); openButton.addEventListener('click', e => { e.preventDefault(); console.log('openButton clicked'); if (!observer) { return; } const browser = window.open('https://nonoll.github.io/code-snippet/'); if (!browser) { console.error('팝업이 차단되어 있습니다.'); } }); } forExample(); */ export declare class VisibilityChangeObserver extends EventEmitter { constructor(); /** * visibilitychange event 명 반환 * @static * @returns {String} * @memberof VisibilityChangeObserver */ static visibilityEventName(): string; /** * visibility hidden event 명 반환 * @static * @returns {String} * @memberof VisibilityChangeObserver */ static hiddenMethodName(): string; /** * visibility change 지원 여부 반환 * @static * @returns {boolean} * @memberof VisibilityChangeObserver */ static isSupport(): boolean; /** * @private * @memberof VisibilityChangeObserver * @see IVisibilityStatus * @fires VisibilityChangeObserver#VISIBILITY_EVENTS */ private onVisibilityChangeListener; /** * @private * @returns {Boolean} * @memberof VisibilityChangeObserver */ private isHidden; /** * 현재 상태를 반환 * @returns {IVisibilityStatus} * @memberof VisibilityChangeObserver */ getStatus(): IVisibilityStatus; /** * 이벤트 감지 설정 * @returns {VisibilityChangeObserver} * @memberof VisibilityChangeObserver */ attach(): VisibilityChangeObserver; /** * 이벤트 감지 해제 * @returns {VisibilityChangeObserver} * @memberof VisibilityChangeObserver */ detach(): VisibilityChangeObserver; /** * destory * @returns {VisibilityChangeObserver} * @memberof VisibilityChangeObserver */ destroy(): VisibilityChangeObserver; }