Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

MapSplit.js 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * @Author: Caven
  3. * @Date: 2020-03-04 15:38:40
  4. * @Last Modified by: Caven
  5. * @Last Modified time: 2020-05-11 23:34:20
  6. */
  7. import { DomUtil } from '../utils'
  8. import State from '../state/State'
  9. import Widget from './Widget'
  10. const { Cesium } = DC.Namespace
  11. class MapSplit extends Widget {
  12. constructor() {
  13. super()
  14. this._wrapper = DomUtil.create('div', 'dc-slider')
  15. this._baseLayer = undefined
  16. this._moveActive = false
  17. this.type = Widget.getWidgetType('map_split')
  18. this._state = State.INITIALIZED
  19. }
  20. _installHook() {
  21. let handler = new Cesium.ScreenSpaceEventHandler(this._wrapper)
  22. let self = this
  23. handler.setInputAction(() => {
  24. self._moveActive = true
  25. }, Cesium.ScreenSpaceEventType.LEFT_DOWN)
  26. handler.setInputAction(() => {
  27. self._moveActive = true
  28. }, Cesium.ScreenSpaceEventType.PINCH_START)
  29. handler.setInputAction(movement => {
  30. self._moveHandler(movement)
  31. }, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
  32. handler.setInputAction(movement => {
  33. self._moveHandler(movement)
  34. }, Cesium.ScreenSpaceEventType.PINCH_MOVE)
  35. handler.setInputAction(() => {
  36. self._moveActive = false
  37. }, Cesium.ScreenSpaceEventType.LEFT_UP)
  38. handler.setInputAction(() => {
  39. self._moveActive = false
  40. }, Cesium.ScreenSpaceEventType.PINCH_END)
  41. }
  42. _moveHandler(movement) {
  43. if (!this._moveActive || !this._enable) {
  44. return
  45. }
  46. let relativeOffset = movement.endPosition.x
  47. let splitPosition =
  48. (this._wrapper.offsetLeft + relativeOffset) /
  49. this._wrapper.parentElement.offsetWidth
  50. this._wrapper.style.left = 100.0 * splitPosition + '%'
  51. this._viewer.scene.imagerySplitPosition = splitPosition
  52. }
  53. addBaseLayer(baseLayer, splitDirection) {
  54. if (!this._viewer || !this._enable) {
  55. return this
  56. }
  57. if (baseLayer) {
  58. if (this._baseLayer) {
  59. this._viewer.delegate.imageryLayers.remove(this._baseLayer)
  60. }
  61. this._baseLayer = this._viewer.delegate.imageryLayers.addImageryProvider(
  62. baseLayer
  63. )
  64. this._baseLayer.splitDirection = splitDirection || 0
  65. this._viewer.scene.imagerySplitPosition =
  66. this._wrapper.offsetLeft / this._wrapper.parentElement.offsetWidth
  67. }
  68. return this
  69. }
  70. }
  71. Widget.registerType('map_split')
  72. export default MapSplit