IT이야기

드래그 클릭을 방지하려면 어떻게 해야 합니까?

cyworld 2022. 6. 27. 21:25
반응형

드래그 클릭을 방지하려면 어떻게 해야 합니까?

드래그 앤 클릭 이벤트가 있는 요소를 가지려고 합니다.이벤트 수식어의 조합을 읽고 사용해 보았습니다.

다만, 드래그 정지시에 딸깍 소리가 납니다.

주의: MWE에서는 컴포넌트 자체에서 실행되지만 실제 앱에서는 사용하고 있습니다..native구성 요소를 끄는 한정자

클릭 없이 드래그하려면 어떻게 해야 하나요?

드래그 클릭 편집

요소Draggable:

<template>
  <div
    @pointerdown="handleDown"
    @pointerup="handleUp"
    @pointercancel="handleUp"
    @click="click = !click;"
    :style="style"
    ref="draggableRoot"
    class="draggable"
  >
    drag me!<br />
    am dragged? {{ drag }}<br />
    am clicked? {{ click }}<br />
  </div>
</template>
<script>
export default {
  computed: {
    style() {
      return {
        left: `${this.x}px`,
        top: `${this.y}px`
      };
    }
  },
  data() {
    return {
      x: 100,
      y: 100,
      left: 0,
      top: 0,
      drag: false,
      click: false
    };
  },
  methods: {
    handleMove({ pageX, pageY, clientX, clientY }) {
      if (this.$refs.draggableRoot) {
        this.x = pageX + this.left;
        this.y = pageY + this.top;
        this.drag = true;
      }
    },
    handleDown(event) {
      const { pageX, pageY } = event;
      const { left, top } = this.$refs.draggableRoot.getBoundingClientRect();
      this.left = left - pageX;
      this.top = top - pageY;
      document.addEventListener("pointermove", this.handleMove);
    },
    handleUp() {
      document.removeEventListener("pointermove", this.handleMove);
      this.drag = false;
    }
  }
};
</script>
<style scoped>
.draggable {
  position: fixed;
  border: solid coral 1px;
  height: 100px;
}
</style>

아마 효과가 있을 겁니다.

더하다setTimeout내부법handleUp:

handleUp() { 
  document.removeEventListener("pointermove", this.handleMove);
  setTimeout(() => this.drag = false) //this would move this assigment at the end of event queue
}

새로운 메서드 추가handleClick그리고 그것을 이벤트와 연관짓는다.@click:

handleClick() {
  if(!this.drag) { //change click only if not draged
    this.click = !this.click
  }
}

효과가 있는 것 같아!

언급URL : https://stackoverflow.com/questions/53703120/how-can-i-prevent-click-on-drag

반응형