이 글에서는 주로 vue2 기반의 왼쪽 스와이프 삭제 기능을 자세하게 소개하고 있습니다. 관심 있는 친구들은 참고하시면 됩니다.
왼쪽 스와이프 삭제는 Muse 등 다양한 UI 프레임워크에서 가능합니다. UI 등은 처음부터 이 두 가지를 사용했지만 요구사항은 다음과 같습니다. 왼쪽으로 스와이프하면 img가 나타나고 클릭하면 다음과 같이 삭제됩니다.
UI 프레임워크를 사용하기 때문에 다음을 수행해야 합니다. 기본 코드 변경 = =그래서 저희 팀에서 - - 를 직접 작성했는데, 그게 피곤하더군요... 이 컴포넌트는 여러 곳에서 사용되기 때문에 공통으로 두는 것을 권장합니다. .
<template> <p class="left-delete"> <p class="move" @touchstart="_touchStart" @touchmove="_touchMove" @touchend="_touchEnd" :style="txtStyle"> <slot></slot> </p> <p class="deleteIcon" :style="zIndex" @click.prevent="deleteItem(index)"></p> </p> </template> <script> export default { props: { index: Number }, data() { return { startX: 0, //触摸位置 moveX: 0, //滑动时的位置 disX: 0, //移动距离 txtStyle: '', delWidth: 200, top: '', zIndex: 'z-index:-1', } }, methods: { _touchStart: function(ev) { ev = ev || event; if(ev.touches.length == 1){ // 手指按下的时候记录按下的位置 this.startX = ev.touches[0].clientX; console.log(this.startX) } }, _touchMove: function(ev) { ev = ev || event; if(ev.touches.length == 1) { // 滑动过程中的实时位置 this.moveX = ev.touches[0].clientX // 滑动过程中实时计算滑动距离 this.disX = this.startX - this.moveX; // console.log('disX==>',this.disX) // 如果是向右滑动或者只是点击,不改变滑动位置 if(this.disX < 0 || this.disX == 0) { // console.log('没有移动'); this.txtStyle = "transform:translateX(0rem)"; }else if (this.disX > 0) { 如果是向左滑动,则实时给这个根元素一个向左的偏移-left,当偏移量到达固定值delWidth时,固定元素的偏移量为 delWidth this.txtStyle = "transform:translateX(-" + this.disX/100 + "rem)"; if (this.disX >= this.delWidth/100) { this.txtStyle = "transform:translateX(-" + this.delWidth/100 + "rem)"; this.zIndex = "z-index:" + 10 + "rem"; } } } }, _touchEnd: function(ev) { if (event.changedTouches.length == 1) { this.startX = 0; this.zIndex = "z-index:" + -1 + "rem"; console.log(event.changedTouches[0].clientX) // 手指移动结束后的水平位置 let endX = event.changedTouches[0].clientX; // 触摸开始与结束,手指移动的距离 this.disX = this.startX - endX; //如果距离小于删除按钮的1/2,不显示删除按钮 } }, deleteItem: function(index) { this.$emit('deleteItem', index); } } } </script> <style> .left-delete{ width:100%; height:100%; position:relative; z-index:2; } .move{ position: relative; } .deleteIcon{ width: 2rem; height:100%; position: absolute; right:0; top:0; background:url(./../../assets/main/4.png) no-repeat; background-size: contain; } </style>
그런 다음 필요한 페이지에 소개하면 됩니다. 예를 들어 myCollect 페이지에서 요구하는 경우 다음과 같습니다.
<template> <section class="myCollect"> <section> <p v-for="(item,index) in collectionList"> <left-slider :index="index" @deleteItem="deleteItem"> <Financial :item="item" :index="index"></Financial> </left-slider> </p> </section> </section> </template> <script> import api from './../../fetch/api'; import { mapGetters } from 'vuex'; import Financial from './../common/financial.vue'; import LeftSlider from './../common/leftSlider.vue'; export default { name: 'MyCollect', props: { item: Object, index: Number }, components: { Financial, LeftSlider }, data() { return { } }, created() { this.getCollectionList(); }, methods: { }, computed: { ...mapGetters([ 'getContextPathSrc', 'sessionId', 'token' ]), }, methods: { // 删除 deleteItem: function(index) { api.commonApi('后台接口,请求数据')//此处api是封装的axios,详情看文章:vue2+vuex+axios即可 .then(res => { console.debug("REQ_ADD_STORE.res.data.result -> " + res.data.result); this.collectionList.splice(index, 1); }); } }, mounted() { } } </script>
그러면 완료됩니다.
위 내용은 모두를 위해 제가 정리한 내용입니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다.
관련 기사 : angularjss angularjs의 MVC에 대한 Complex 작업 공개 모듈을 추출하기 위해 CommonschunkPlugin을 사용하는 방법 inctnative angular cli 설치 자습서
위 내용은 vue2에서 기능을 삭제하기 위해 왼쪽 슬라이드를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!