events.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. 'use strict';
  2. exports.template = /* html */`
  3. <div class="events" :style="'transform: translateX(' + offset + 'px)'">
  4. <template
  5. v-if="events"
  6. v-for="(event, index) in events"
  7. >
  8. <ui-icon value="event"
  9. :style="queryKeyStyle(event.x)"
  10. :active="frame===event.info.frame"
  11. :index="index"
  12. name="event"
  13. @mousedown.left="onMouseDown($event, event)"
  14. @click.right="onPopMenu($event, event.info)"
  15. @dblclick="openEventEditor(event.info)"
  16. ></ui-icon>
  17. </template>
  18. </div>
  19. `;
  20. exports.data = {
  21. events: [],
  22. offset: 0,
  23. frame: -1,
  24. };
  25. exports.methods = {
  26. display(x) {
  27. return x >= 0;
  28. },
  29. onPopMenu(event, eventInfo) {
  30. const that = this;
  31. const menu = [{
  32. label: Editor.I18n.t(`animator.event.delete`),
  33. click() {
  34. that.$emit('del', eventInfo);
  35. },
  36. }];
  37. Editor.Menu.popup({
  38. menu,
  39. });
  40. },
  41. onMouseDown(event, item) {
  42. const that = this;
  43. event.stopPropagation();
  44. this.frame = item.info.frame;
  45. const clientX = event.clientX;
  46. const startX = item.x;
  47. function mousemove(event) {
  48. const timelineX = startX + (event.clientX - clientX);
  49. that.$emit('move', item, timelineX);
  50. }
  51. function mouseup() {
  52. that.$emit('moveEnd', item);
  53. document.removeEventListener('mousemove', mousemove);
  54. document.removeEventListener('mouseup', mouseup);
  55. }
  56. document.addEventListener('mousemove', mousemove);
  57. document.addEventListener('mouseup', mouseup);
  58. },
  59. openEventEditor(eventInfo) {
  60. // 目前的事件帧会有重复关键帧重叠的情况
  61. this.frame = eventInfo.frame;
  62. this.$emit('edit', eventInfo);
  63. },
  64. queryKeyStyle(x) {
  65. return `transform: translateX(${x || 0}px);`;
  66. },
  67. refresh(eventInfos) {
  68. this.events = eventInfos;
  69. if (!eventInfos.some((item) => item.info.frame === this.frame)) {
  70. this.unselect();
  71. }
  72. },
  73. unselect() {
  74. this.frame = -1;
  75. },
  76. };