最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Vue.js移动端左滑删除组件的实现代码

来源:懂视网 责编:小采 时间:2020-11-27 22:30:49
文档

Vue.js移动端左滑删除组件的实现代码

Vue.js移动端左滑删除组件的实现代码:左滑删除在移动端很常见。下面我们一起来封装一下这个简单的小组件。我们想要是: 当滑块没有超过删除按钮的一半时自动回到起点位置。 滑动距离超过一半滑动到最大值(删除按钮宽度) 尽量精简代码 效果如下: 在开始之前,我们先得将 [touchEventA
推荐度:
导读Vue.js移动端左滑删除组件的实现代码:左滑删除在移动端很常见。下面我们一起来封装一下这个简单的小组件。我们想要是: 当滑块没有超过删除按钮的一半时自动回到起点位置。 滑动距离超过一半滑动到最大值(删除按钮宽度) 尽量精简代码 效果如下: 在开始之前,我们先得将 [touchEventA

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

  • 当滑块没有超过删除按钮的一半时自动回到起点位置。
  • 滑动距离超过一半滑动到最大值(删除按钮宽度)
  • 尽量精简代码
  • 效果如下:

    在开始之前,我们先得将 [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.js移动端左滑删除组件的实现代码:左滑删除在移动端很常见。下面我们一起来封装一下这个简单的小组件。我们想要是: 当滑块没有超过删除按钮的一半时自动回到起点位置。 滑动距离超过一半滑动到最大值(删除按钮宽度) 尽量精简代码 效果如下: 在开始之前,我们先得将 [touchEventA
    推荐度:
    标签: VUE 实现 左滑删除
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top