hammerjs移动端手势放大或移动图片

博客介绍了在基于Angular的项目中引入HammerJS进行手势操作的方法。先通过npm install hammerjs下载,再在main.ts引入,接着在app.module.ts配置手势。还将操作封装成指令,引用时引入指令并在标签添加appDoubleGesture属性,同时给出参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于angular的项目引入hammerjs手势操作。
1、首先下载npm install hammerjs
2、在main.ts引入import ‘hammerjs’;
3、在app.module.ts对手势进行配置;

 import {
   HammerGestureConfig, HAMMER_GESTURE_CONFIG} from '@angular/platform-browser';
 
 export class MyHammerConfig extends HammerGestureConfig {
   
    overrides: any = {
   
        // override hammerjs default configuration
        'pan': {
   threshold: 5},
        'swipe': {
   
            velocity: 0.4,
            threshold: 20,
            direction: 31
        },
        'press': {
   }
    };
}


	@NgModule({
   
		providers:[
		 {
   
	            provide: HAMMER_GESTURE_CONFIG,
	            useClass: MyHammerConfig
	        }
		]
	})

下面进入正题:我是把这个操作封装成指令了,引用的时候引入这个指令,然后在标签添加appDoubleGesture属性

import {
   Directive, Input, ElementRef, Renderer2} from '@angular/core';
import {
   DomController} from "@ionic/angular";


@Directive({
   
  selector: '[appDoubleGesture]'
})
export class DoubleGestureDirective {
   
  tMatrix:Array<number> = [1,0,0,1,0,0]; //x缩放,无,无,y缩放,x平移,y平移
  initScale: number = 1;//初始化scale
  el:any;
  ticking:boolean = false;
  poscenter:any;
  duration:string='';//设置过渡效果,用于双击缩放效果
  lastTranslate:any;
  lastcenter:any;
  center:any;
  reqAnimationFrame:Function;
  constructor(public element: ElementRef, public renderer: Renderer2, public domCtrl: DomController) {
   
  }

  
  ngAfterViewInit() {
   
    let mc = new window['Hammer'](this.element.
Vue 3 中实现移动端两指控制图片缩放功能通常涉及使用 HammerJS 这样的手势库来监听用户的触屏事件,特别是 pinch(捏合)动作,它代表了用户同时用两个手指移动改变触摸点之间的距离,常用于图片放大缩小操作。 以下是一个简单的步骤指南: 1. **安装依赖**: 首先,你需要在项目中安装 HammerJS 和 Vue 的插件。可以使用 npm yarn 安装: ```sh npm install hammerjs vue-hammer # 者 yarn add hammerjs vue-hammer ``` 2. **引入并配置 Hammer实例**: 在 Vue 组件中导入 `vue-hammer` 并创建一个锤击实例: ```javascript import { createHammerInstance } from 'vue-hammer'; export default { setup() { const hammertime = createHammerInstance({ recognizers: [ ['pinch', 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(); // ... }, ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值