cesium-examples/map/libs/NavigationControl.js

50 lines
1.9 KiB
JavaScript

/**
* Created by bingqixuan on 2018/9/26.
*/
'use strict';
const NavigationControl = function (viewer) {
this._viewer = viewer;
this._container = window.document.createElement('div');
this._container.className = 'cesium-ctrl gvi-ctrl-group';
this._container.addEventListener('contextmenu', (e) => e.preventDefault());
this._viewer._element.appendChild(this._container);
this._zoomInButton = this._createButton('cesium-ctrl-icon cesium-ctrl-zoom-in', '放大', () => this._viewer.camera.zoomIn());
this._zoomOutButton = this._createButton('cesium-ctrl-icon cesium-ctrl-zoom-out', '缩小', () => this._viewer.camera.zoomOut());
this._compass = this._createButton('cesium-ctrl-icon cesium-ctrl-compass', 'Reset North', () => this._viewer.camera.setView({
orientation: {
heading: 0.0,
pitch: -Math.PI / 4,
roll: 0.0
}
}));
this._compassArrow = window.document.createElement('span');
this._compassArrow.className = 'cesium-ctrl-compass-arrow';
this._compass.appendChild(this._compassArrow);
this._event = ()=>{
const rotate = `rotate(${this._viewer.camera.heading * (180 / Math.PI)}deg)`;
this._compassArrow.style.transform = rotate;
};
this._viewer.scene.postRender.addEventListener(this._event);
};
NavigationControl.prototype._createButton = function (className, ariaLabel, fn) {
let button = window.document.createElement('button');
button.className = className;
this._container.appendChild(button);
button.type = 'button';
button.setAttribute('aria-label', ariaLabel);
button.addEventListener('click', fn);
return button;
};
NavigationControl.prototype.destroy = function () {
this._viewer._element.removeChild(this._container);
this._viewer.scene.postRender.removeEventListener(this._event);
};
module.exports = {
NavigationControl: NavigationControl
};