;(function (window, mars3d) { //创建widget类,需要继承BaseWidget class MyWidget extends mars3d.widget.BaseWidget { //外部资源配置 get resources() { return ['view.css'] } //弹窗配置 get view() { return { type: 'append', url: 'view.html', parent: 'body', } } getTileLayers() { if (!this._alllayers) { this._alllayers = this.map.getTileLayers() console.log( this._alllayers) } return this._alllayers } //每个窗口创建完成后调用 winCreateOK(html) { var that = this var inhtmlBaseLayer = '' var inhtmlSwipelayer = '' var arrLayers = this.getTileLayers() for (var i = 0; i < arrLayers.length; i++) { var layer = arrLayers[i] inhtmlBaseLayer += '
  • ' + layer.name + '
  • ' inhtmlSwipelayer += '
  • ' + layer.name + '
  • ' } $('#ddl_basemap').html(inhtmlBaseLayer) $('#ddl_swipelayer').html(inhtmlSwipelayer) $('#btn_mapSwipe_close').click(function () { that.disableBase() }) } //激活插件 activate() { $('.toolBarRight').css({ top: '120px' }) var scene = this.map.scene var slider = $("
    ") $('#mars3dContainer').append(slider) scene.imagerySplitPosition = slider[0].offsetLeft / slider[0].parentElement.offsetWidth var dragStartX = 0 document.getElementById('slider').addEventListener('mousedown', mouseDown, false) window.addEventListener('mouseup', mouseUp, false) this._lastBasemap = this.map.basemap.options this.map.basemap = null this.changeSelectBaseLayer(1, true) this.changeSelectSwipeLayer(0, true) function mouseUp() { window.removeEventListener('mousemove', sliderMove, true) } function mouseDown(e) { var slider = document.getElementById('slider') dragStartX = e.clientX - slider.offsetLeft window.addEventListener('mousemove', sliderMove, true) } function sliderMove(e) { var slider = document.getElementById('slider') var splitPosition = (e.clientX - dragStartX) / slider.parentElement.offsetWidth slider.style.left = 100.0 * splitPosition + '%' scene.imagerySplitPosition = splitPosition } } //释放插件 disable() { $('.toolBarRight').css({ top: '120px' }) $('#slider').remove() this.removeLeftLayer() this.removeRightLayer() this._alllayers = null this.map.basemap = this._lastBasemap this._lastBasemap = null } removeLeftLayer() { if (this.leftLayer != null) { this.leftLayer.remove() this.leftLayer = null } } updateLeftLayer(layer) { this.removeLeftLayer() this.leftLayer = layer if (!layer.isAdded) { this.map.addLayer(layer) } if (layer.hasChildLayer) { for (var i = 0; i < layer.arrLayer.length; i++) { let imageryLayer = layer.arrLayer[i].layer imageryLayer.splitDirection = Cesium.ImagerySplitDirection.LEFT } } else { let imageryLayer = layer.layer imageryLayer.splitDirection = Cesium.ImagerySplitDirection.LEFT } } removeRightLayer() { if (this.rightLayer != null) { this.rightLayer.remove() this.rightLayer = null } } updateRightLayer(layer) { this.removeRightLayer() this.rightLayer = layer if (!layer.isAdded) { this.map.addLayer(layer) } if (layer.hasChildLayer) { for (var i = 0; i < layer.arrLayer.length; i++) { let imageryLayer = layer.arrLayer[i].layer imageryLayer.splitDirection = Cesium.ImagerySplitDirection.RIGHT } } else { let imageryLayer = layer.layer imageryLayer.splitDirection = Cesium.ImagerySplitDirection.RIGHT } } //view界面控制 changeSelectBaseLayer(id, ischange) { if (this._last_swipeLayer_id == id) { toastr.warning('图层对比不能为同一图层!') return } this._last_baselayer_id = id var arrLayers = this.getTileLayers() var thisLayer = arrLayers[id] $('#btnSelectBaseMap').html('已选:' + thisLayer.name + '') if (ischange) { this.updateLeftLayer(thisLayer) } } changeSelectSwipeLayer(id, ischange) { if (this._last_baselayer_id == id) { toastr.warning('图层对比不能为同一图层!') return } this._last_swipeLayer_id = id var arrLayers = this.getTileLayers() var thisLayer = arrLayers[id] $('#btnSelectSwipelayer').html('已选:' + thisLayer.name + '') if (ischange) { this.updateRightLayer(thisLayer) } } } //注册到widget管理器中。 window.mapSwipeWidget = mars3d.widget.bindClass(MyWidget) //每个widet之间都是直接引入到index.html中,会存在彼此命名冲突,所以闭包处理下。 })(window, mars3d)