Source: commands/CesiumShutter.js


/**
 * Cesium卷帘封装类,除UI外封装一些内部功能,仅仅仅只包含左右的卷帘
 */
export class CesiumShutter {

    /**
     * 构建一个卷帘类,处理上下卷帘和左右卷帘的操作,包含一点UI动作,用于Vue Shutter中使用
     * @param {*} divOrName  卷帘中心分隔线的element id
     * @param {*} option 
     */
    constructor(divOrName,option){
        const slider = document.getElementById(divOrName);
        this._silder=slider;
    }

    active() {
        this.deactive();
        let slider=this._silder;
        const handler = new Cesium.ScreenSpaceEventHandler(slider);
        this._handler=handler;
        let moveActive = false;

        function move(movement) {
            if (!moveActive) {
                return;
            }

            const relativeOffset = movement.endPosition.x;
            const splitPosition =
                (slider.offsetLeft + relativeOffset) /
                slider.parentElement.offsetWidth;
            slider.style.left = `${100.0 * splitPosition}%`;
            viewer.scene.splitPosition = splitPosition;
        }

        handler.setInputAction(function() {
            moveActive = true;
        }, Cesium.ScreenSpaceEventType.LEFT_DOWN);
        handler.setInputAction(function() {
            moveActive = true;
        }, Cesium.ScreenSpaceEventType.PINCH_START);

        handler.setInputAction(move, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
        handler.setInputAction(move, Cesium.ScreenSpaceEventType.PINCH_MOVE);

        handler.setInputAction(function() {
            moveActive = false;
        }, Cesium.ScreenSpaceEventType.LEFT_UP);
        handler.setInputAction(function() {
            moveActive = false;
        }, Cesium.ScreenSpaceEventType.PINCH_END);
    }

    deactive() {
        if (this._handler) {
            this._handler.destroy();
            this._handler = undefined;
        }
    }

    destroy(){
        
    }
}