Vue.js 이동 단 왼쪽 미끄럼 제거 구성 요소 구현 코드
4827 단어 Vue.js왼쪽 슬라이더 삭제
4.567917.슬라이더 가 삭제 단추 의 절반 을 초과 하지 않 았 을 때 자동 으로 시작 위치 로 돌아 갑 니 다
효 과 는 다음 과 같 습 니 다:
시작 하기 전에[touch EventApi][1]을 먼저 알 아야 합 니 다.이 작은 구성 요소 에 사 용 됩 니 다:
1. Touch Event.touches(Touch List 대상 을 표시 하 며 현재 터치 평면 에 접촉 하고 있 는 모든 터치 대상 을 포함 합 니 다)
2. TouchEvent.changed Touches(하나의 TouchList 대상 으로 지난번 터치 이벤트 부터 이번 이벤트 까지 모든 것 을 대표 합 니 다.
상태 가 바 뀐 접점 의 Touch 대상.)
할 말 이 많 지 않 으 니 코드 를 직접 입력 하 세 요.
<template>
<div class="delete">
<div class="slider">
<div class="content"
@touchstart='touchStart'
@touchmove='touchMove'
@touchend='touchEnd'
:style="deleteSlider"
>
<!-- -->
<slot></slot>
</div>
<div class="remove" ref='remove'>
</div>
</div>
</div>
</template>
그리고 css,여기 제 가 사용 하 는 건 less 입 니 다.
<style scoped lang="less" scoped>
.slider{
width: 100%;
height:200px;
position: relative;
user-select: none;
.content{
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
background:green;
z-index: 100;
//
transition: 0.3s;
}
.remove{
position: absolute;
width:200px;
height:200px;
background:red;
right: 0;
top: 0;
color:#fff;
text-align: center;
font-size: 40px;
line-height: 200px;
}
}
</style>
<script type="text/ecmascript-6">
export default {
data() {
return {
startX:0, //
endX:0, //
moveX: 0, //
disX: 0, //
deleteSlider: '',// , v-bind:style="deleteSlider"
}
},
methods:{
touchStart(ev){
ev= ev || event
//tounches , 1
if(ev.touches.length == 1){
//
this.startX = ev.touches[0].clientX;
}
},
touchMove(ev){
ev = ev || event;
// ,
let wd=this.$refs.remove.offsetWidth;
if(ev.touches.length == 1) {
//
this.moveX = ev.touches[0].clientX
// ,
this.disX = this.startX - this.moveX;
console.log(this.disX)
// ,
if(this.disX < 0 || this.disX == 0) {
this.deleteSlider = "transform:translateX(0px)";
// 0, ,
}else if (this.disX > 0) {
// *5。
this.deleteSlider = "transform:translateX(-" + this.disX*5 + "px)";
//
if (this.disX*5 >=wd) {
this.deleteSlider = "transform:translateX(-" +wd+ "px)";
}
}
}
},
touchEnd(ev){
ev = ev || event;
let wd=this.$refs.remove.offsetWidth;
if (ev.changedTouches.length == 1) {
let endX = ev.changedTouches[0].clientX;
this.disX = this.startX - endX;
console.log(this.disX)
// ,
if ((this.disX*5) < (wd/2)) {
this.deleteSlider = "transform:translateX(0px)";
}else{
//
this.deleteSlider = "transform:translateX(-"+wd+ "px)";
}
}
}
}
}
</script>
여기까지 만 하면 다 완 성 됩 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다!많은 응원 부 탁 드 리 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LaravelAPI + Nuxt로 MultiAuth 구현현재 SIer5년째로 javascript(Jquery만), PHP(프레임워크 없음)를 2년 정도, C#(Windows 앱) 3년 정도 왔습니다. 여러가지 인연이 있어, 개인으로 최근 웹 서비스의 시작을 하게 되었습니...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.