微信小程序、uniapp使用touchstart和touchmove左右滑动删除。以及解决上下抖动问题。

这篇具有很好参考价值的文章主要介绍了微信小程序、uniapp使用touchstart和touchmove左右滑动删除。以及解决上下抖动问题。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信小程序、uniapp使用touchstart和touchmove左右滑动删除。以及解决上下抖动问题。
展示效果图直接上代码

<view
 v-for="(item, index) in arr"
 :key="item.id"
 @touchstart="touchstart($event)"
 @touchmove="touchmove(index, $event)"
 :class="['touch-item', item.isTouchMove ? 'touch-move-active' : '']"
>
 <view class="content">
   <view class="date_flex">
     <view>
       <text class="date">{{ item.data }}</text>
       <text class="quantity">{{ item.text }}</text>
     </view>
     <view>
       <u-switch space="2" v-model="value" activeColor="#FFDA00" size="40" inactiveColor="rgb(230, 230, 230)"></u-switch>
     </view>
   </view>
   <view class="bottom_date">1, 2, 3, 4</view>
 </view>
 <view class="del" @tap="del(index)">
  <view class="detail">
    <view class="detail_img">
      <img :src="require('@/static/images/detail.png')" alt="">
    </view>
    <view class="detail_text">删除</view>
  </view>
</view>
</view>

如果要修改里面内容直接从content这个类修改就行。

export default {
  data() {
    return {
      arr: [
        { id: '1', data: '12:00', text: '1份', isTouchMove: false },
        { id: '2', data: '12:00', text: '1份', isTouchMove: false },
      ],
      startX: 0, //开始坐标
      startY: 0,
    };
  },
  methods: {
    touchstart(e) {
      console.log('start', e);
      //开始触摸时 重置所有删除
      this.arr.forEach((v, i) => {
        if (v.isTouchMove)
          //只操作为true的
          v.isTouchMove = false;
      });
      this.startX = e.changedTouches[0].clientX;
      this.startY = e.changedTouches[0].clientY;
    },

    //滑动事件处理
    touchmove: function (indexNum, target) {
      let that = this,
        index = indexNum, //当前索引
        startX = that.startX, //开始X坐标
        startY = that.startY, //开始Y坐标
        touchMoveX = target.changedTouches[0].clientX, //滑动变化坐标
        touchMoveY = target.changedTouches[0].clientY, //滑动变化坐标
        //获取滑动角度
        angle = that.angle({ X: startX, Y: startY }, { X: touchMoveX, Y: touchMoveY });
      that.arr.forEach(function (v, i) {
        v.isTouchMove = false;
        //滑动超过30度角 return
        if (Math.abs(angle) > 15) return;
        if (i == index) {
          if (touchMoveX > startX)
            //右滑
            v.isTouchMove = false;
          //左滑
          else v.isTouchMove = true;
        }
      });
    },
    /**
     * 计算滑动角度
     * @param {Object} start 起点坐标
     * @param {Object} end 终点坐标
     */
    angle: function (start, end) {
      var _X = end.X - start.X,
        _Y = end.Y - start.Y;
      //返回角度 /Math.atan()返回数字的反正切值
      return (360 * Math.atan(_Y / _X)) / (2 * Math.PI);
    },
    //删除事件
    del: function (index) {
      this.arr.splice(index, 1);
    },
  },
};

.touch-item {
  font-size: 28rpx;
  display: flex;
  justify-content: space-between;
  width: 100%;  // 少一个会看到按钮
  overflow: hidden;
  margin-top: 40rpx;
}
.content {
  width: 100%;
  padding: 20rpx;
  line-height: 44rpx;
  margin-right: 0;
  -webkit-transition: all 0.4s;
  transition: all 0.4s;
  -webkit-transform: translateX(90px);
  transform: translateX(90px);
  margin-left: -154rpx;
  .date_flex {
    display: flex;
    justify-content: space-between;
    .date {
      font-size: 40rpx;
      font-family: PingFangSC-Medium, PingFang SC;
      font-weight: 500;
      color: #333333;
      margin-right: 49rpx;
    }
    .quantity {
      font-size: 24rpx;
      font-family: PingFangSC-Medium, PingFang SC;
      font-weight: 500;
      color: #ff9200;
    }
  }
  .bottom_date {
    margin-top: 10rpx;
  }
}
.del {
  background-color: orangered;
  width: 180rpx;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  color: #fff;
  -webkit-transform: translateX(90px);
  transform: translateX(90px);
  -webkit-transition: all 0.4s;
  transition: all 0.4s;
  .detail {
   .detail_img {
     text-align: center;
      img {
        width: 30rpx;
        height: 30rpx;
      }
    }
    .detail_text {
      font-size: 28rpx;
      font-family: PingFangSC-Regular, PingFang SC;
      font-weight: 400;
      color: #FFFFFF;
    }
  }
}
.touch-move-active .content,
.touch-move-active .del {
  -webkit-transform: translateX(0);
  transform: translateX(0);
}

直接复制粘贴就行。拿上直接用。
如果遇到滑动会导致上下抖动用这个解决。给最外层得一个view标签加一个样式。

.rev {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: 0;
  overflow: hidden;
}

这样的话滑动会有阴影,但不会抖动,可以尝试一下看看,如果哪位能人能解决,就麻烦分享一下了 。在此谢过。文章来源地址https://www.toymoban.com/news/detail-514511.html

到了这里,关于微信小程序、uniapp使用touchstart和touchmove左右滑动删除。以及解决上下抖动问题。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【小程序教程】微信小程序的事件处理和交互逻辑(tap logpress touchmove input submint事件&冒泡与捕捉最详细讲解)

    为什么要学习事件处理和交互逻辑? 事件处理和交互逻辑在小程序开发中扮演着至关重要的角色。以下是几个原因: 提升用户体验:良好的事件处理和交互逻辑可以使小程序更加易用和友好,提升用户体验。通过合理设置事件触发条件和交互效果,可以使用户操作更加顺畅

    2024年02月04日
    浏览(41)
  • 微信小程序 左右滑动方法

    实现小程序左右滑动操作 wxml,在当前view层滑动操作 data数据

    2024年02月11日
    浏览(47)
  • 微信小程序实现手机屏幕左右旋转,页面元素左右移动,小程序加速计

    在做微信小程序的项目时,有一个需求是当用户左右旋转手机屏幕时,页面上特定的元素要随着用户的旋转动作左右移动。当将手机屏幕向左旋转时,人物向左移动;手机屏幕向右旋转时,人物向右移动。 这里主用到了微信小程序的加速计: 开始监听加速度数据, wx.startA

    2024年02月09日
    浏览(38)
  • 微信小程序(二)微信小程序选择本地图片显示并预览(实现左右滑动)

    在微信小程序里面实现选择图片然后预览是一个非常普遍的功能,在我们上传图片文件的时候,都会选择本地的图片进行上传,在上传之前会查看一下自己上传的图片是否准确。所以要做到预览图片。 下面就实现一个简单的本地图片显示预览的功能~~ 1、创建页面 这里我直接

    2024年02月03日
    浏览(44)
  • 微信小程序 简单的实现左右内容联动

    scroll-view 的属性 scroll-into-view 可以实现类似于瞄点链接的效果,在绑定的属性修改时会触发,滑动到对应id的地方 注意: id不能以数字开头 设置两个变量 tabIndex 、 nowIndex 保存状态,如果只设置一个更新变量时会触发瞄点更新 通过 tabIndex 更新瞄点 通过 nowIndex 设置当前的分类

    2024年02月03日
    浏览(53)
  • uniapp 微信小程序使用echarts

    本文目的:通过分包的方式,尽可能在微信小程序中使用最新的echarts。 当然你也可以直接使用现成的uchart或者市场里别人封好的echarts. 准备工作 下载echarts-for-weixin源码。 复制 ec-canvas 文件夹以及下属文件,在uniapp项目中与pages同级的地方创建 wxcomponents 文件夹,将复制的文件

    2024年02月04日
    浏览(32)
  • UNIAPP微信小程序使用Echarts

    ​ 最近要在uniapp做的小程序中使用echarts,网上搜了很多教程都很麻烦,这里提供一种简便快捷CV方案。 ​ 先说下图表选型的问题,如果你只用于微信小程序,可以使用本方案,Echarts丰富多样的图表和广大的开源图库都已使用。如果要考虑兼容性问题,比如兼容支付宝小程序

    2024年02月09日
    浏览(30)
  • 微信小程序———同一页面内左右滑动切换内容显示

    一、微信小程序事件  由于首先介绍一下微信小程序中的事件,可选择快速略过或者直接进去之后的重点内容 一、什么是事件 事件是视图层到逻辑层的通讯方式。 事件可以将用户的行为反馈到逻辑层进行处理。 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对

    2024年02月03日
    浏览(47)
  • 微信小程序点单左右联动的效果实现

    微信小程序点单左右联动的效果实现 原理解析:   点击左边标签会跳到右边相应位置:点击改变rightCur值,转跳相应位置滑动右边,左边标签会跳到相应的位置:监听并且设置每个右边元素的top和bottom,再判断当前滑动高度在那个元素之间,再改变左边的标签的tabCur,并且

    2024年02月06日
    浏览(36)
  • uniapp微信小程序中使用echarts

    可以先随便建个文件夹,然后 npm init。运行下面的命令行,下载依赖 找到node_modulesmpvue-echarts下的文件,保留src文件夹,其他删除,复制mpvue-echarts文件夹到项目的components中 1.2、获取定制echarts的js文件 在https://echarts.apache.org/zh/builder.html定制echarts的js文件,然后下载,放到c

    2024年02月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包