基于vue2实现左滑删除功能


Posted in Javascript onNovember 28, 2017

左滑删除,很多UI框架里有,比如Mint-UI, Muse-UI等,一开始我们就是用的这两个,但是我们需求是要:左滑的时候出现img然后来实现点击删除,如下:

基于vue2实现左滑删除功能

因为用UI框架,还得改底层代码= =所以,我们小组就直接写了一个- -,心累……此组件多地方使用,所以建议还是放到common下。。

<template>
  <div class="left-delete">
    <div class="move"
       @touchstart="_touchStart"
       @touchmove="_touchMove"
       @touchend="_touchEnd"
       :style="txtStyle">
      <slot></slot>
    </div>
    <div class="deleteIcon" :style="zIndex" @click.prevent="deleteItem(index)"></div>
  </div>
</template>

<script>
  export default {
    props: {
      index: Number
    },
    data() {
      return {
        startX: 0,    //触摸位置
         moveX: 0,    //滑动时的位置
         disX: 0,    //移动距离
         txtStyle: '',
        delWidth: 200,
        top: '',
        zIndex: 'z-index:-1',
      }
    },
    methods: {
      _touchStart: function(ev) {
        ev = ev || event;
        if(ev.touches.length == 1){
          // 手指按下的时候记录按下的位置
          this.startX = ev.touches[0].clientX;
          console.log(this.startX)
        }
      },
      _touchMove: function(ev) {
        ev = ev || event;
        if(ev.touches.length == 1) {
          // 滑动过程中的实时位置
          this.moveX = ev.touches[0].clientX
          // 滑动过程中实时计算滑动距离
          this.disX = this.startX - this.moveX;
          // console.log('disX==>',this.disX)
          // 如果是向右滑动或者只是点击,不改变滑动位置
          if(this.disX < 0 || this.disX == 0) {
            // console.log('没有移动');
            this.txtStyle = "transform:translateX(0rem)";
          }else if (this.disX > 0) {
如果是向左滑动,则实时给这个根元素一个向左的偏移-left,当偏移量到达固定值delWidth时,固定元素的偏移量为 delWidth
            this.txtStyle = "transform:translateX(-" + this.disX/100 + "rem)";
            if (this.disX >= this.delWidth/100) {
              this.txtStyle = "transform:translateX(-" + this.delWidth/100 + "rem)";
              this.zIndex = "z-index:" + 10 + "rem";
            }
          }
        }
      },
      _touchEnd: function(ev) {
        if (event.changedTouches.length == 1) {
          this.startX = 0;
          this.zIndex = "z-index:" + -1 + "rem";
          console.log(event.changedTouches[0].clientX)
          // 手指移动结束后的水平位置
          let endX = event.changedTouches[0].clientX;
          // 触摸开始与结束,手指移动的距离
          this.disX = this.startX - endX;
          //如果距离小于删除按钮的1/2,不显示删除按钮
        }
      },
      deleteItem: function(index) {
        this.$emit('deleteItem', index);
      }
    }
  }
</script>

<style>
  .left-delete{
    width:100%;
    height:100%;
    position:relative;
    z-index:2;
  }
  .move{
    position: relative;
  }
  .deleteIcon{
    width: 2rem;
    height:100%;
    position: absolute;
    right:0;
    top:0;
    background:url(./../../assets/main/4.png) no-repeat;
    background-size: contain;
  }
</style>

然后哪个页面需要,哪个页面引入就好。比如myCollect页面需要,那么如下:

<template>
  <section class="myCollect">
 <section>
      <div v-for="(item,index) in collectionList">
        <left-slider :index="index" @deleteItem="deleteItem">
          <Financial :item="item" :index="index"></Financial>
        </left-slider>
      </div>
    </section>
  </section>
</template>
<script>
  import api from './../../fetch/api';
  import { mapGetters } from 'vuex';

  import Financial from './../common/financial.vue';
  import LeftSlider from './../common/leftSlider.vue';

  export default {
    name: 'MyCollect',
    props: {
      item: Object,
      index: Number
    },
    components: {
      Financial,
      LeftSlider
    },
    data() {
      return {

      }
    },
    created() {
      this.getCollectionList();
    },
    methods: {

    },
    computed: {
        ...mapGetters([
          'getContextPathSrc',
          'sessionId',
          'token'
        ]),
  },
  methods: {
    // 删除
    deleteItem: function(index) {
      api.commonApi('后台接口,请求数据')//此处api是封装的axios,详情看文章:vue2+vuex+axios即可
          .then(res => {
        console.debug("REQ_ADD_STORE.res.data.result -> " + res.data.result);
      this.collectionList.splice(index, 1);
    });
    }
  },
  mounted() {

  }
  }
</script>

然后就完成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript+xml技术实现分页浏览
Jul 27 Javascript
JavaScript访问样式表代码
Oct 15 Javascript
随鼠标上下滚动的jquery代码
Dec 05 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
Dec 08 Javascript
jQuery实现鼠标划过添加和删除class的方法
Jun 26 Javascript
利用JS判断鼠标移入元素的方向
Dec 11 Javascript
JavaScript数组push方法使用注意事项
Oct 30 Javascript
React-Router如何进行页面权限管理的方法
Dec 06 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
Jun 03 Javascript
Layui给switch添加响应事件的例子
Sep 03 Javascript
angularjs模态框的使用代码实例
Dec 20 Javascript
详解Vue 单文件组件的三种写法
Feb 19 Javascript
JavaScript生成简单等差数列
Nov 28 #Javascript
微信小程序用户自定义模版用法实例分析
Nov 28 #Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
Nov 28 #Javascript
浅谈vue中慎用style的scoped属性
Nov 28 #Javascript
元素全屏的设置与监听实例
Nov 28 #Javascript
vue2实现数据请求显示loading图
Nov 28 #Javascript
Vue2仿淘宝实现省市区三级联动
Apr 15 #Javascript
You might like
php 301转向实现代码
2008/09/18 PHP
php网站判断用户是否是手机访问的方法
2013/11/01 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
jQuery学习笔记之控制页面实现代码
2012/02/27 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
python的pdb调试命令的命令整理及实例
2017/07/12 Python
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
python实现Windows电脑定时关机
2018/06/20 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
2020/03/30 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
消防先进事迹材料
2014/02/10 职场文书
搞笑征婚广告词
2014/03/17 职场文书
班子四风对照检查材料
2014/08/21 职场文书
授权委托书公证
2014/09/14 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
青年文明号申报材料
2014/12/23 职场文书
中小企业员工手册范本
2015/05/14 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
python开发实时可视化仪表盘的示例
2021/05/07 Python
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python