Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- JS console
- react
- utilty type
- vue.js
- 레이아웃쪼개기
- 폰트적용하기
- 커스텀
- 2022
- React Native
- React.js
- 공통컴포넌트
- 티스토리꾸미기
- 성능최적화
- CSS
- typescript
- click and drag
- const 단언문
- 리액트
- 타입좁히기
- NonNullable
- 누구나 자료구조와 알고리즘
- reactjs
- Chart.js
- 타입스크립트
- returnType
- javascript
- 제네릭
- TSDoc
- 반복줄이기
- 개발콘텐츠
Archives
- Today
- Total
몽땅뚝딱 개발자
[Vue.js] 웹에서 가로 스크롤 click and drag 이벤트 구현하기 본문
이번에 가로로 된 리스트를 구현하면서 모바일웹처럼 드래그 할 수 없는 점이 불편하게 느껴졌다.
사용자입장에서도 불편해 할 요소라 느껴져 적용하게 되었다.
📄 HTML
<!-- 가로 스크롤 -->
<div class="test-content">
<p class="test-title">Vertical Scroll</p>
<div class="vertical-scroll">
<!-- 제어할 요소에 ref를 적용해준다. -->
<ul ref="verticalScrollWrap">
<template v-for="i in 12">
<li :style="{ backgroundColor: `hsl(${parseInt(Math.random() * 24, 10) * 15}, 16%, 57%)` }"></li>
</template>
</ul>
</div>
</div>
📄 script
data() {
return {
// 드래그 제어 요소
isMouseDown: false,
startX: 0,
scrollLeft: 0,
};
},
// 제어할 스크롤 요소
const verticalScrollWrap = this.$refs.verticalScrollWrap
verticalScrollWrap.addEventListener('mousedown', (e) => {
this.isMouseDown = true
this.startX = e.pageX - verticalScrollWrap.offsetLeft
this.scrollLeft = verticalScrollWrap.scrollLeft
})
verticalScrollWrap.addEventListener('mouseleave', () => {
this.isMouseDown = false
})
verticalScrollWrap.addEventListener('mouseup', () => {
this.isMouseDown = false
})
verticalScrollWrap.addEventListener('mousemove', (e) => {
if (!this.isMouseDown) return
e.preventDefault()
const x = e.pageX - verticalScrollWrap.offsetLeft
const beforeScrollLeft = (x - this.startX) * 1
verticalScrollWrap.scrollLeft = this.scrollLeft - beforeScrollLeft
})
개인적으로 공부한 내용을 정리하는 블로그로
잘못된 개념을 게시하지않도록 주의하고 있으나 오류가 있을 수 있습니다.
'Development > Vue.js' 카테고리의 다른 글
[Vue.js] router-link 태그의 활성화 여부 클래스 (0) | 2022.11.12 |
---|---|
[Vue.js] Object가 아닌 string 형태의 데이터를 보내보자 (0) | 2022.10.19 |
[Vue.js] Vue3에서 빌트인 컴포넌트 <component> 사용하기 (0) | 2022.06.25 |
[Vue.js] ref의 input 포커스 이벤트 주기 (0) | 2022.06.22 |
[Vue.js] Vue3 - defineProps() & defineEmits() (0) | 2022.06.08 |
Comments