左滑删除在移动端很常见。下面我们一起来封装一下这个简单的小组件。我们想要是:

效果如下:
在开始之前,我们先得将 [touchEventApi][1]弄清楚了。这个小组件中,用到了:
1. TouchEvent.touches (表示一 个 TouchList 对象,包含了所有当前接触触摸平面的触点的Touch对象)
2. TouchEvent.changedTouches (一个 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>
到这里就全部完成了,希望对大家有帮助!也希望大家多多支持。
# Vue.js
# 左滑删除
# 删除组件
# Vue
# 左滑删除组件
# Vue 仿QQ左滑删除组件功能
# Vue 使用 Mint UI 实现左滑删除效果CellSwipe
# 基于vue2实现左滑删除功能
# 使用Vue实现移动端左滑删除效果附源码
# mpvue小程序仿qq左滑置顶删除组件
# vue 左滑删除功能的示例代码
# vue项目实现左滑删除功能(完整代码)
# vue移动端实现左滑编辑与删除的全过程
# 的是
# 滑块
# 插槽
# 一只
# 包含了
# 我们一起
# 多说
# 弄清楚
# 大家多多
# 先得
# 过程中
# 不改变
# 发生了
# 完成了
# 半时
# content
# delete
# slider
# div
# gt
相关文章:
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何快速搭建安全的FTP站点?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
如何快速完成中国万网建站详细流程?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
PHP正则匹配日期和时间(时间戳转换)的实例代码
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
制作国外网站的软件,国外有哪些比较优质的网站推荐?
简单实现Android验证码
如何用wdcp快速搭建高效网站?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
海南网站制作公司有哪些,海口网是哪家的?
制作农业网站的软件,比较好的农业网站推荐一下?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
建站之星如何助力企业快速打造五合一网站?
如何做静态网页,sublimetext3.0制作静态网页?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
如何高效利用200m空间完成建站?
建站VPS推荐:2025年高性能服务器配置指南
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何通过PHP快速构建高效问答网站功能?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
Java解压缩zip - 解压缩多个文件或文件夹实例
如何用虚拟主机快速搭建网站?详细步骤解析
如何通过宝塔面板实现本地网站访问?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
制作旅游网站html,怎样注册旅游网站?
如何通过VPS搭建网站快速盈利?
如何选择域名并搭建高效网站?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何快速搭建支持数据库操作的智能建站平台?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
如何解决VPS建站LNMP环境配置常见问题?
专业商城网站制作公司有哪些,pi商城官网是哪个?
制作销售网站教学视频,销售网站有哪些?
开源网站制作软件,开源网站什么意思?
制作营销网站公司,淘特是干什么用的?
如何挑选优质建站一级代理提升网站排名?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
如何在七牛云存储上搭建网站并设置自定义域名?
公司网站制作价格怎么算,公司办个官网需要多少钱?
如何快速重置建站主机并恢复默认配置?
网站专业制作公司有哪些,做一个公司网站要多少钱?
如何快速选择适合个人网站的云服务器配置?
建站之星代理如何优化在线客服效率?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
C#怎么使用委托和事件 C# delegate与event编程方法
*请认真填写需求信息,我们会在24小时内与您取得联系。