You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 2-ui/2-events/05-dispatch-events/article.md
+39-18Lines changed: 39 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,9 @@
2
2
3
3
ما نه تنها می توانیم handler ها را اختصاص دهیم، بلکه می توانیم رویدادها را از جاوا اسکریپت نیز تولید کنیم.
4
4
5
-
از رویدادهای سفارشی می توان برای ایجاد "مولفه های گرافیکی" استفاده کرد. به عنوان مثال، یک عنصر ریشه از منوی مبتنی بر JS خودمان ممکن است رویدادهایی را ایجاد کند که میگوید چه اتفاقی در منو میافتد: باز کردن (باز کردن منو)، انتخاب (یک مورد انتخاب شده است) و غیره. کد دیگری ممکن است به رویدادها گوش دهد و آنچه را که در منو اتفاق می افتد مشاهده کند.
5
+
از رویدادهای سفارشی می توان برای ایجاد "مولفه های گرافیکی" استفاده کرد. به عنوان مثال، یک عنصر ریشه از منوی مبتنی بر JS خودمان ممکن است رویدادهایی را ایجاد کند که میگوید چه اتفاقی در منو میافتد:
6
+
7
+
باز کردن (باز کردن منو)، انتخاب (یک مورد انتخاب شده است) و غیره. کد دیگری ممکن است به رویدادها گوش دهد و آنچه را که در منو اتفاق می افتد مشاهده کند.
6
8
7
9
ما میتوانیم نه تنها رویدادهای کاملاً جدیدی را که برای اهداف خود اختراع میکنیم، بلکه همچنین رویدادهای داخلی مانند کلیک، پایین آوردن ماوس و غیره را ایجاد کنیم. ممکن است برای آزمایش خودکار مفید باشد.
8
10
## Event constructor
@@ -23,13 +25,34 @@ Arguments:
23
25
-*Bubbles*:اگر true بود یعنی bubbled می شود.
24
26
-*لغو شدن (true/false)*: اگر ویزگی مقدار true را داشت عمل پیش فرض آن لغو میشود،
25
27
- به صورت پیش فرض: `{bubbles: false, cancelable: false}`.
28
+
29
+
## dispatchEvent
30
+
31
+
پس از ایجاد یک event، باید آن را روی یک element با استفاده از فراخوانی elem.dispatchEvent(event) اجرا کنیم.
32
+
33
+
سپس handler ها به آن واکنش نشان می دهند که گویی یک رویداد معمولی مرورگر است. اگر رویداد با bubble flag ها ایجاد شده باشد، bubbled می شود.
34
+
35
+
در مثال زیر رویداد کلیک در جاوا اسکریپت آغاز می شود. handler به همان روشی کار می کند که اگر روی دکمه کلیک شده باشد:
راهی برای تشخیص یک user event "واقعی" از event تولید شده توسط اسکریپت وجود دارد.
46
+
47
+
ویژگی 'event.isTrusted' برای رویدادهایی که از اقدامات واقعی کاربر ناشی می شوند 'true' و برای رویدادهای تولید شده توسط اسکریپت 'false' است.
26
48
27
49
28
50
## Bubbling example
29
51
30
-
We can create a bubbling event with the name `"hello"` and catch it on `document`.
31
52
32
-
All we need is to set `bubbles` to `true`:
53
+
میتوانیم یک bubbling event با نام `"hello"` ایجاد کنیم و آن را در `document` بگیریم.
54
+
55
+
تنها چیزی که نیاز داریم این است که `bubbles` را روی "true" تنظیم کنیم:
33
56
34
57
```html run no-beautify
35
58
<h1id="elem">Hello from the script!</h1>
@@ -50,16 +73,16 @@ All we need is to set `bubbles` to `true`:
50
73
```
51
74
52
75
53
-
Notes:
76
+
نکات:
54
77
55
-
1.We should use `addEventListener`for our custom events, because `on<event>`only exists for built-in events, `document.onhello`doesn't work.
56
-
2.Must set `bubbles:true`, otherwise the event won't bubble up.
78
+
1.باید از `addEventListener`برای custom کردن event ها استفاده کرد، زیرا `on<event>`فقط برای built-in event وجود دارد و `document.onhello`کار نمیکند.
79
+
2.باید `bubbles:true` را set کنیم مگرنه event bubble up نخواهد شد.
57
80
58
-
The bubbling mechanics is the same for built-in (`click`) and custom (`hello`) events. There are also capturing and bubbling stages.
81
+
مکانیک bubbling برای built-in (`click`) و custom (`hello`) یکسان است. هم چنین مراحلی برای گرفتن و bubbling نیز وجود دارد.
59
82
60
83
## MouseEvent, KeyboardEvent and others
61
84
62
-
Here's a short list of classes for UI Events from the [UI Event specification](https://www.w3.org/TR/uievents):
85
+
موارد زیر شامل یک لیست کوتاه از کلاس هایی برای UI Events از [UI Event specification](https://www.w3.org/TR/uievents) هستند:
63
86
64
87
-`UIEvent`
65
88
-`FocusEvent`
@@ -68,11 +91,11 @@ Here's a short list of classes for UI Events from the [UI Event specification](h
68
91
-`KeyboardEvent`
69
92
- ...
70
93
71
-
We should use them instead of `new Event`if we want to create such events. For instance,`new MouseEvent("click")`.
72
-
73
-
The right constructor allows to specify standard properties for that type of event.
94
+
اگر میخواهید رویدادی به وجود بیاوریم، باید به جای `new Event`از کلاس های بالا استفاده کنیم. برای مثال`new MouseEvent("click")`.
95
+
96
+
انتخاب constructor درست این امکان را میدهد که property های استاندارد را برای هر نوع از event مشخص کنیم.
74
97
75
-
Like `clientX/clientY`for a mouse event:
98
+
مانند `clientX/clientY`برای mouse event:
76
99
77
100
```js run
78
101
letevent=newMouseEvent("click", {
@@ -86,10 +109,9 @@ let event = new MouseEvent("click", {
86
109
alert(event.clientX); // 100
87
110
*/!*
88
111
```
112
+
لطفا به یاد داشته باشد: constructor های generic `Event` اجازه این کار را نمیدهد.
89
113
90
-
Please note: the generic `Event` constructor does not allow that.
91
-
92
-
Let's try:
114
+
بیایید این روش را امتحان کنیم:
93
115
94
116
```js run
95
117
letevent=newEvent("click", {
@@ -103,10 +125,9 @@ let event = new Event("click", {
103
125
alert(event.clientX); // undefined, the unknown property is ignored!
104
126
*/!*
105
127
```
128
+
از نظر فنی، میتوانیم با اختصاص مستقیم `event.clientX=100` پس از ایجاد، آن را حل کنیم. بنابراین این موضوع راحت و پیروی از قوانین است. event های ایجاد شده توسط مرورگر همیشه نوع مناسبی دارند.
106
129
107
-
Technically, we can work around that by assigning directly `event.clientX=100` after creation. So that's a matter of convenience and following the rules. Browser-generated events always have the right type.
108
-
109
-
The full list of properties for different UI events is in the specification, for instance, [MouseEvent](https://www.w3.org/TR/uievents/#mouseevent).
130
+
لیست کاملی از property ها برای event های مختلف UI به تفکیک، برای مثال، [MouseEvent](https://www.w3.org/TR/uievents/#mouseevent).
0 commit comments