微信小程序缩放图片与滑动图片:movable-view与swiper一起使用所产生的手势冲突的基本解决方案(操作过于频繁还是会出现问题,基本的使用是没有问题的)

这篇具有很好参考价值的文章主要介绍了微信小程序缩放图片与滑动图片:movable-view与swiper一起使用所产生的手势冲突的基本解决方案(操作过于频繁还是会出现问题,基本的使用是没有问题的)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.一些参数和需要用到的方法js代码注释都有了,只要复制过去看就好了
2.怎么解决这个手势冲突呢,我采用的是mina-touch插件,去监听这两种手势,当双指在的时候,长按事件就不触发,滑动的时候长按事件也要阻止,因为在不停的滑动的时候,也会长按,大概就是这么一个思路。
3.有疑问的同学欢迎留言,看到后回复
4.ps:关于百度小程序的我也写过了,双指和滑动事件冲突掉了,然后去询问百度官方的也暂时没有解决方案,自己手写的兼容性也不是很好
demo文章来源地址https://www.toymoban.com/news/detail-609896.html

//html模块
<view>
  <call-sall isShowCallSale="{{isShowCallSale}}" bind:hidenAllDialog="hidenAllDialog" phoneNumber="{{phoneNumber}}" extNumber="{{extNumber}}"></call-sall>
  <view class="preView_image" bindtap="closePreview" wx:if="{{isShowPreviewDetail}}" bindtouchstart="touch1.start"
  bindtouchmove="touch1.move" bindtouchend="touch1.end"  bindtouchcancel="touch1.cancel" bindmultipointStart="touch1.multipointStart" bindmultipointEnd="touch1.multipointEnd" bindlongTap="touch1.longTap" >
    <view class="preView_image_head">
      <view class="left_icon" bindtap="closePreview">
        <image style="width: 26rpx;height: 26rpx;" src="https://szimg.xhj.com/xhj/images/2023-04-20/cbf044b5-71a2-4ab7-9a64-872f0add918e.png"></image>
      </view>
      <view class="center_title">户型图{{imgUrlsIndex+1}}/{{imgUrlsPreview.length}}</view>
      <view></view>
    </view>
    <swiper class="preview_image_swiper" current="{{imgUrlsIndex}}" bindchange="previewBindChange">
      <swiper-item wx:for="{{imgUrlsPreview}}" wx:key="index" class="preview_image_swiper_item" circular='true'>
        <movable-area style="width: 100%;height: 100%;" scale-area="true" catchtap="doubleTap" >
            <movable-view style="width: 100%;height: 100%;" direction="all" scale="true" out-of-bounds="true"  scale-max="2" scale-min="0.5" scale-value="{{scaleValue}}">
              <image src="{{item}}" class="preView_image_item"  preview="false" mode="aspectFit" show-menu-by-longpress="{{isSaveImage}}"  />
            </movable-view>
        </movable-area>
      </swiper-item>
    </swiper>
  </view>
</view>
js代码模块
// components/previewImage/index.js
import MinaTouch from 'mina-touch'; //引入mina-touch
Component({
  /**
   * 组件的属性列表
   */
  properties: {
      // 是否显示该组件
      isShowPreviewDetail: {
        // 属性名
        type: Boolean,
        // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
        value:true,
        // 属性初始值(必填)
    },
    // 当前图片索引
    imgUrlsIndex:{
        type:Number,
        value:0
    },
    // 展示图片数组
    imgUrlsPreview:{
        type:Array,
        value:[]
    },
    // 是否显示数组
    weiliaoIsShow:{
        type:Boolean,
        value:true
    },
  },

  /**
   * 组件的初始数据
   */
  data: {
    // 是否保存图片,一般来说是直接就可以保存的
    isSaveImage:true,
    // 双击定义扩大倍数
    scaleValue:1,
    // 最后一次点击时间
    lastTapTime: 0,
    // 是否放大
    isScale:false
  },
  /**
   * 组件的方法列表
   */
  // 组件的生命周期
  created(){
    let that=this
    new MinaTouch(this,'touch1',{
       //会创建this.touch1指向实例对象
       touchStart: function () {
        that.setData({
          isSaveImage:true
         })
       },
       touchMove: function () {
        // console.log('touchMove')
        that.setData({
          isSaveImage:false
         })
       },
       touchEnd: function () {
        that.setData({
          isSaveImage:true
         })
       },
       touchCancel: function () {
       },
       multipointStart: function () {
         that.setData({
          isSaveImage:false
         })
       }, //一个手指以上触摸屏幕触发
       multipointEnd: function () {
        that.setData({
          isSaveImage:true
         })
       }, //当手指离开,屏幕只剩一个手指或零个手指触发(一开始只有一根手指也会触发)
       tap: function () {
         console.log('Tap');
        //  that.closePreview()
       }, //点按触发,覆盖下方3个点击事件,doubleTap时触发2次
       doubleTap: function () {
         console.log('doubleTap');
       }, //双击屏幕触发
       longTap: function () {
            that.setData({
            isSaveImage:true
            })
       }, //长按屏幕750ms触发
       singleTap: function () {
         console.log('singleTap');
       }, //单击屏幕触发,包括长按
       rotate: function (evt) {
         //evt.angle代表两个手指旋转的角度
        //  console.log('rotate:' + evt.angle);
       },
       pinch: function (evt) {
         //evt.scale代表两个手指缩放的比例
        //  console.log('pinch:' + evt.zoom);
       },
       pressMove: function (evt) {

         that.pressView(evt.deltaX);
       },
    })
  },
  methods: {
    pressView(deltaX) {
      let translateX = this.data.translateX;
      translateX -= deltaX;
      if (translateX < 0) translateX = 0;
      if (translateX > 200) translateX = 200;
      this.setData({
        translateX,
      });
    },

    // 关闭当前预览图片
    closePreview(e){
      this.setData({
        scaleValue:1
      })
        this.triggerEvent('closePreview',false)
    },
    // 改变当前图片索引
    previewBindChange(e){
      this.setData({
        scaleValue:1
      })
        this.triggerEvent('previewBindChange',e.detail.current)
    },
    doubleTap(){
      const now = Date.now();
      const lastTapTime = this.data.lastTapTime;
      let isScale=this.data.isScale
      if (now - lastTapTime < 300) {
        console.log('Double tap detected');
        // Perform double-click action here

        this.setData({
          scaleValue:!isScale?2:1,
          isScale:!isScale
        })
      } else {
        this.setData({ lastTapTime: now });
      }
    },
  }
})

//css模块
.preView_image{
  position: fixed;
    background-color: #000;
    width: 100%;
    height: 100%;
    color: white;
    padding-top:40rpx ;
    z-index: 1;
    overflow: hidden;
  }
  .preView_image_head{
    display: flex;
    flex-direction: row;
    justify-content: space-around;
  }
  .preview_image_swiper{
    margin-top: 50rpx;
    height: 860rpx !important;
  }
  .preview_image_swiper_item{
    width: 100%;
    height: 100%;
  }
 .preView_image_item{
   width: 100%;
   height: 100%;
 }
.preView_image_foot{
  margin-top: 30rpx;
  display: flex;
  justify-content: space-around;
}
.preView_image_chat{
  display: flex;
  width: 300rpx;
  padding: 30rpx;
  background-color: #40c7bc;
  text-align: center;
  border-radius:10rpx ;
}
.preView_image_chat_left{
  width: 40rpx;
  height: 40rpx;
  transform: translateY(6rpx);
  margin:0 20rpx;
}
.preView_image_chat_right{
  margin-left: 30rpx;
  display: block;
}
.preView_image_phone{
  background-color: #2caed8 !important;
}
.mask_image{
  position: absolute;
  width: 100%;
  height: 100%;
  z-index: 999;
}
.bottom_pop{
  position: fixed;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.3);
  z-index: 9999;
  display: flex;
}
.bottom_pop_buttom{
  width: 100%;
  align-self:flex-end;
  height: 200rpx;
  background-color: gray;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  transform: translateY(-220rpx);
  padding-bottom:20rpx ;
}
.bottom_pop_buttom>button{
  width: 100%;
}

到了这里,关于微信小程序缩放图片与滑动图片:movable-view与swiper一起使用所产生的手势冲突的基本解决方案(操作过于频繁还是会出现问题,基本的使用是没有问题的)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【微信小程序-原生开发】列表 - 拖拽排序(官方组件 movable-area 和 movable-view 的用法)

    实现逻辑详见代码的注释 需要根据各项的内容,调整或动态生成 ITEM_HEIGHT 值 因 movable-view 是绝对定位,不方便实现水平居中,所以设定 width: 100%; 占满宽度

    2024年02月11日
    浏览(83)
  • 滑动验证组件---设置movable-view组件的x属性在微信小程序端失效的问题

    采用uniapp的movable-view组件实现滑动验证组件。 流程 滑块未滑到最右端时,回弹到原点 滑块滑到最右端时,则显示滑动结束,不可再滑动 频繁设置uniapp的movable-view组件的x属性,在H5端正常,但在微信小程序端则失效。 index.vue woSlider.vue H5端 微信小程序端 官方给出的解释: 由

    2024年02月11日
    浏览(35)
  • 微信小程序 — 图片实现缩放,拖拽功能

    movable-view 可移动的视图容器,在页面中可以拖拽滑动。 movable-view必须在 movable-area 组件中,并且必须是直接子节点,否则不能移动。 如果想让图片实现缩放,拖拽效果。则可以把图片放到movable-view容器里面 。 movable-view 可移动的视图容器,在页面中可以拖拽滑动。 效果如下

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

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

    2024年02月03日
    浏览(75)
  • 微信小程序中的拖拽和缩放图片功能

    在现代的移动应用开发中,拖拽和缩放功能变得越来越重要。它们不仅使应用程序更具交互性,还为用户提供了更直观、更高效的使用体验。微信小程序作为一个流行的开发平台,也提供了这样的功能。以下是在微信小程序中实现拖拽和缩放图片的步骤和注意事项。 1.设置图

    2024年03月14日
    浏览(50)
  • uniapp中使用canvas,在微信小程序中实现图片缩放移动涂鸦文字

    最近需要一个功能,在微信中编辑图片,实现对图片的涂鸦、加文字、缩放、移动,以下基本能实现该功能。 uniapp中使用画布,实现图片的编辑-批量批改图片 1.初始化画布图片,图片是网络图片,非本地图片,所以需要先获取图片信息,直接使用uni.getImageInfo(如果是本地图

    2024年04月14日
    浏览(63)
  • 微信小程序 movable-area 区域拖动动态组件演示

    movable-area 组件在小程序中的作用是用于创建一个可移动的区域,可以在该区域内拖动视图或内容。这个组件常用于实现可拖动的容器或可滑动的列表等交互效果。 使用 movable-area 组件可以对其内部的 movable-view 组件进行拖动操作,可以通过设置不同的属性和事件来自定义拖动

    2024年02月03日
    浏览(47)
  • 微信小程序通过 movable-area 做一个与vuedraggable相似的上下拖动排序控件

    因为只是做个小案例 我就直接代码写page页面里了 其实很简单 组件稍微改一下就好了 wxss 就是很普通的样式编写 js代码 我的注释还是写的非常认真的 大家可以好好读一读 然后 wxml 没什么特别的 就是渲染一下list 这样 我们就做了一个 可以上下拖动元素排序的小案例了 效果也

    2024年02月07日
    浏览(50)
  • 微信小程序滑动导航栏

    微信小程序可以使用组件库中的 scroll-view 组件和 swiper 组件实现滑动导航栏。 下面是一个使用 scroll-view 组件实现滑动导航栏的例子: 在 .wxml 文件中定义 scroll-view 组件和导航栏 php Copy code scroll-view scroll-x=\\\"true\\\" class=\\\"nav-scroll\\\"   view class=\\\"nav-item {{activeIndex==0?\\\'active\\\':\\\'\\\'}}\\\" bindta

    2024年02月11日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包