您好,登錄后才能下訂單哦!
本篇內容介紹了“vue怎么實現左滑刪除功能”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
左滑刪除,很多UI框架里有,比如Mint-UI, Muse-UI等,一開始我們就是用的這兩個,但是我們需求是要:左滑的時候出現img然后來實現點擊刪除,如下:
建議還是放到common下。
<template> <div class="left-delete"> <div class="move" @touchstart="_touchStart" @touchmove="_touchMove" @touchend="_touchEnd" :> <slot></slot> </div> <div class="deleteIcon" : @click.prevent="deleteItem(index)"></div> </div> </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> <div v-for="(item,index) in collectionList"> <left-slider :index="index" @deleteItem="deleteItem"> <Financial :item="item" :index="index"></Financial> </left-slider> </div> </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>
Vue具體輕量級框架、簡單易學、雙向數據綁定、組件化、數據和結構的分離、虛擬DOM、運行速度快等優勢,Vue中頁面使用的是局部刷新,不用每次跳轉頁面都要請求所有數據和dom,可以大大提升訪問速度和用戶體驗。
“vue怎么實現左滑刪除功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。