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
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,9 +2,7 @@
2
2
3
3
ما نه تنها می توانیم هندلر ها را اختصاص دهیم، بلکه می توانیم رویدادها را از جاوااسکریپت نیز تولید کنیم.
4
4
5
-
از custom events می توان برای ایجاد "مولفه های گرافیکی" استفاده کرد. به عنوان مثال، یک عنصر ریشه از منوی مبتنی بر JS خودمان ممکن است رویدادهایی را ایجاد کند که میگوید چه اتفاقی در منو میافتد:
6
-
7
-
باز کردن (باز کردن منو)، انتخاب (یک مورد انتخاب شده است) و غیره. کد دیگری ممکن است به event ها گوش دهد و آنچه را که در منو اتفاق می افتد مشاهده کند.
5
+
از custom events می توان برای ایجاد "مولفه های گرافیکی" استفاده کرد. به عنوان مثال، یک عنصر ریشه از منوی مبتنی بر JS خودمان ممکن است رویدادهایی را ایجاد کند که میگوید چه اتفاقی در منو میافتد: باز کردن (باز کردن منو)، انتخاب (یک مورد انتخاب شده است) و غیره. کد دیگری ممکن است به event ها گوش دهد و آنچه را که در منو اتفاق می افتد مشاهده کند.
8
6
9
7
ما میتوانیم نه تنها event های کاملاً جدیدی را که برای اهداف خود اختراع میکنیم، بلکه همچنین event های داخلی مانند کلیک، پایین آوردن ماوس و غیره را ایجاد کنیم. ممکن است برای تست خودکار نرم افزار مفید باشد.
10
8
@@ -13,17 +11,20 @@
13
11
کلاس های event متعلق به زبان یک سلسله مراتب را تشکیل می دهند، مشابه کلاس های عنصر DOM. ریشه آن، کلاس درونساخت [Event](https://dom.spec.whatwg.org/#events) است.
14
12
15
13
ما می توانیم اشیاء event را به این صورت ایجاد کنیم:
14
+
16
15
```js
17
16
letevent=newEvent(type[, options]);
18
17
```
18
+
19
19
پارامتر ها:
20
20
21
21
-*type*: event type, یک رشته مانند `"click"` .
22
22
-*options*: شی ای با دو ویژگی اختیاری.
23
-
-*Bubbles*:اگر true بود یعنی bubbled می شود.
24
-
-*cancelable (true/false)*: اگر ویزگی مقدار true را داشت عمل پیش فرض آن لغو میشود،
25
-
- به صورت پیش فرض: `{bubbles: false, cancelable: false}`.
26
-
-
23
+
-*Bubbles*:اگر true بود یعنی bubbled می شود.
24
+
-*cancelable (true/false)*: اگر ویزگی مقدار true را داشت عمل پیش فرض آن لغو میشود،
25
+
26
+
به صورت پیش فرض: `{bubbles: false, cancelable: false}`.
27
+
27
28
## dispatchEvent
28
29
29
30
پس از ایجاد یک event، باید آن را روی یک element با استفاده از فراخوانی `elem.dispatchEvent(event)` اجرا کنیم.
@@ -47,13 +48,11 @@ let event = new Event(type[, options]);
47
48
48
49
ویژگی 'event.isTrusted' برای رویدادهایی که از اقدامات کاربر واقعی ناشی می شوند 'true' و برای رویدادهای تولید شده توسط اسکریپت 'false' است.
49
50
```
50
-
51
51
## مثالی از Bubbling
52
52
53
-
54
53
میتوانیم یک bubbling event با نام `"hello"` ایجاد کنیم و آن را در `document` بگیریم.
55
54
56
-
تنها چیزی که نیاز داریم این است که `bubbles` را روی "true" تنظیم کنیم:
55
+
تنها چیزی که نیاز داریم این است که `bubbles` را روی `true` تنظیم کنیم:
57
56
58
57
```html run no-beautify
59
58
<h1id="elem">Hello from the script!</h1>
@@ -127,9 +126,11 @@ let event = new Event("click", {
127
126
alert(event.clientX); // undefined, the unknown property is ignored!
128
127
*/!*
129
128
```
129
+
130
130
ااز نظر فنی، میتوانیم با اختصاص مستقیم `event.clientX=100` پس از ایجاد، آن را حل کنیم. بنابراین این موضوع راحت و پیروی از قوانین است. event های ایجاد شده توسط مرورگر همیشه از نوع مناسبی هستند.
131
131
132
-
للیست کاملی از propertyها برای eventهای مختلف UI در مشخصات زبان وجود دارد، برای مثال، [MouseEvent](https://www.w3.org/TR/uievents/#mouseevent).
132
+
لیست کاملی از propertyها برای eventهای مختلف UI در مشخصات زبان وجود دارد، برای مثال، [MouseEvent](https://www.w3.org/TR/uievents/#mouseevent).
133
+
133
134
## event شخصیسازیشد
134
135
135
136
برای انواع events های کاملاً جدید خودمان مانند `"hello"` باید از `new CustomEvent` استفاده کنیم. از نظر فنی [CustomEvent](https://dom.spec.whatwg.org/#customevent) با `Event` یکسان است،البته با یک استثنا.
@@ -154,6 +155,7 @@ alert(event.clientX); // undefined, the unknown property is ignored!
154
155
}));
155
156
</script>
156
157
```
158
+
157
159
ویژگی `detail` می تواند هر داده ای را داشته باشد. از نظر فنی میتوانیم آن را تنظیم نکنیم، زیرا میتوانیم هر ویژگی را پس از ایجاد یک شی `new Event` معمولی به آن اختصاص دهیم. اما `CustomEvent` فیلد `detail` ویژه ای را برای جلوگیری از conflicts با سایر property های event فراهم می کند.
158
160
159
161
علاوه بر این، کلاس event توضیح میدهد که «چه نوع رویدادی» است، و اگر event سفارشی باشد، باید از `CustomEvent` استفاده کنیم تا مشخص شود که چیست.
@@ -212,11 +214,10 @@ alert(event.clientX); // undefined, the unknown property is ignored!
212
214
213
215
استثنا قابل توجه زمانی است که یک رویداد از درون رویداد دیگری آغاز می شود، به عنوان مثال: با استفاده از `dispatchEvent` چنین رویدادهایی بلافاصله پردازش میشوند: کنترلکنندههای رویداد جدید فراخوانی میشوند و سپس مدیریت رویداد فعلی از سر گرفته میشود.
214
216
215
-
به عنوان مثال، در کد زیر، رویداد `menu-open` در حین کلیک فعال می شود.
217
+
به عنوان مثال، در کد زیر، رویداد `menu-open` در حین `onclick` فعال می شود.
216
218
217
-
بدون اینکه برای هندلر `onclick` صبر کند تا تمام شود، پردازش می شود:
219
+
بدون اینکه برای `onclick`هندلر صبر کند تا تمام شود، شروع به پردازش می شود:
218
220
219
-
بدون اینکه برای `onclick` هندلر صبر کند تا تمام شود، شروع به process شدن میشود:
220
221
221
222
```html run autorun
222
223
<buttonid="menu">Menu (click me)</button>
@@ -264,12 +265,11 @@ alert(event.clientX); // undefined, the unknown property is ignored!
حالا `dispatchEvent` یه صورت asynchronously بعد از اینکه اجرای کد فعلی به اتمام رسید، run میشود، که شامل `menu.onclick`. پس event handler ها به صورت جدت و مستقل فعالیت میکنند.
268
270
269
271
خروجی به این ترتیب خواهد بود: 1 -> 2 -> nested.
270
272
271
-
272
-
273
273
## خلاصه
274
274
275
275
برای تولید یک event code، ابتدا باید یک event object ایجاد کنیم.
@@ -291,4 +291,4 @@ alert(event.clientX); // undefined, the unknown property is ignored!
291
291
- به عنوان یک dirty hack برای اینکه کتابخانه های شخص ثالث به روش مورد نیاز کار کنند، اگر ابزارهای تعامل دیگری را ارائه ندهند.
292
292
- برای تست خودکار، روی دکمه "click the button" در اسکریپت و ببینید که آیا رابط به درستی واکنش نشان می دهد.
293
293
294
-
همک چنین custom events با نام خود ما اغلب برای مقاصد معماری ایجاد می شوند تا نشان دهند که چه اتفاقی در منوها، اسلایدر ها و غیره می افتد.
294
+
همچنین eventهای سفارشی با نام خود ما اغلب برای مقاصد معماری ایجاد می شوند تا نشان دهند که چه اتفاقی در منوها، اسلایدرها و غیره می افتد.
0 commit comments