如何在 Angular 2 / 4 中使用鼠标滚轮事件测试指令

Posted

技术标签:

【中文标题】如何在 Angular 2 / 4 中使用鼠标滚轮事件测试指令【英文标题】:How to test a directive with a mouse wheel event in angular 2 / 4 【发布时间】:2017-11-04 09:10:32 【问题描述】:

我有一个具有鼠标滚轮事件的指令,它用于放大和缩小画布。我想知道如何为这样的事件编写单元测试。我在网上找不到任何示例,有人能指出正确的方向吗?

我的指令:

import  Directive, ElementRef, HostListener from "@angular/core";
import  MyService  from "./my-service";
@Directive(
    selector: "[testDirec]"
)
export class Test 
  private initPointX: number;
  private initPointY: number;

  constructor(private ele: ElementRef,
        private serviceInstance: MyService) 
    

    @HostListener('mousewheel', ['$event'])
    scroll(event: MouseEvent) 
        console.log("Entered mouse wheel");
        let wheelDelta = Math.max(-1, Math.min(1, (event.wheelDelta || -event.detail)));
        if(wheelDelta > 0) 
          factor = 0.5;
        else 
         factor = 2.0;
        

        this.initPointX = event.PageX;
        this.initPointY = event.PageY;   
     


【问题讨论】:

【参考方案1】:

您应该使用转换并对其进行测试。如下

<div scrollstyle="height:1000px;background-color:red">
      <input type="text" value=""/>
</div>



@Directive(
    selector: '[scroll]'
)
export class ChangeDirective
 i:number=1;
    constructor(
        private renderer: Renderer,
        private el: ElementRef
    )

    @HostListener('mousewheel', ['$event']) onMousewheel(event) 
      if(event.wheelDelta>0)
          event.srcElement.style.setProperty('transition','all 200ms ease-in')
          event.srcElement.style.setProperty('transform',"scale(" + this.i+1 +")")
      
      if(event.wheelDelta<0)
        event.srcElement.style.setProperty('transition','all 200ms ease-out')
        event.srcElement.style.setProperty('transform',"scale(" + this.i-1 +")")
      
    

LIVE DEMO

【讨论】:

以上是关于如何在 Angular 2 / 4 中使用鼠标滚轮事件测试指令的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用鼠标滚轮?

如何禁用鼠标的滚轮?

js中如何禁用鼠标滚轮事件?急,在线等!

在 GLUT 中使用鼠标滚轮

如何使用 JavaScript 在 Firefox 中触发鼠标滚轮事件?

Engine中如何实现鼠标滚轮缩放反置?