为了账号安全,请及时绑定邮箱和手机立即绑定

如何模拟鼠标事件以测试角度指令

如何模拟鼠标事件以测试角度指令

跃然一笑 2022-09-11 20:25:02
我正在尝试测试一个列可调整大小的指令,该指令侦听鼠标事件,如鼠标启动,鼠标移动,鼠标按下。调整大小列.指令.tsimport { Directive, OnInit, Renderer2, Input, ElementRef, HostListener } from "@angular/core";@Directive({  selector: "[resizeColumn]"})export class ResizeColumnDirective implements OnInit {  @Input() index: number;      private startX: number;      private startWidth: number;      private column: HTMLElement;      private table: HTMLElement;      private pressed: boolean;  constructor(private renderer: Renderer2, private el: ElementRef) {    this.column = this.el.nativeElement;  }  ngOnInit() {    if (this.resizable) {      const row = this.renderer.parentNode(this.column);      this.table = this.renderer.parentNode(row);      const resizer = this.renderer.createElement("span");      this.renderer.addClass(resizer, "resize-holder");      this.renderer.appendChild(this.column, resizer);      this.renderer.listen(resizer, "mousedown", this.onMouseDown);    }  }  onMouseDown = (event: MouseEvent) => {    this.pressed = true;    this.startX = event.pageX;    this.startWidth = this.column.offsetWidth;  };  @HostListener('document: mousemove')  onMouseMove(event: MouseEvent) {    const offset = 35;    if (this.pressed && event.buttons) {      this.renderer.addClass(this.table, "resizing");      // Calculate width of column      let width =        this.startWidth + (event.pageX - this.startX - offset);      const tableCells = Array.from(this.table.querySelectorAll(".custom-row")).map(        (row: any) => row.querySelectorAll(".custom-cell").item(this.index)      );    }  };我想为此指令创建单元测试,但我无法模拟鼠标事件。我正在使用触发器EventHandler来处理事件,但在模拟鼠标按下和鼠标移动后,我无法更新最大宽度和弹性基的值。
查看完整描述

1 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

尝试使用

headerEl.dispatchEvent(new MouseEvent('mousemove', {clientX: 50, clientY: 150}));

headerEl.dispatchEvent(new Event('mousemove', {pageX: 50, pageY: 150}));

更新:

我已经检查了你的代码,这里有两点:

  1. 您应该用于模拟鼠标移动事件document.dispatchEvent(new MouseEvent('mousemove', {clientX: 50, clientY: 150, buttons: 1}))

  2. 添加到@HostListener以防止在处理程序中未定义'$event'

@HostListener('document: mousemove', ['$event'])

onMouseMove(event: MouseEvent) {

  const offset = 35;

  if (this.pressed && event.buttons) {

    //your code

  }

};

请记住,变量应该是使代码正常工作pressedtrue


查看完整回答
反对 回复 2022-09-11
  • 1 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号