babylon.arcRotateCameraMouseWheelInput.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. delta = this.wheelDeltaPercentage ? (event.wheelDelta * 0.01) * this.camera.radius * this.wheelDeltaPercentage : event.wheelDelta / (this.wheelPrecision * 40);
  22. } else if (event.detail) {
  23. delta = -event.detail / this.wheelPrecision;
  24. }
  25. if (delta)
  26. this.camera.inertialRadiusOffset += delta;
  27. if (event.preventDefault) {
  28. if (!noPreventDefault) {
  29. event.preventDefault();
  30. }
  31. }
  32. };
  33. this._observer = this.camera.getScene().onPointerObservable.add(this._wheel, PointerEventTypes.POINTERWHEEL);
  34. }
  35. public detachControl(element: Nullable<HTMLElement>) {
  36. if (this._observer && element) {
  37. this.camera.getScene().onPointerObservable.remove(this._observer);
  38. this._observer = null;
  39. this._wheel = null;
  40. }
  41. }
  42. getClassName(): string {
  43. return "ArcRotateCameraMouseWheelInput";
  44. }
  45. getSimpleName() {
  46. return "mousewheel";
  47. }
  48. }
  49. (<any>CameraInputTypes)["ArcRotateCameraMouseWheelInput"] = ArcRotateCameraMouseWheelInput;
  50. }