亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何模擬鼠標事件以測試角度指令

如何模擬鼠標事件以測試角度指令

躍然一笑 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 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號