選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

HtmlLayer.js 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /**
  2. * @Author: Caven
  3. * @Date: 2020-02-12 21:43:33
  4. */
  5. import { DomUtil } from '../utils'
  6. import State from '../state/State'
  7. import Transform from '../transform/Transform'
  8. import Layer from './Layer'
  9. const { Cesium } = DC.Namespace
  10. class HtmlLayer extends Layer {
  11. constructor(id) {
  12. super(id)
  13. this._delegate = DomUtil.create('div', 'html-layer', undefined)
  14. this._delegate.setAttribute('id', this._id)
  15. this._renderRemoveCallback = undefined
  16. this.type = Layer.getLayerType('html')
  17. this._state = State.INITIALIZED
  18. }
  19. set show(show) {
  20. this._show = show
  21. this._delegate.style.visibility = this._show ? 'visible' : 'hidden'
  22. }
  23. get show() {
  24. return this._show
  25. }
  26. /**
  27. * add handler
  28. * @param viewer
  29. * @private
  30. */
  31. _onAdd(viewer) {
  32. this._viewer = viewer
  33. this._viewer.dcContainer.appendChild(this._delegate)
  34. let scene = this._viewer.scene
  35. this._renderRemoveCallback = scene.postRender.addEventListener(() => {
  36. let cameraPosition = this._viewer.camera.positionWC
  37. this.eachOverlay(item => {
  38. if (item && item.position) {
  39. item.show = this.show
  40. let position = Transform.transformWGS84ToCartesian(item.position)
  41. let windowCoord = Cesium.SceneTransforms.wgs84ToWindowCoordinates(
  42. scene,
  43. position
  44. )
  45. let distance = Cesium.Cartesian3.distance(position, cameraPosition)
  46. item._updateStyle({ transform: windowCoord }, distance)
  47. }
  48. }, this)
  49. }, this)
  50. this._state = State.ADDED
  51. }
  52. /**
  53. * remove handler
  54. * @returns {boolean}
  55. * @private
  56. */
  57. _onRemove() {
  58. this._renderRemoveCallback && this._renderRemoveCallback()
  59. this._viewer.dcContainer.removeChild(this._delegate)
  60. this._state = State.REMOVED
  61. }
  62. /**
  63. * Clears all divIcons
  64. * @returns {HtmlLayer}
  65. */
  66. clear() {
  67. while (this._delegate.hasChildNodes()) {
  68. this._delegate.removeChild(this._delegate.firstChild)
  69. }
  70. this._cache = {}
  71. this._state = State.CLEARED
  72. return this
  73. }
  74. }
  75. Layer.registerType('html')
  76. export default HtmlLayer