mouse-event.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /**
  2. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. /*
  7. * This code has been modified from https://github.com/mikolalysenko/mouse-event,
  8. * copyright (c) 2015 Mikola Lysenko. MIT License
  9. */
  10. export function buttons(event: MouseEvent) {
  11. if (typeof event === 'object') {
  12. if ('buttons' in event) {
  13. return event.buttons
  14. } else if ('which' in event) {
  15. const b = (event as any).which // 'any' to support older browsers
  16. if (b === 2) {
  17. return 4
  18. } else if (b === 3) {
  19. return 2
  20. } else if (b > 0) {
  21. return 1<<(b-1)
  22. }
  23. } else if ('button' in event) {
  24. const b = (event as any).button // 'any' to support older browsers
  25. if (b === 1) {
  26. return 4
  27. } else if (b === 2) {
  28. return 2
  29. } else if (b >= 0) {
  30. return 1<<b
  31. }
  32. }
  33. }
  34. return 0
  35. }
  36. export function element(event: MouseEvent) {
  37. return event.target as Element || event.srcElement || window
  38. }
  39. export function x(event: MouseEvent) {
  40. if (typeof event === 'object') {
  41. if ('offsetX' in event) {
  42. return event.offsetX
  43. }
  44. const target = element(event)
  45. const bounds = target.getBoundingClientRect()
  46. return (event as any).clientX - bounds.left // 'any' to support older browsers
  47. }
  48. return 0
  49. }
  50. export function y(event: MouseEvent) {
  51. if (typeof event === 'object') {
  52. if ('offsetY' in event) {
  53. return event.offsetY
  54. }
  55. const target = element(event)
  56. const bounds = target.getBoundingClientRect()
  57. return (event as any).clientY - bounds.top // 'any' to support older browsers
  58. }
  59. return 0
  60. }