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
+19-19Lines changed: 19 additions & 19 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,18 +1,18 @@
1
1
# Dispatching custom events
2
2
3
-
ما نه تنها می توانیم handler ها را اختصاص دهیم، بلکه می توانیم رویدادها را از جاوا اسکریپت نیز تولید کنیم.
3
+
ما نه تنها می توانیم هندلر ها را اختصاص دهیم، بلکه می توانیم رویدادها را از جاوااسکریپت نیز تولید کنیم.
4
4
5
-
از رویدادهای سفارشی می توان برای ایجاد "مولفه های گرافیکی" استفاده کرد. به عنوان مثال، یک عنصر ریشه از منوی مبتنی بر JS خودمان ممکن است رویدادهایی را ایجاد کند که میگوید چه اتفاقی در منو میافتد:
5
+
از custom events می توان برای ایجاد "مولفه های گرافیکی" استفاده کرد. به عنوان مثال، یک عنصر ریشه از منوی مبتنی بر JS خودمان ممکن است رویدادهایی را ایجاد کند که میگوید چه اتفاقی در منو میافتد:
6
6
7
-
باز کردن (باز کردن منو)، انتخاب (یک مورد انتخاب شده است) و غیره. کد دیگری ممکن است به رویدادها گوش دهد و آنچه را که در منو اتفاق می افتد مشاهده کند.
7
+
باز کردن (باز کردن منو)، انتخاب (یک مورد انتخاب شده است) و غیره. کد دیگری ممکن است به event ها گوش دهد و آنچه را که در منو اتفاق می افتد مشاهده کند.
8
8
9
-
ما میتوانیم نه تنها رویدادهای کاملاً جدیدی را که برای اهداف خود اختراع میکنیم، بلکه همچنین رویدادهای داخلی مانند کلیک، پایین آوردن ماوس و غیره را ایجاد کنیم. ممکن است برای آزمایش خودکار مفید باشد.
9
+
ما میتوانیم نه تنها event های کاملاً جدیدی را که برای اهداف خود اختراع میکنیم، بلکه همچنین event های داخلی مانند کلیک، پایین آوردن ماوس و غیره را ایجاد کنیم. ممکن است برای آزمایش خودکار مفید باشد.
10
10
11
11
## Event constructor
12
12
13
-
کلاس های رویداد داخلی یک سلسله مراتب را تشکیل می دهند، مشابه کلاس های عنصر DOM. ریشه کلاس رویداد داخلی است.
13
+
کلاس های internal event یک سلسله مراتب را تشکیل می دهند، مشابه کلاس های عنصر DOM. ریشه کلاس رویداد داخلی است.
14
14
15
-
ما می توانیم اشیاء رویداد را مانند این ایجاد کنیم: [Event](https://dom.spec.whatwg.org/#events)
15
+
ما می توانیم object event ها را مانند این ایجاد کنیم: [Event](https://dom.spec.whatwg.org/#events)
16
16
17
17
```js
18
18
letevent=newEvent(type[, options]);
@@ -30,9 +30,9 @@ let event = new Event(type[, options]);
30
30
31
31
پس از ایجاد یک event، باید آن را روی یک element با استفاده از فراخوانی elem.dispatchEvent(event) اجرا کنیم.
32
32
33
-
سپس handler ها به آن واکنش نشان می دهند که گویی یک رویداد معمولی مرورگر است. اگر رویداد با bubble flag ها ایجاد شده باشد، bubbled می شود.
33
+
سپس هندلر ها به آن واکنش نشان می دهند که گویی یک event معمولی مرورگر است. اگر event با bubble flag ها ایجاد شده باشد، bubbled می شود.
34
34
35
-
در مثال زیر رویداد کلیک در جاوا اسکریپت آغاز می شود. handler به همان روشی کار می کند که اگر روی دکمه کلیک شده باشد:
35
+
در مثال زیر event کلیک در جاوااسکریپت آغاز می شود. هندلر به همان روشی کار می کند که اگر روی دکمه کلیک شده باشد:
@@ -44,7 +44,7 @@ let event = new Event(type[, options]);
44
44
45
45
راهی برای تشخیص یک user event "واقعی" از event تولید شده توسط اسکریپت وجود دارد.
46
46
47
-
ویژگی 'event.isTrusted' برای رویدادهایی که از اقدامات واقعی کاربر ناشی می شوند 'true' و برای رویدادهای تولید شده توسط اسکریپت 'false' است.
47
+
ویژگی 'event.isTrusted' برای event هایی که از اقدامات واقعی کاربر ناشی می شوند 'true' و برای event های تولید شده توسط اسکریپت 'false' است.
48
48
49
49
50
50
## Bubbling example
@@ -75,10 +75,10 @@ let event = new Event(type[, options]);
75
75
76
76
نکات:
77
77
78
-
1. باید از `addEventListener` برای custom کردن event ها استفاده کرد، زیرا `on<event>` فقط برای built-in event وجود دارد و `document.onhello` کار نمیکند.
78
+
1. باید از `addEventListener` برای custom کردن event ها استفاده کرد، زیرا `on<event>` فقط برای built-in event وجود دارد و `document.onhello` کار نمیکند.
79
79
2. باید `bubbles:true` را set کنیم مگرنه event bubble up نخواهد شد.
80
80
81
-
مکانیک bubbling برای built-in (`click`) و custom (`hello`) یکسان است. هم چنین مراحلی برای گرفتن و bubbling نیز وجود دارد.
81
+
مکانیک bubbling برای built-in (`click`) و custom (`hello`) یکسان است. هم چنین مراحلی برای گرفتن و bubbling نیز وجود دارد.
82
82
83
83
## MouseEvent, KeyboardEvent and others
84
84
@@ -91,9 +91,9 @@ let event = new Event(type[, options]);
91
91
-`KeyboardEvent`
92
92
- ...
93
93
94
-
اگر میخواهید رویدادی به وجود بیاوریم، باید به جای `new Event` از کلاس های بالا استفاده کنیم. برای مثال `new MouseEvent("click")`.
94
+
اگر میخواهید event به وجود بیاوریم، باید به جای `new Event` از کلاس های بالا استفاده کنیم. برای مثال `new MouseEvent("click")`.
95
95
96
-
انتخاب constructor درست این امکان را میدهد که property های استاندارد را برای هر نوع از event مشخص کنیم.
96
+
انتخاب constructor درست این امکان را میدهد که property های استاندارد را برای هر نوع از event مشخص کنیم.
97
97
98
98
مانند `clientX/clientY` برای mouse event:
99
99
@@ -127,11 +127,11 @@ alert(event.clientX); // undefined, the unknown property is ignored!
127
127
```
128
128
از نظر فنی، میتوانیم با اختصاص مستقیم `event.clientX=100` پس از ایجاد، آن را حل کنیم. بنابراین این موضوع راحت و پیروی از قوانین است. event های ایجاد شده توسط مرورگر همیشه نوع مناسبی دارند.
129
129
130
-
لیست کاملی از property ها برای event های مختلف UI به تفکیک، برای مثال، [MouseEvent](https://www.w3.org/TR/uievents/#mouseevent).
130
+
لیست کاملی از property ها برای event های مختلف UI به تفکیک، برای مثال، [MouseEvent](https://www.w3.org/TR/uievents/#mouseevent).
131
131
132
132
## Custom events
133
133
134
-
برای انواع events های کاملاً جدید خودمان مانند `"hello"` باید از "CustomEvent جدید" استفاده کنیم. از نظر فنی [CustomEvent](https://dom.spec.whatwg.org/#customevent) با «رویداد» یکسان است،البته با یک استثنا.
134
+
برای انواع events های کاملاً جدید خودمان مانند `"hello"` باید از "CustomEvent جدید" استفاده کنیم. از نظر فنی [CustomEvent](https://dom.spec.whatwg.org/#customevent) با «رویداد» یکسان است،البته با یک استثنا.
135
135
136
136
در آرگومان دوم (object) میتوانیم یک ویژگی «detail» برای هر اطلاعات که میخواهیم با event ارسال کنیم، اضافه کنیم.
137
137
@@ -204,19 +204,19 @@ alert(event.clientX); // undefined, the unknown property is ignored!
204
204
</script>
205
205
```
206
206
207
-
نکته: event حتما باید flag `cancelable: true` را داشته باشد یا اینکه `event.preventDefault()` فراخوانی نمیشود.
207
+
نکته: event حتما باید flag `cancelable: true` را داشته باشد یا اینکه `event.preventDefault()` فراخوانی نمیشود.
208
208
209
209
## Events-in-events are synchronous
210
210
211
211
معمولا رویدادها در یک صف پردازش می شوند. یعنی: اگر مرورگر در حال پردازش `onclick` باشد و یک رویداد جدید رخ دهد، به عنوان مثال: ماوس حرکت می کند، سپس handling آن در صف قرار می گیرد، پس از اتمام پردازش `onclick`، کنترل کننده های مربوط به `mousemove` فراخوانی می شوند.
212
212
213
213
استثنا قابل توجه زمانی است که یک رویداد از درون رویداد دیگری آغاز می شود، به عنوان مثال: با استفاده از `dispatchEvent` چنین رویدادهایی بلافاصله پردازش میشوند: کنترلکنندههای رویداد جدید فراخوانی میشوند و سپس مدیریت رویداد فعلی از سر گرفته میشود.
214
214
215
-
به عنوان مثال، در کد زیر، رویداد `menu-open` در حین کلیک فعال می شود.
215
+
به عنوان مثال، در کد زیر، رویداد `menu-open` در حین کلیک فعال می شود.
216
216
217
217
بلافاصله پردازش می شود، بدون اینکه منتظر پایان کنترل کننده `onclick` باشد:
218
218
219
-
بدون اینکه برای `onclick`handler صبر کند تا تمام شود، شروع به process شدن میشود:
219
+
بدون اینکه برای `onclick`هندلر صبر کند تا تمام شود، شروع به process شدن میشود:
220
220
221
221
```html run autorun
222
222
<buttonid="menu">Menu (click me)</button>
@@ -241,7 +241,7 @@ alert(event.clientX); // undefined, the unknown property is ignored!
241
241
242
242
لطفاً توجه داشته باشید که منوی رویداد تودرتو که باز است در `document` وجود دارد. انتشار و مدیریت رویداد تودرتو قبل از اینکه پردازش به کد خارجی بازگردد (`onclick`) به پایان می رسد.
243
243
244
-
این فقط مربوط به `dispatchEvent` نیست، موارد دیگری نیز وجود دارد. اگر یک کنترل کننده رویداد متدهایی را فراخوانی کند که رویدادهای دیگر را راهاندازی میکنند، آنها نیز به صورت همزمان و به صورت تودرتو پردازش میشوند.
244
+
این فقط مربوط به `dispatchEvent` نیست، موارد دیگری نیز وجود دارد. اگر یک کنترل کننده event متدهایی را فراخوانی کند که رویدادهای دیگر را راهاندازی میکنند، آنها نیز به صورت همزمان و به صورت تودرتو پردازش میشوند.
245
245
246
246
بیایید بگوییم که آن را دوست نداریم. ما می خواهیم ابتدا `onclick` به طور کامل پردازش شود، مستقل از `menu-open` یا هر رویداد تو در تو.
0 commit comments