vue3基于hammerjs实现移动端图片拖动缩放旋转功能案例

首先我们先有一个需求,就是在移动端h5实现图片的拖动缩放旋转等手势操作。
假如我们使用原生的touch实现起来是非常麻烦,推荐使用一下hammerjs这个包进行处理这些手势操作。

hammerjs库:它可以让我们轻松的实现移动端上的手势操作, 也去除移动端上的点击事件的300ms延迟。它封装了一下这些方法:

  • pan 左右拖动
  • tap 点击
  • press 长时间按压
  • swipe 滑动
  • rotate 旋转效果
  • pinch 缩放

我写了个案例大概是这样子:
功能:(挂饰拖动滑动,缩放,旋转,重置位置,合成图片,预览图片)

  • 环境:vue3.x+vite2 (根据自身环境进行修改)
  • ui框架:vant3 (根据自身自行更换)
  • 手势库:hammerjs (必需)
  • 截图库:html2canvas (必需)

案例预览:

在这里插入图片描述
源码部分截图一下:
在这里插入图片描述

在这里插入图片描述

后续整理会发源码。
在这里插入图片描述

Vue 3实现移动端两指控制图片缩放功能通常涉及使用 HammerJS 这样的手势库来监听用户的触屏事件,特别是 pinch(捏合)动作,它代表了用户同时用两个手指移动或改变触摸点之间的距离,常用于图片的放大缩小操作。 以下是一个简单的步骤指南: 1. **安装依赖**: 首先,你需要在项目中安装 HammerJSVue 的插件。可以使用 npm 或 yarn 安装: ```sh npm install hammerjs vue-hammer # 或者 yarn add hammerjs vue-hammer ``` 2. **引入并配置 Hammer实例**: 在 Vue 组件中导入 `vue-hammer` 并创建一个锤击实例: ```javascript import { createHammerInstance } from &#39;vue-hammer&#39;; export default { setup() { const hammertime = createHammerInstance({ recognizers: [ [&#39;pinch&#39;, new Hammer.Pinch()], ], preventDefault: true, onPinch(e) { // 缩放处理逻辑 if (e.scale > 1) { this.scaleImage(+e.scale); } else if (e.scale < 1) { this.scaleImage(-e.scale); } }, }); return { hammertime }; }, }; ``` 3. **处理图片缩放**: 在组件中,你可以定义一个方法 `scaleImage(scale)` 来调整图片的大小,比如通过修改 `srcObject` 或 CSS transform 来实现缩放效果。 4. **绑定到元素**: 将锤击实例绑定到需要响应缩放图片元素上,例如 `<img>` 或者一个自定义的视图容器: ```html <template> <div :style="{ transform: getTransform() }"> <img ref="image" @pinchstart="$event.stopPropagation()" /> </div> </template> <script> export default { computed: { getTransform() { return this.hammertime.gestureCenter || { x: 0, y: 0 }; }, }, }; </script> ``` 5. **防止默认行为**: 别忘了阻止图片的原生缩放行为,以防冲突: ```javascript onPinch(e) { e.preventDefault(); // ... }, ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值