当前位置:网站首页>Vue.js Mobile end left slide delete component
Vue.js Mobile end left slide delete component
2020-11-06 01:22:00 【:::::::】
Vue.js The mobile end slides left to delete components
Left sliding deletion is very common on mobile terminals . Let's encapsulate this simple widget together . We want to be :
- When the slider does not exceed half of the delete button, it will automatically return to the starting position .
- Slide more than half to the maximum ( Delete button width )
- Try to simplify the code
Before we start , We have to put [touchEventApi][1] Make sure. . In this widget , Yes : 1. TouchEvent.touches ( Represent one individual TouchList object , Contains all contacts currently touching the touch plane Touch object ) 2. TouchEvent.changedTouches ( One TouchList object , Contains all the information from the last touch event to this event , Of a contact whose state has changed Touch object .)
Don't talk much , Go straight to the code :
<template> <div class="delete"> <div class="slider"> <div class="content" @touchstart='touchStart' @touchmove='touchMove' @touchend='touchEnd' :style="deleteSlider" > <!-- The slot contains the content needed in the specific project --> <slot></slot> </div> <div class="remove" ref='remove'> Delete </div> </div> </div> </template>
And then there was css, What I'm using here is 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; // Set the transition animation 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, // Touch the location endX:0, // End position moveX: 0, // Position when sliding disX: 0, // Moving distance deleteSlider: '',// The effect of sliding , Use v-bind:style="deleteSlider" } }, methods:{ touchStart(ev){ ev= ev || event //tounches An array of class , be equal to 1 At this time, there is only one finger touching the screen if(ev.touches.length == 1){ // Record the starting position this.startX = ev.touches[0].clientX; } }, touchMove(ev){ ev = ev || event; // Get the width of the delete button , This width is the maximum distance the slider slides to the left let wd=this.$refs.remove.offsetWidth; if(ev.touches.length == 1) { // Real time distance from left side of browser when sliding this.moveX = ev.touches[0].clientX // Start position minus Real time sliding distance , Get the finger offset in real time this.disX = this.startX - this.moveX; console.log(this.disX) // If it's sliding right or not , Don't change the position of the slider if(this.disX < 0 || this.disX == 0) { this.deleteSlider = "transform:translateX(0px)"; // Greater than 0, It means left slip , Now the slider starts to slide }else if (this.disX > 0) { // The specific sliding distance I take is Finger offset *5. this.deleteSlider = "transform:translateX(-" + this.disX*5 + "px)"; // The maximum can only be equal to the width of the delete button 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 the distance is less than half of the delete button , Forced back to the starting point if ((this.disX*5) < (wd/2)) { this.deleteSlider = "transform:translateX(0px)"; }else{ // More than half Slide to maximum this.deleteSlider = "transform:translateX(-"+wd+ "px)"; } } } } } </script>
It's all done here , Hopefully that helped ! I hope you can point out the deficiencies !
Participation of this paper Tencent cloud media sharing plan , You are welcome to join us , share .
版权声明
本文为[:::::::]所创,转载请带上原文链接,感谢
边栏推荐
- Real time data synchronization scheme based on Flink SQL CDC
- How long does it take you to work out an object-oriented programming interview question from Ali school?
- 做外包真的很难,身为外包的我也无奈叹息。
- 一篇文章带你了解CSS3图片边框
- 小程序入门到精通(二):了解小程序开发4个重要文件
- hadoop 命令总结
- Grouping operation aligned with specified datum
- 2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
- 5.5 controlleradvice notes - SSM in depth analysis and project practice
- What problems can clean architecture solve? - jbogard
猜你喜欢
关于Kubernetes 与 OAM 构建统一、标准化的应用管理平台知识!(附网盘链接)
Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
I'm afraid that the spread sequence calculation of arbitrage strategy is not as simple as you think
Existence judgment in structured data
Arrangement of basic knowledge points
阿里云Q2营收破纪录背后,云的打开方式正在重塑
教你轻松搞懂vue-codemirror的基本用法:主要实现代码编辑、验证提示、代码格式化
100元扫货阿里云是怎样的体验?
前端基础牢记的一些操作-Github仓库管理
多机器人行情共享解决方案
随机推荐
Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
一篇文章带你了解CSS3圆角知识
html
5.5 controlleradvice notes - SSM in depth analysis and project practice
Don't go! Here is a note: picture and text to explain AQS, let's have a look at the source code of AQS (long text)
速看!互联网、电商离线大数据分析最佳实践!(附网盘链接)
(2)ASP.NET Core3.1 Ocelot路由
Synchronous configuration from git to consult with git 2consul
How do the general bottom buried points do?
一篇文章带你了解HTML表格及其主要属性介绍
Common algorithm interview has been out! Machine learning algorithm interview - KDnuggets
采购供应商系统是什么?采购供应商管理平台解决方案
Python crawler actual combat details: crawling home of pictures
It's so embarrassing, fans broke ten thousand, used for a year!
hadoop 命令总结
Network security engineer Demo: the original * * is to get your computer administrator rights! 【***】
Mongodb (from 0 to 1), 11 days mongodb primary to intermediate advanced secret
Filecoin最新动态 完成重大升级 已实现四大项目进展!
git rebase的時候捅婁子了,怎麼辦?線上等……
你的财务报告该换个高级的套路了——财务分析驾驶舱