canvas-react-easy 1.0.7 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,21 +15,19 @@ export class ImageTool extends Tool {
15
15
  }
16
16
  listen() {
17
17
  const handler = (e) => {
18
- const canvas = e.target;
19
- const x = e.pageX - canvas.offsetLeft;
20
- const y = e.pageY - canvas.offsetTop;
18
+ const evt = e;
19
+ const canvas = evt.target;
20
+ const x = evt.pageX - canvas.offsetLeft;
21
+ const y = evt.pageY - canvas.offsetTop;
21
22
  const url = prompt("Введите ссылку на изображение");
22
23
  if (!url)
23
24
  return;
24
25
  const img = new Image();
25
26
  img.src = url;
26
- img.onload = () => {
27
- this.ctx.drawImage(img, x, y);
28
- };
29
- // удаляем обработчик после первого использования
30
- canvas.removeEventListener("mousedown", handler);
27
+ img.onload = () => this.ctx.drawImage(img, x, y);
28
+ this.clearEvents(); // удаляем обработчики после использования
31
29
  };
32
- this.canvas.addEventListener("mousedown", handler);
30
+ this.addListener("mousedown", handler);
33
31
  }
34
32
  onClickHandler(e) {
35
33
  return __awaiter(this, void 0, void 0, function* () {
@@ -6,17 +6,18 @@ export class TextTool extends Tool {
6
6
  }
7
7
  listen() {
8
8
  const handler = (e) => {
9
- const target = e.target;
10
- const x = e.pageX - target.offsetLeft;
11
- const y = e.pageY - target.offsetTop;
9
+ const evt = e; // приводим Event к MouseEvent
10
+ const canvas = evt.target;
11
+ const x = evt.pageX - canvas.offsetLeft;
12
+ const y = evt.pageY - canvas.offsetTop;
12
13
  const text = prompt("Введите текст");
13
14
  if (text) {
14
15
  this.ctx.fillText(text, x, y);
15
16
  }
16
- // убираем событие после первого использования
17
- target.removeEventListener("mousedown", handler);
17
+ // удаляем обработчик после первого использования
18
+ this.clearEvents();
18
19
  };
19
- this.canvas.addEventListener("mousedown", handler);
20
+ this.addListener("mousedown", handler);
20
21
  }
21
22
  onClickHandler(e) {
22
23
  const target = e.target;
@@ -1,10 +1,23 @@
1
1
  export default class Tool {
2
2
  constructor(canvas) {
3
3
  this.canvas = canvas;
4
+ this.events = [];
4
5
  this.ctx = canvas.getContext("2d");
6
+ this.events = [];
5
7
  this.clearEvents();
6
8
  }
9
+ // сохраняем слушатели, чтобы потом удалять
10
+ addListener(type, handler) {
11
+ this.canvas.addEventListener(type, handler);
12
+ this.events.push({ type, handler });
13
+ }
7
14
  clearEvents() {
15
+ // удаляем все зарегистрированные слушатели
16
+ this.events.forEach(({ type, handler }) => {
17
+ this.canvas.removeEventListener(type, handler);
18
+ });
19
+ this.events = [];
20
+ // очищаем стандартные свойства
8
21
  this.canvas.onmousedown = null;
9
22
  this.canvas.onmouseup = null;
10
23
  this.canvas.onmousemove = null;
@@ -2,5 +2,10 @@ export default class Tool {
2
2
  canvas: HTMLCanvasElement;
3
3
  constructor(canvas: HTMLCanvasElement);
4
4
  ctx: CanvasRenderingContext2D;
5
+ events: Array<{
6
+ type: string;
7
+ handler: EventListener;
8
+ }>;
9
+ addListener(type: string, handler: EventListener): void;
5
10
  clearEvents(): void;
6
11
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "canvas-react-easy",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/types/index.d.ts",
6
6
  "license": "MIT",
@@ -7,25 +7,23 @@ export class ImageTool extends Tool {
7
7
  }
8
8
 
9
9
  listen() {
10
- const handler = (e: MouseEvent) => {
11
- const canvas = e.target as HTMLCanvasElement;
12
- const x = e.pageX - canvas.offsetLeft;
13
- const y = e.pageY - canvas.offsetTop;
10
+ const handler = (e: Event) => {
11
+ const evt = e as MouseEvent;
12
+ const canvas = evt.target as HTMLCanvasElement;
13
+ const x = evt.pageX - canvas.offsetLeft;
14
+ const y = evt.pageY - canvas.offsetTop;
14
15
 
15
16
  const url = prompt("Введите ссылку на изображение");
16
17
  if (!url) return;
17
18
 
18
19
  const img = new Image();
19
20
  img.src = url;
20
- img.onload = () => {
21
- this.ctx.drawImage(img, x, y);
22
- };
21
+ img.onload = () => this.ctx.drawImage(img, x, y);
23
22
 
24
- // удаляем обработчик после первого использования
25
- canvas.removeEventListener("mousedown", handler);
23
+ this.clearEvents(); // удаляем обработчики после использования
26
24
  };
27
25
 
28
- this.canvas.addEventListener("mousedown", handler);
26
+ this.addListener("mousedown", handler);
29
27
  }
30
28
 
31
29
  async onClickHandler(e: MouseEvent) {
package/src/tools/Text.ts CHANGED
@@ -7,19 +7,23 @@ export class TextTool extends Tool {
7
7
  }
8
8
 
9
9
  listen() {
10
- const handler = (e: MouseEvent) => {
11
- const target = e.target as HTMLCanvasElement;
12
- const x = e.pageX - target.offsetLeft;
13
- const y = e.pageY - target.offsetTop;
10
+ const handler = (e: Event) => {
11
+ const evt = e as MouseEvent; // приводим Event к MouseEvent
12
+ const canvas = evt.target as HTMLCanvasElement;
13
+ const x = evt.pageX - canvas.offsetLeft;
14
+ const y = evt.pageY - canvas.offsetTop;
15
+
14
16
  const text = prompt("Введите текст");
15
17
  if (text) {
16
18
  this.ctx.fillText(text, x, y);
17
19
  }
18
- // убираем событие после первого использования
19
- target.removeEventListener("mousedown", handler);
20
+
21
+ // удаляем обработчик после первого использования
22
+ this.clearEvents();
20
23
  };
21
- this.canvas.addEventListener("mousedown", handler);
22
- }
24
+
25
+ this.addListener("mousedown", handler);
26
+ }
23
27
 
24
28
  onClickHandler(e: MouseEvent) {
25
29
  const target = e.target as HTMLCanvasElement;
package/src/tools/Tool.ts CHANGED
@@ -1,12 +1,27 @@
1
1
  export default class Tool {
2
2
  constructor(public canvas: HTMLCanvasElement) {
3
3
  this.ctx = canvas.getContext("2d")!;
4
+ this.events = [];
4
5
  this.clearEvents();
5
6
  }
6
7
 
7
8
  ctx: CanvasRenderingContext2D;
9
+ events: Array<{ type: string; handler: EventListener }> = [];
10
+
11
+ // сохраняем слушатели, чтобы потом удалять
12
+ addListener(type: string, handler: EventListener) {
13
+ this.canvas.addEventListener(type, handler);
14
+ this.events.push({ type, handler });
15
+ }
8
16
 
9
17
  clearEvents() {
18
+ // удаляем все зарегистрированные слушатели
19
+ this.events.forEach(({ type, handler }) => {
20
+ this.canvas.removeEventListener(type, handler);
21
+ });
22
+ this.events = [];
23
+
24
+ // очищаем стандартные свойства
10
25
  this.canvas.onmousedown = null;
11
26
  this.canvas.onmouseup = null;
12
27
  this.canvas.onmousemove = null;