vue移动端页面不能上下滑动(vue移动端实现左滑编辑与删除的全过程)
类别:编程学习 浏览量:2076
时间:2022-01-27 01:35:49 vue移动端页面不能上下滑动
vue移动端实现左滑编辑与删除的全过程前言
根据项目需要使用 Vue-touch 实现了一个vue移动端的左滑编辑和删除功能,废话不多说,先看效果图,然后上代码吧!
方法如下:
第一步:安装 vue-touch
npm install vue-touch@next --save
第二步:main.js 中引入
import VueTouch from 'vue-touch'; Vue.use(VueTouch, { name: 'v-touch' });
第三步:使用(用v-touch包住你要左滑删除的内容)
<li 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" > <!-- 下面li这一块是我页面需要左滑删除的项目内容,你可以替换成你自己的 --> <li 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>无</p> <p class="city">{{item.city}}</p> <li class="edit-delete df_sad" :ref="'editBtn' + key"> <li class="edit" @click="editFun('edit',item.id,item.image_url,item.redirect_url)"> <img src="../../assets/images/adver/ic_xiugai.jpg" alt="vue移动端页面不能上下滑动(vue移动端实现左滑编辑与删除的全过程)" border="0" />
第四步:定义变量,以及方法,下面代码可直接拷贝,将不需要的删除换成自己的,需要的留着就行
<script> import httpApi from "../../http/httpApi"; export default { name: "", data() { return { swipe: "", // 滑动的样式 wd: 0, // 编辑和删除按钮的宽度之和 swipeWd: 0, // 已经滑动的距离 activeId: "", // 实际是上一次的活动id //以上四个变量必须保留,下面的三个可以删除 page: 1, size: 10, list: [] }; }, methods: { //请求列表数据 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 = ""; //将上一次的活动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) { // 虽然请求删除接口删除了列表其中的某一项内容,但是页面上还有 //因此需要在本地数组中也删除,这样才完美,下面这行代码比较重要,可以写在你删除接口成功后的地方 this.list.splice(index, 1); this.modal.toastFun("删除成功"); } else if (res.code == 20000) { this.modal.toastFun(res.message); } }) .catch(err => {}); }, // 以下三个方法全部拷贝,无需修改 //滑动位置 onPanStart(id) { event.preventDefault(); // 获取右侧按钮宽度 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; }, //滑动位置 onPanMove(event) { event.preventDefault(); let deltaX = event.deltaX; // 组件向左移动直到最大距离 if (deltaX < 0 && deltaX > -this.wd) { // 向左滑动 this.swipe = "transform:translateX(" + deltaX + "px)"; this.swipeWd = deltaX; } if (deltaX > 0 && deltaX <= this.wd && this.swipeWd < 0) { // 向右滑动 let wx = deltaX + this.swipeWd; this.swipe = "transform:translateX(" + wx + "px)"; } }, // 结束位置 onPanEnd(event) { event.preventDefault(); // 判断向左移动的距离是否大于二分之一 let deltaX = event.deltaX; if (deltaX < 0) { if (deltaX <= -this.wd / 2) { // 向左滑动超过二分之一 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) { // 向左滑动超过二分之一 this.swipe = "transform:translateX(0px)"; this.swipeWd = 0; } else { this.swipe = "transform:translateX(" + this.swipeWd + "px)"; } } } }, }; </script>
style
我只贴出了上面代码的css样式,根据需求自行删减吧,有需要的留着,不需要的删除,需要改变的自行修改
.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%; // 超过100% transition: 0.1s ease 0s; // 过渡效果 } .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%); }
总结
有需要的拿走根据自己的需求稍做修改即可,写的很详细,到此这篇关于vue移动端实现左滑编辑与删除的全过程的文章就介绍到这了,更多相关vue左滑编辑与删除内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- vue实现图片上传数据库(vue.js根据图片url进行图片下载)
- vue 动态绑定指令(vue动态绑定图标的完整步骤)
- mongovue的使用
- vue用于动态切换组件的内置组件(Vue 可拖拽组件Vue Smooth DnD的使用详解)
- vue获取图片并展示(vue卡片式点击切换图片组件使用详解)
- vue路由跳转自动定位在哪里(Vue路由this.route.push跳转页面不刷新的解决方案)
- vue引用js库报错(Vue插件报错:Vue.js is detected on this page.问题解决)
- vue功能测试和生产环境切换(vue 单元测试的推荐插件和使用示例)
- vue如何检查数组变化(Vue2中无法检测到数组变动的原因及解决)
- vue可以使用jsx语法吗(vue中正确使用jsx语法的姿势分享)
- vue 为什么使用虚拟dom(Vue虚拟Dom到真实Dom的转换)
- vue封装一个功能函数(vue中利用mqtt服务端实现即时通讯的步骤记录)
- springboot vue 异地登录(vue+springboot实现登录验证码)
- vue移动端页面不能上下滑动(vue移动端实现左滑编辑与删除的全过程)
- vue 父组件传值(Vue两个同级组件传值实现)
- vue3.0零基础入门(快速掌握Vue3.0中如何上手Vuex状态管理)
- 硕博期刊 SCI SSCI CSSCI分不清 一文带你看懂主流期刊分类(硕博期刊SCISSCI)
- 辱华品牌新百伦官宣新代言人IU,个别粉丝希望get爱豆同款(辱华品牌新百伦官宣新代言人IU)
- 巅峰时期被爆床照,曾被选国民最讨厌女星,IU不为人知的黑历史(巅峰时期被爆床照)
- 每天1万吨牛奶倒进下水道,美国大萧条一幕重现(每天1万吨牛奶倒进下水道)
- 如何看待美国数十万加仑牛奶倒下水道 历史又重演了(如何看待美国数十万加仑牛奶倒下水道)
- 历史惊人的相似,美国80万加仑牛奶倒入下水道,意味着什么(历史惊人的相似)
热门推荐
- 云主机和虚拟主机的区别(云主机有哪些虚拟化技术?)
- mysql表结构设计分享(MySql开发之自动同步表结构)
- php包含哪些(php文件包含的几种方式总结)
- python模块都是自己的语法(详解Python_shutil模块)
- easyui layout 折叠后显示标题
- python3.8爬虫需要的包(python爬取基于m3u8协议的ts文件并合并)
- harborjob设置(harbor修改配置文件后重启操作)
- docker虚拟化容器使用教程(Docker安装ClickHouse并初始化数据测试)
- MySQL 使用事件(Events)完成计划任务(MySQL 使用事件Events完成计划任务)
- dockerswarm网络架构(docker swarm外部验证负载均衡时不生效的解决方案)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9