babylon.arcRotateCameraMouseWheelInput.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. module BABYLON {
  2. export class ArcRotateCameraMouseWheelInput implements ICameraInput<ArcRotateCamera> {
  3. camera: ArcRotateCamera;
  4. private _wheel: Nullable<(p: PointerInfo, s: EventState) => void>;
  5. private _observer: Nullable<Observer<PointerInfo>>;
  6. @serialize()
  7. public wheelPrecision = 3.0;
  8. /**
  9. * wheelDeltaPercentage will be used instead of wheelPrecision if different from 0.
  10. * It defines the percentage of current camera.radius to use as delta when wheel is used.
  11. */
  12. @serialize()
  13. public wheelDeltaPercentage = 0;
  14. public attachControl(element: HTMLElement, noPreventDefault?: boolean) {
  15. this._wheel = (p, s) => {
  16. //sanity check - this should be a PointerWheel event.
  17. if (p.type !== PointerEventTypes.POINTERWHEEL) return;
  18. var event = <MouseWheelEvent>p.event;
  19. var delta = 0;
  20. if (event.wheelDelta) {
  21. if (this.wheelDeltaPercentage) {
  22. var wheelDelta = (event.wheelDelta * 0.01 * this.wheelDeltaPercentage) * this.camera.radius;
  23. if (event.wheelDelta > 0) {
  24. delta = wheelDelta / (1.0 + this.wheelDeltaPercentage);
  25. } else {
  26. delta = wheelDelta * (1.0 + this.wheelDeltaPercentage);
  27. }
  28. } else {
  29. delta = event.wheelDelta / (this.wheelPrecision * 40);
  30. }
  31. } else if (event.detail) {
  32. delta = -event.detail / this.wheelPrecision;
  33. }
  34. if (delta)
  35. this.camera.inertialRadiusOffset += delta;
  36. if (event.preventDefault) {
  37. if (!noPreventDefault) {
  38. event.preventDefault();
  39. }
  40. }
  41. };
  42. this._observer = this.camera.getScene().onPointerObservable.add(this._wheel, PointerEventTypes.POINTERWHEEL);
  43. }
  44. public detachControl(element: Nullable<HTMLElement>) {
  45. if (this._observer && element) {
  46. this.camera.getScene().onPointerObservable.remove(this._observer);
  47. this._observer = null;
  48. this._wheel = null;
  49. }
  50. }
  51. getClassName(): string {
  52. return "ArcRotateCameraMouseWheelInput";
  53. }
  54. getSimpleName() {
  55. return "mousewheel";
  56. }
  57. }
  58. (<any>CameraInputTypes)["ArcRotateCameraMouseWheelInput"] = ArcRotateCameraMouseWheelInput;
  59. }