vue2移动端网页图片触摸滑动改变top和left以及双指对图片进行缩放

代码(这个是vue2中的代码,可以稍加转换vue3也可以用)

<template>
  <div class="coach_daily">
    <div class="coach_daily-inline">
      <div style="width: 100%;height: 100%;overflow: hidden;position: relative;z-index: 10;"
        @touchstart="startMap($event, 1)" @touchmove="moveMap($event, 1)" @touchend="endMap($event, 1)">
        <img class="coach_daily_bg" ref="contrastimg" :src="require('@/assets/image/bgc-00.png')"
          :style="{ transform: 'scale(' + store.scale + ')', top: top + 'px', left: left + 'px' }" alt="" />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data () {
    return {
      store: { //图片缩放
        scale: 1,
        pageX: '',
        pageY: '',

      },
      top: 0,
      left: 0,
      ot: 0,
      ol: 0,
      leaderboardphb: true
    }
  },
  methods: {
    // 图片的移动
    //开始触摸
    startMap (e, index) {
      console.log('e', e)

      this.ol = e.touches[0].clientX - this.$refs.contrastimg.offsetLeft
      this.ot = e.touches[0].clientY - this.$refs.contrastimg.offsetTop

      var touches = e.touches
      var events = touches[0]
      var events2 = touches[1]
      if (!events) {
        return
      }
      event.preventDefault()

      console.log(events.pageX)
      // 第一个触摸点的坐标
      this.store.pageX = events.pageX
      this.store.pageY = events.pageY
      this.store.moveable = true
      if (events2) {
        this.store.pageX2 = events2.pageX
        this.store.pageY2 = events2.pageY
      }
      this.store.originScale = this.store.scale || 1
    },
    //移动中
    moveMap (e, index) {
      let left = e.touches[0].clientX
      let top = e.touches[0].clientY
      this.top = top - this.ot
      this.left = left - this.ol


      e.preventDefault()
      let store = this.store
      var touches = e.touches
      var events = touches[0]
      var events2 = touches[1]
      if (events2) {
        // 双指移动
        if (!store.pageX2) {
          store.pageX2 = events2.pageX
        }
        if (!store.pageY2) {
          store.pageY2 = events2.pageY
        }

        // 获取坐标之间的举例
        var getDistance = function (start, stop) {
          return Math.hypot(stop.x - start.x, stop.y - start.y)
        }

        var zoom = getDistance({
          x: events.pageX,
          y: events.pageY
        }, {
          x: events2.pageX,
          y: events2.pageY
        }) /
          getDistance({
            x: store.pageX,
            y: store.pageY
          }, {
            x: store.pageX2,
            y: store.pageY2
          })

        var newScale = store.originScale * zoom
        // 最大缩放比例限制
        if (newScale > 3) {
          newScale = 3
        }
        // 记住使用的缩放值

        this.store.scale = newScale

      }

    },
    //结束
    endMap () {

    },
  }
}
</script>

<style scoped lang="less">
.coach_daily {
  width: 100vw;
  height: 100vh;
  // height: auto;
  position: relative;
  overflow: hidden;
}

.coach_daily_bg {
  position: absolute;
  width: 100%;
  height: 100%;
  z-index: -10;
}

.coach_daily-inline {
  width: 7.5rem;
  height: 10rem;
}
</style>

效果图(移动,手指怎么滑这里就怎么移动)
在这里插入图片描述
双指缩放(缩小)
在这里插入图片描述
双指缩放(放大)
在这里插入图片描述
上面代码直接复制粘贴到一个vue2的页面上,修改个图片地址即可,拿来即用

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
为了在Vue移动端实现双指图片缩放,你可以使用一个库叫做easyscroller。首先,你需要在项目中安装easyscroller库,可以使用npm命令进行安装。然后,在你的Vue组件中引入EasyScroller,并在mounted生命周期钩子中创建一个EasyScroller实例。你需要传入一个DOM元素作为容器,并设置一些配置选项,比如scrollingX和scrollingY来启用滚动,zooming来启用缩放,minZoom和maxZoom来限制缩放范围,zoomLevel来设置初始缩放级别等等。最后,在beforeDestroy生命周期钩子中销毁EasyScroller实例。这样,你就可以实现双指图片缩放的功能了。 下面是一个示例代码,你可以参考它来实现双指图片缩放: ``` <template> <div> <div id="zoomBox"> <!-- 缩放盒子 --> <img :src="imageUrl" alt="" class="img" /> </div> </div> </template> <script> import { EasyScroller } from 'easyscroller'; export default { mounted() { const ele = document.querySelector('#zoomBox'); this.scroller = new EasyScroller(ele, { scrollingX: true, scrollingY: true, zooming: true, minZoom: 0.5, maxZoom: 5, zoomLevel: 0.5,<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vue项目移动端双指缩放滑动](https://blog.csdn.net/MadSnail00/article/details/131481504)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [vue上传图片通过fabric.js实现移动端双指缩放,移动](https://blog.csdn.net/weixin_44218877/article/details/124102178)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧寂173

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值