joystick.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. Vue.component("joystick", {
  2. template: `
  3. <div data-nicegui='joystick' v-bind:id="jp_props.id" style="background-color:AliceBlue;position:relative;width:10em;height:10em" :style="jp_props.style"></div>
  4. `,
  5. mounted() {
  6. const joystick = nipplejs.create({
  7. zone: document.getElementById(this.$props.jp_props.id),
  8. ...this.$props.jp_props.options,
  9. });
  10. joystick.on("start", () => {
  11. const event = {
  12. event_type: "onStart",
  13. vue_type: this.$props.jp_props.vue_type,
  14. id: this.$props.jp_props.id,
  15. page_id: page_id,
  16. websocket_id: websocket_id,
  17. };
  18. send_to_server(event, "event");
  19. });
  20. joystick.on("move", (_, data) => {
  21. delete data.instance;
  22. const event = {
  23. event_type: "onMove",
  24. vue_type: this.$props.jp_props.vue_type,
  25. id: this.$props.jp_props.id,
  26. page_id: page_id,
  27. websocket_id: websocket_id,
  28. data: data,
  29. };
  30. send_to_server(event, "event");
  31. });
  32. joystick.on("end", () => {
  33. const event = {
  34. event_type: "onEnd",
  35. vue_type: this.$props.jp_props.vue_type,
  36. id: this.$props.jp_props.id,
  37. page_id: page_id,
  38. websocket_id: websocket_id,
  39. };
  40. send_to_server(event, "event");
  41. });
  42. },
  43. props: {
  44. jp_props: Object,
  45. },
  46. });