반응형
드래그 클릭을 방지하려면 어떻게 해야 합니까?
드래그 앤 클릭 이벤트가 있는 요소를 가지려고 합니다.이벤트 수식어의 조합을 읽고 사용해 보았습니다.
다만, 드래그 정지시에 딸깍 소리가 납니다.
주의: 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
반응형
'IT이야기' 카테고리의 다른 글
java.util.logging을 사용한 좋은 예 (0) | 2022.06.28 |
---|---|
Nuxt - 글로벌 믹스인에서 Getter를 호출하는 방법 (0) | 2022.06.27 |
mocha 및 styles-resources-loader가 있는 Vue.js는 종속성 sass를 로드할 수 없습니다. (0) | 2022.06.27 |
C/C++에서 양의 모듈로를 얻는 가장 빠른 방법 (0) | 2022.06.27 |
서버 측에서 렌더링된 콘텐츠가 vue로 대체되는 이유 (0) | 2022.06.25 |