vue移動(dòng)端實(shí)現(xiàn)左滑編輯與刪除的全過(guò)程
前言
根據(jù)項(xiàng)目需要使用 Vue-touch 實(shí)現(xiàn)了一個(gè)vue移動(dòng)端的左滑編輯和刪除功能,廢話不多說(shuō),先看效果圖,然后上代碼吧!

方法如下:
第一步:安裝 vue-touch
npm install vue-touch@next --save
第二步:main.js 中引入
import VueTouch from 'vue-touch';
Vue.use(VueTouch, {
name: 'v-touch'
});
第三步:使用(用v-touch包住你要左滑刪除的內(nèi)容)
<div class="wrap">
<v-touch
style="margin-bottom:10px"
v-on:panstart="onPanStart(key)"
v-on:panmove="onPanMove"
v-on:panend="onPanEnd"
v-for="(item, key) in list"
:key="key"
>
<!-- 下面div這一塊是我頁(yè)面需要左滑刪除的項(xiàng)目?jī)?nèi)容,你可以替換成你自己的 -->
<div class="item df_sb item-p" :style="activeId === key ? swipe : ''">
<p class="left-img">
<img :src="item.image_url" alt>
</p>
<p class="url" v-if="item.redirect_url != '' ">{{item.redirect_url}}</p>
<p class="city nothave" v-else>無(wú)</p>
<p class="city">{{item.city}}</p>
<div class="edit-delete df_sad" :ref="'editBtn' + key">
<div class="edit" @click="editFun('edit',item.id,item.image_url,item.redirect_url)">
<img src="../../assets/images/adver/ic_xiugai.png" alt>
</div>
<p class="edit-line"></p>
<div class="ad-delete" @click="deleteFun(key,item.id)">
<img src="../../assets/images/adver/ic_shanchu.png" alt>
</div>
</div>
</div>
</v-touch>
</div>
第四步:定義變量,以及方法,下面代碼可直接拷貝,將不需要的刪除換成自己的,需要的留著就行
<script>
import httpApi from "../../http/httpApi";
export default {
name: "",
data() {
return {
swipe: "", // 滑動(dòng)的樣式
wd: 0, // 編輯和刪除按鈕的寬度之和
swipeWd: 0, // 已經(jīng)滑動(dòng)的距離
activeId: "", // 實(shí)際是上一次的活動(dòng)id
//以上四個(gè)變量必須保留,下面的三個(gè)可以刪除
page: 1,
size: 10,
list: []
};
},
methods: {
//請(qǐng)求列表數(shù)據(jù)
getList($state) {
let params = new URLSearchParams();
params.append("page", this.page);
params.append("size", this.size);
this.$post(httpApi.BANNERLIST, params)
.then(res => {
if (res.code == 10000) {
if (res.data) {
this.list = this.list.concat(res.data.list);
this.page++;
if (res.data.list.length === 10) {
$state.loaded();
} else {
$state.complete();
}
} else {
$state.complete();
}
} else {
$state.complete();
}
})
.catch(err => {
console.log(err);
});
},
// 編輯
editFun(type, image_id, image, url) {
this.$router.push({
path: "/issueAdvertising",
});
},
// 刪除
deleteFun(index, image_id) {
this.activeId = ""; //將上一次的活動(dòng)id制空
let params = new URLSearchParams();
params.append("agent_id", this.id);
params.append("image_id", image_id);
this.$post(httpApi.DELETEBANNER, params)
.then(res => {
if (res.code == 10000) {
// 雖然請(qǐng)求刪除接口刪除了列表其中的某一項(xiàng)內(nèi)容,但是頁(yè)面上還有
//因此需要在本地?cái)?shù)組中也刪除,這樣才完美,下面這行代碼比較重要,可以寫(xiě)在你刪除接口成功后的地方
this.list.splice(index, 1);
this.modal.toastFun("刪除成功");
} else if (res.code == 20000) {
this.modal.toastFun(res.message);
}
})
.catch(err => {});
},
// 以下三個(gè)方法全部拷貝,無(wú)需修改
//滑動(dòng)位置
onPanStart(id) {
event.preventDefault();
// 獲取右側(cè)按鈕寬度
let str = "editBtn" + id;
this.wd = 1.2 * this.$refs[str][0].offsetWidth;
// 初始化
if (this.activeId != id) {
this.swipe = "transform:translateX(0px)";
this.swipeWd = 0;
}
this.activeId = id;
},
//滑動(dòng)位置
onPanMove(event) {
event.preventDefault();
let deltaX = event.deltaX;
// 組件向左移動(dòng)直到最大距離
if (deltaX < 0 && deltaX > -this.wd) {
// 向左滑動(dòng)
this.swipe = "transform:translateX(" + deltaX + "px)";
this.swipeWd = deltaX;
}
if (deltaX > 0 && deltaX <= this.wd && this.swipeWd < 0) {
// 向右滑動(dòng)
let wx = deltaX + this.swipeWd;
this.swipe = "transform:translateX(" + wx + "px)";
}
},
// 結(jié)束位置
onPanEnd(event) {
event.preventDefault();
// 判斷向左移動(dòng)的距離是否大于二分之一
let deltaX = event.deltaX;
if (deltaX < 0) {
if (deltaX <= -this.wd / 2) {
// 向左滑動(dòng)超過(guò)二分之一
this.swipe = "transform:translateX(" + -this.wd + "px)";
this.swipeWd = -this.wd;
} else {
this.swipe = "transform:translateX(0px)";
this.swipeWd = 0;
}
} else {
if (this.swipeWd < 0 && deltaX >= this.wd / 2) {
// 向左滑動(dòng)超過(guò)二分之一
this.swipe = "transform:translateX(0px)";
this.swipeWd = 0;
} else {
this.swipe = "transform:translateX(" + this.swipeWd + "px)";
}
}
}
},
};
</script>
style
我只貼出了上面代碼的css樣式,根據(jù)需求自行刪減吧,有需要的留著,不需要的刪除,需要改變的自行修改
.wrap {
width: 100%;
height: 100%;
overflow: hidden;
}
.item {
padding-left: 40px;
height: 120px;
background: #ffffff;
align-items: center;
flex-direction: inherit;
.left-img {
width: 120px;
height: 100px;
overflow: hidden;
img {
min-width: 120px;
height: 100px;
}
}
}
.url {
width: 400px;
padding: 10px 30px 0;
box-sizing: border-box;
word-wrap: break-word;
text-align: center;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.city {
text-align: center;
min-width: 100px;
}
.item-p {
color: #333333;
font-size: 22px;
}
.nothave {
color: #999999;
}
.hint {
height: 40px;
align-items: center;
margin-bottom: 30px;
}
.line {
width: 250px;
height: 1px;
background: #999999;
opacity: 0.5;
}
.item {
width: 120%; // 超過(guò)100%
transition: 0.1s ease 0s; // 過(guò)渡效果
}
.edit-line {
width: 2px;
height: 80px;
background: rgba(255, 255, 255, 1);
}
.edit-delete {
width: 160px;
height: 100%;
background: rgba(255, 126, 34, 1);
opacity: 0.8;
align-items: center;
}
.edit,
.ad-delete {
img {
width: 42px;
height: 42px;
}
}
.add-btn {
width: 200px;
height: 80px;
background: rgba(255, 126, 34, 1);
box-shadow: 0px 0px 5px 0px rgba(221, 221, 236, 1);
border-radius: 40px;
text-align: center;
line-height: 80px;
color: #ffffff;
font-size: 30px;
position: fixed;
bottom: 8%;
left: 50%;
transform: translateX(-50%);
}
總結(jié)
有需要的拿走根據(jù)自己的需求稍做修改即可,寫(xiě)的很詳細(xì),到此這篇關(guān)于vue移動(dòng)端實(shí)現(xiàn)左滑編輯與刪除的全過(guò)程的文章就介紹到這了,更多相關(guān)vue左滑編輯與刪除內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue對(duì)象添加屬性(key:value)、顯示和刪除屬性方式
這篇文章主要介紹了vue對(duì)象添加屬性(key:value)、顯示和刪除屬性方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
改變vue請(qǐng)求過(guò)來(lái)的數(shù)據(jù)中的某一項(xiàng)值的方法(詳解)
下面小編就為大家分享一篇改變vue請(qǐng)求過(guò)來(lái)的數(shù)據(jù)中的某一項(xiàng)值的方法(詳解),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
vue實(shí)現(xiàn)前端按鈕組件權(quán)限管理
這篇文章主要為大家介紹了vue實(shí)現(xiàn)前端按鈕組件權(quán)限管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
淺談實(shí)現(xiàn)在線預(yù)覽PDF的幾種解決辦法
這篇文章主要介紹了淺談實(shí)現(xiàn)在線預(yù)覽PDF的幾種解決辦法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
解決Vite打包后直接使用瀏覽器打開(kāi),顯示空白問(wèn)題
這篇文章主要介紹了解決Vite打包后直接使用瀏覽器打開(kāi),顯示空白問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
element中drawer模板的實(shí)現(xiàn)
本文主要介紹了element中drawer模板的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
vue項(xiàng)目打包清除console.log的四種方法總結(jié)
大家在項(xiàng)目開(kāi)發(fā)的時(shí)候,需要看看一些后端接口返回的結(jié)果,會(huì)多次使用console.log項(xiàng)目開(kāi)發(fā)完成打包的時(shí)候,發(fā)現(xiàn)控制臺(tái)一堆的console.log,非常頭疼,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目打包清除console.log的四種方法,需要的朋友可以參考下2023-04-04
vue+webpack 打包文件 404 頁(yè)面空白的解決方法
下面小編就為大家分享一篇vue+webpack 打包文件 404 頁(yè)面空白的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02

