рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдХрд╕реНрдЯрдо рддрддреНрд╡

[рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣] рдЪрдХреНрд░ рдХреЗ рдЕрдиреНрдп 19 рднрд╛рдЧреЛрдВ
рднрд╛рдЧ 1: рдЗрдВрдЬрди рдХрд╛ рдЕрд╡рд▓реЛрдХрди, рд░рдирдЯрд╛рдЗрдо рдореИрдХреЗрдирд┐рдЬреНрдо, рдХреЙрд▓ рд╕реНрдЯреИрдХ
рднрд╛рдЧ 2: рд╡реА 8 рдЗрдВрдЯрд░реНрдирд▓реНрд╕ рдФрд░ рдХреЛрдб рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рднрд╛рдЧ 3: рд╕реНрдореГрддрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛, рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреА рдореЗрдореЛрд░реА рд▓реАрдХ рдХрд░рдирд╛ рдФрд░ рдЙрдирд╕реЗ рдирд┐рдкрдЯрдирд╛
рднрд╛рдЧ 4: рдЗрд╡реЗрдВрдЯ рд▓реВрдк, Async, рдФрд░ рдкрд╛рдБрдЪ рддрд░реАрдХреЗ Async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рднрд╛рдЧ 5: WebSocket рдФрд░ HTTP / 2 + SSEред рдХреНрдпрд╛ рдЪреБрдирдирд╛ рд╣реИ?
рднрд╛рдЧ рем: рд╡реЗрдмрд╕рд░реНрд╡рд┐рд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░
рднрд╛рдЧ 7: рд╡реЗрдм рд╢реНрд░рдорд┐рдХ рдФрд░ рдкрд╛рдБрдЪ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдп
рднрд╛рдЧ 8: рд╕реЗрд╡рд╛ рдХрд░реНрдореА
рднрд╛рдЧ 9: рд╡реЗрдм рдкреБрд╢ рд╕реВрдЪрдирд╛рдПрдБ
рднрд╛рдЧ 10: MutationObserver рдХреЗ рд╕рд╛рде DOM рдореЗрдВ рдЯреНрд░реИрдХ рдкрд░рд┐рд╡рд░реНрддрди
рднрд╛рдЧ 11: рд╡реЗрдм рдкреЗрдЬ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЗрдВрдЬрди рдФрд░ рдЙрдирдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡
рднрд╛рдЧ 12: рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдмрд╕рд┐рд╕реНрдЯрдо, рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ
рднрд╛рдЧ 12: рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдмрд╕рд┐рд╕реНрдЯрдо, рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ
рднрд╛рдЧ 13: рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдиреАрдореЗрд╢рди
рднрд╛рдЧ 14: рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╕рд╛рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрдбрд╝, рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдЗрд╕рдХрд╛ рдЕрдиреБрдХреВрд▓рди
рднрд╛рдЧ 15: рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд, рдмреЗрдмрд▓ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд┐рдХреЗрд╢рди
рднрд╛рдЧ 16: рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рднрдВрдбрд╛рд░рдг
рднрд╛рдЧ 17: рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╢реИрдбреЛ рдбреЛрдо рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА рдФрд░ рд╡реЗрдм рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕
рднрд╛рдЧ 18: рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдФрд░ рдкреА 2 рдкреА рд╕рдВрдЪрд╛рд░ рддрдВрддреНрд░
рднрд╛рдЧ 19: рдЬреЗрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдХрд╕реНрдЯрдо рддрддреНрд╡

рд╣рдо рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрдВрддреНрд░реЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рддреНрд░рд╕реНрдЯреИрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ 19 рд▓реЗрдЦреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдЬ рд╣рдо рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдирдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ - рддрдерд╛рдХрдерд┐рдд "рдХрд╕реНрдЯрдо рддрддреНрд╡"ред рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╡реЗ рдХрд┐рди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред

рдЫрд╡рд┐


рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди


рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, рд╣рдордиреЗ рд╢реИрдбреЛ рдбреЛрдо рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рд╣реИ рдЬреЛ рдПрдХ рдмрдбрд╝реА рдШрдЯрдирд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ - рд╡реЗрдм рдШрдЯрдХред рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЛ рдХреЙрдореНрдкреИрдХреНрдЯ, рдореЙрдбреНрдпреВрд▓рд░ рдФрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рддрддреНрд╡реЛрдВ рдХреЗ рджреНрд╡рд╛рд░рд╛ HTML рдХреА рдорд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ W3C рдорд╛рдирдХ рд╣реИ рдЬреЛ рд╕рднреА рдЕрдЧреНрд░рдгреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рд╣реИред рд╡рд╣ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЬрдмрдХрд┐ рдЙрд╕рдХрд╛ рдХрд╛рдо рдкреЙрд▓реАрдлрд╝рд╛рдЗрд▓реНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ)ред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣рдореЗрдВ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдФрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ HTML, CSS рдФрд░ JavaScript рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред HTML рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗрдм рдкреЗрдЬреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, CSS рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдкрд╣рд▓реЗ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ HTML рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдерд╛ред

рддрдереНрдп рдХреА рдмрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдВ рд╣рдо рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ - рдХрд╕реНрдЯрдо рддрддреНрд╡ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдкреАрдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрд░реНрдХ рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдЪрдЯреАрдПрдордПрд▓ рддрддреНрд╡реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрдИ рд▓реЛрдЧ рдЫрд╛рдпрд╛ рдбреЛрдо рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпреЗ рджреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдкреВрд░рдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рдирд┐рдореЗрдп рдирд╣реАрдВ рд╣реИрдВред

рдХреБрдЫ рдЪреМрдЦрдЯреЗ (рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдгреАрдп рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛) рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдХреЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреЛрдгреАрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдпрд╛ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╕реНрдЯрдо рддрддреНрд╡ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдПрдХ рдорд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдзрд╛рд░рдг рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, HTML рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рд╣рдореЗрдВ рдпрд╣ рдХрд╣рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИрдВред рдЖрдзреБрдирд┐рдХ рдврд╛рдВрдЪреЗ рд╣рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджреЗрддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рджреЛрдиреЛрдВ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдкреАрдЖрдИ


рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрдкреАрдЖрдИ рд╣рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рд╣рдо рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ customElements рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ:

  • define(tagName, constructor, options) рд╡рд┐рдзрд┐ define(tagName, constructor, options) рдЖрдкрдХреЛ рдПрдХ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ (рдмрдирд╛рдиреЗ, рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ define(tagName, constructor, options) рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рддреАрди рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЯреИрдЧ рдирд╛рдо, рдРрд╕реЗ рддрддреНрд╡реЛрдВ рдХреЗ рдирд╛рдордХрд░рдг рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛, рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИ - extends , рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рддрддреНрд╡ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдирдХ рддрддреНрд╡реЛрдВ рдХреЗ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • get(tagName) рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреА рд╣реИ, рдмрд╢рд░реНрддреЗ рдХрд┐ рдпрд╣ рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ, рдЕрдиреНрдпрдерд╛ рдпрд╣ undefined ред рдпрд╣ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХрд╛ рдирд╛рдо рдЯреИрдЧред
  • рдЬрдм whenDefined(tagName) рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд▓ рдХрд┐рдП рдЧрдП рд╡рд╛рджреЗ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред рдпрджрд┐ рдХреЛрдИ рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рджрд╛ рддреБрд░рдВрдд рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╡рд╛рджрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЯреИрдЧ рдирд╛рдо рдЗрд╕рдХреЗ рдкрд╛рд╕ рдЧрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдз рдЯреИрдЧ рдирд╛рдо рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЗ рдЯреИрдЧ рдирд╛рдо рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИред

рдХрд╕реНрдЯрдо рдЖрдЗрдЯрдо рдмрдирд╛рдПрдБ


рдХрд╕реНрдЯрдо рддрддреНрд╡ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдХрд╛рдо рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ: рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдмрдирд╛рдПрдВ рдЬреЛ HTMLElement рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЪрдпрдирд┐рдд рдирд╛рдо рдХреЗ рддрд╣рдд рдЗрд╕ рддрддреНрд╡ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 class MyCustomElement extends HTMLElement { constructor() {   super();   // тАж } // тАж } customElements.define('my-custom-element', MyCustomElement); 

рдпрджрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкреНрд░рджреВрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЕрдирд╛рдо рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 customElements.define('my-custom-element', class extends HTMLElement { constructor() {   super();   // тАж } // тАж }); 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ customElements.define(...) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдВрдЬреАрдХреГрдд рд╣реИ customElements.define(...) рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред

рд╕рдорд╕реНрдпрд╛рдПрдБ рдЬреЛ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ


рдЖрдЗрдП рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕реЗ "div рдЯреИрдЧ рд╕реВрдк" (div рд╕реВрдк) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛ рдЦрддреНрдо рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдШрдЯрдирд╛ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдореЗрдВ рдХрдИ div рддрддреНрд╡ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИрдВред рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 <div class="top-container"> <div class="middle-container">   <div class="inside-container">     <div class="inside-inside-container">       <div class="are-we-really-doing-this">         <div class="mariana-trench">           тАж         </div>       </div>     </div>   </div> </div> </div> 

рдРрд╕реЗ HTML- рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдЪрд┐рдд рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рдкреГрд╖реНрда рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдЗрд╕рдХрд╛ рд╕рд╣реА рдкреНрд░рджрд░реНрд╢рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ HTML рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдШрдЯрдХ рд╣реИ рдЬреЛ рдирд┐рдореНрди рдЖрдХреГрддрд┐ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред


рдШрдЯрдХ рдЙрдкрд╕реНрдерд┐рддрд┐

рдРрд╕реА рдЪреАрдЬреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдирд┐рдореНрди рдХреЛрдб рдЗрд╕ рдШрдЯрдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛:

 <div class="primary-toolbar toolbar"> <div class="toolbar">   <div class="toolbar-button">     <div class="toolbar-button-outer-box">       <div class="toolbar-button-inner-box">         <div class="icon">           <div class="icon-undo"> </div>         </div>       </div>     </div>   </div>   <div class="toolbar-button">     <div class="toolbar-button-outer-box">       <div class="toolbar-button-inner-box">         <div class="icon">           <div class="icon-redo"> </div>         </div>       </div>     </div>   </div>   <div class="toolbar-button">     <div class="toolbar-button-outer-box">       <div class="toolbar-button-inner-box">         <div class="icon">           <div class="icon-print"> </div>         </div>       </div>     </div>   </div>   <div class="toolbar-toggle-button toolbar-button">     <div class="toolbar-button-outer-box">       <div class="toolbar-button-inner-box">         <div class="icon">           <div class="icon-paint-format"> </div>         </div>       </div>     </div>   </div> </div> </div> 

рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдШрдЯрдХ рдХреЗ рдЗрд╕ рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 <primary-toolbar> <toolbar-group>   <toolbar-button class="icon-undo"></toolbar-button>   <toolbar-button class="icon-redo"></toolbar-button>   <toolbar-button class="icon-print"></toolbar-button>   <toolbar-toggle-button class="icon-paint-format"></toolbar-toggle-button> </toolbar-group> </primary-toolbar> 

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛрдЧрд╛ рдХрд┐ рджреВрд╕рд░рд╛ рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рд╕реЗ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд░рд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдиреЗрд╕реНрдЯреЗрдб div рдЯреИрдЧ рд╣реИрдВред

рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рдЕрдЧрд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рд╣реИред рдХреЛрдб рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рди рдХреЗрд╡рд▓ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рд╕рдорд░реНрдерд┐рдд рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рдПрдХ рд╣реА рдирд┐рд░реНрдорд╛рдг рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдорд░реНрдерди рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрддреНрд╡ рд╣реИрдВ:

 <div class="my-custom-element"> <input type="text" class="email" /> <button class="submit"></button> </div> 

рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ, рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдПрдХ рд╣реА HTML рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЬрд╣рд╛рдБ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЙрд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рд░ рдЬрдЧрд╣ рдПрдХ рд╣реА рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд▓рдВрдмреЗ, рдХрдареЛрд░ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЬрд╣рд╛рдБ рдЗрд╕ рддрддреНрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 <my-custom-element></my-custom-element> 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рд░ HTML рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИрдВред рд╡реЗ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╣реИрдВред рдЙрдирдХреА рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХрд╛ рд╕реНрд░реЛрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдРрд╕реА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рддрддреНрд╡ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдЙрдирд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рднрд╛рд╡реЛрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗ рдХреНрд▓рд┐рдХреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдКрдкрд░ рдорд╛рдЙрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЗ "рд╣реЛрд╡рд░рд┐рдВрдЧ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рд╕реНрдХреНрд░реАрди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШрд╕реАрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдпрд╣рд╛рдВ рдПрдХ рдШрдЯрдирд╛ рд╢реНрд░реЛрддрд╛ рдХреЛ рдЙрд╕ рддрддреНрд╡ рд╕реЗ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП рдЬреЛ рдорд╛рдЙрд╕ рд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рд╣реЛрддрд╛ рд╣реИ:

 var myDiv = document.querySelector('.my-custom-element'); myDiv.addEventListener('click', _ => { myDiv.innerHTML = '<b> I have been clicked </b>'; }); 

рдФрд░ рдпрд╣рд╛рдБ рдЗрд╕ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП HTML рдХреЛрдб рд╣реИ:

 <div class="my-custom-element"> I have not been clicked yet. </div> 

рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЗрд╕ рд╕рднреА рддрд░реНрдХ рдХреЛ рддрддреНрд╡ рдореЗрдВ рд╣реА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП - рдиреАрдЪреЗ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╢рд╛рдорд┐рд▓ рд╣реИ:

 class MyCustomElement extends HTMLElement { constructor() {   super();   var self = this;   self.addEventListener('click', _ => {     self.innerHTML = '<b> I have been clicked </b>';   }); } } customElements.define('my-custom-element', MyCustomElement); 

рдФрд░ рдпрд╣рд╛рдБ рдкреГрд╖реНрда рдХреЗ HTML рдХреЛрдб рдореЗрдВ рдпрд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 <my-custom-element> I have not been clicked yet </my-custom-element> 

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП JS рдХреЛрдб рдХреА рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рддрддреНрд╡ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рддрддреНрд╡ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЬрдм рд╡реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреГрд╖реНрда рдкрд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╡реЗ рдкреГрд╖реНрда рдХреЗ рдореВрд▓ рдПрдЪрдЯреАрдПрдордПрд▓ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрди рджреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рдо рд╕рд░рд▓ рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐ рд╣рдо рдЗрд╕ рдЦрдВрдб рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЛрдб рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд╕рдорд░реНрдерди рдХреЛ рд╕рд░рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЫреЛрдЯреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛрддреА рд╣реИрдВред

рдЕрдм рдЬрдм рд╣рдордиреЗ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдореБрджреНрджреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ, рддреЛ рдЖрдЗрдП рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдмрдирд╛рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдЙрдирдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ:

  • рдШрдЯрдХ рдирд╛рдо рдореЗрдВ рдПрдХ рд╣рд╛рдЗрдлрд╝рди ( - рдкреНрд░рддреАрдХ) рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, HTML рдкрд╛рд░реНрд╕рд░ рдПрдореНрдмреЗрдбреЗрдб рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдирд╛рдореЛрдВ рдХреА рдХреЛрдИ рдЯрдХреНрдХрд░ рдирд╣реАрдВ рд╣реИ (рдЙрди рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдЕрднреА рд╣реИрдВ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдо >my-custom-element< , рдФрд░ рдирд╛рдо >myCustomElement< рдФрд░ <my_custom_element> рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред
  • рдПрдХ рд╣реА рдЯреИрдЧ рдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдирд┐рд╖рд┐рджреНрдз рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ DOMException рддреНрд░реБрдЯрд┐ DOMException рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдХрд╕реНрдЯрдо рдЯреИрдЧ рд╕реНрд╡-рд╕рдорд╛рдкрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред HTML рдкрд╛рд░реНрд╕рд░ рдХреЗрд╡рд▓ рдорд╛рдирдХ рд╕реНрд╡-рд╕рдорд╛рдкрди рдЯреИрдЧ рдХреЗ рд╕реАрдорд┐рдд рд╕реЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, <img> , <link> , <br> )ред

рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ


рдЪрд▓реЛ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЙрддреНрддрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕реА рд░реЛрдЪрдХ рдмрд╛рддреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреА рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рддрддреНрд╡ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рд╕реНрд╡рдпрдВ DOM рддрддреНрд╡ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╢реНрд░реЛрддрд╛рдУрдВ рдореЗрдВ рдЗрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП, рдЪрд╛рдЗрд▓реНрдб рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 class MyCustomElement extends HTMLElement { // ... constructor() {   super();   this.addEventListener('mouseover', _ => {     console.log('I have been hovered');   }); } // ... } 

рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рддрддреНрд╡ рдХреЗ рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЙрди рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдФрд░ рджреНрд╡рд╛рд░рд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛрдВрдЧреЗ рдХрд┐ рдЖрдкрдХреЗ рдЦреБрдж рдХреЗ рдорд╛рд░реНрдХрдЕрдк рдХреЛ рддрддреНрд╡ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдРрд╕реЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

  • constructor рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рддрддреНрд╡ рдХреЛ рдмрдирд╛рддреЗ рдпрд╛ "рдЕрдкрдЧреНрд░реЗрдб" рдХрд░рддреЗ рд╣реИрдВ (рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ)ред рдЕрдХреНрд╕рд░ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рд╕реА рддрддреНрд╡ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗ, рдПрдХ рд╢реИрдбреЛ рдбреЛрдо рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЗрддреНрдпрд╛рджрд┐ред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ super() рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  • connectedCallback рд╡рд┐рдзрд┐ рдХреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рддрддреНрд╡ DOM рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ) рдХрд┐рд╕реА рднреА рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдкреГрд╖реНрда рдкрд░ рддрддреНрд╡ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдХреБрдЫ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
  • рдЬрдм рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ DOM рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ disconnectedCallback рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрда рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдХрд╣рд▓рд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЙрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВред
  • рдПрдХ рддрддреНрд╡ attributeChangedCallback рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рд╣рдЯрд╛рдиреЗ, рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж attributeChangedCallback рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрддреНрд╡ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ рдЬреЛ observedAttributes рдЧреБрдг рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред
  • adoptedCallback рдЕрдкрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм document.adoptNode(...) adoptedCallback document.adoptNode(...) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЛрдб рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╕рдордХрд╛рд▓рд┐рдХ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, connectedCallback рдЧрдП connectedCallback рд╡рд┐рдзрд┐ рдХреЛ DOM рдореЗрдВ рддрддреНрд╡ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рд╕рдВрдкрддреНрддрд┐ рдкрд░рд╛рд╡рд░реНрддрди


рдПрдореНрдмреЗрдбреЗрдб HTML рддрддреНрд╡реЛрдВ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ: рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рддрд┐рдмрд┐рдВрдмред рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реАрдзреЗ DOM рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдпрд╣ id рдкреНрд░реЙрдкрд░реНрдЯреА рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ:

 myDiv.id = 'new-id'; 

рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди DOM рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдВрдЧреЗ:

 <div id="new-id"> ... </div> 

рдпрд╣ рддрдВрддреНрд░ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдШреЛрд╖рд┐рдд рд░реВрдк рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдореЗрдВ рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡реЛрдВ рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдирдХреЗ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 class MyCustomElement extends HTMLElement { // ... get myProperty() {   return this.hasAttribute('my-property'); } set myProperty(newValue) {   if (newValue) {     this.setAttribute('my-property', newValue);   } else {     this.removeAttribute('my-property');   } } // ... } 

рдореМрдЬреВрджрд╛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░


рдХрд╕реНрдЯрдо рддрддреНрд╡ рдПрдкреАрдЖрдИ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдирдП HTML рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХрд╛ рднреА рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдорд╛рдирдХ рддрддреНрд╡реЛрдВ рдФрд░ рдХрд╕реНрдЯрдо рджреЛрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп extends рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 class MyAwesomeButton extends MyButton { // ... } customElements.define('my-awesome-button', MyAwesomeButton);</cosourcede>      ,  , ,    <code>customElements.define(...)</code>,    <code>extends</code>   ,      .     ,        ,        DOM-.   ,          ,      ,       . <source>class MyButton extends HTMLButtonElement { // ... } customElements.define('my-button', MyButton, {extends: 'button'}); 

рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдорд╛рдирдХ рддрддреНрд╡реЛрдВ рдХреЛ "рдЕрдиреБрдХреВрд▓рд┐рдд рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрддреНрд╡" рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдореЗрд╢рд╛ рдореМрдЬреВрджрд╛ рддрддреНрд╡реЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЙрддреНрддрд░реЛрддреНрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдирдП рддрддреНрд╡реЛрдВ рдореЗрдВ рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рддрддреНрд╡реЛрдВ (рдЬреЛ рдЧреБрдг, рдЧреБрдг, рдХрд╛рд░реНрдп) рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдереЗред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдм рдХрд╕реНрдЯрдо рдмрд┐рд▓реНрдЯ-рдЗрди рддрддреНрд╡ рдХреЗрд╡рд▓ рдХреНрд░реЛрдо 67+ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдпрд╣ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рд╕рдлрд╛рд░реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдЕрджреНрдпрддрди рдЖрдЗрдЯрдо


рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП customElements.define(...) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрдВрдЬреАрдХрд░рдг рдХреЛ рд╡рд╣ рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдкрдВрдЬреАрдХрд░рдг рдХреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реНрдердЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рдордп рддрдм рднреА рдЖ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЛрдо рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реЛред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрдИ рдЖрдЗрдЯрдо рдХрдм рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмреНрд░рд╛рдЙрдЬрд╝рд░ customElements.whenDefined(...) рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрд╕реЗ рддрддреНрд╡ рдЯреИрдЧ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рддрддреНрд╡ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд╛рдж рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

 customElements.whenDefined('my-custom-element').then(_ => { console.log('My custom element is defined'); }); 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдореЗрдВ рджреЗрд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЙрд╕рдХреЗ рдмрдЪреНрдЪреЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡ рд╣реИ, рддреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдРрд╕реА рд░реЗрдЦрд╛ рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИред рдХрднреА-рдХрднреА рдПрдХ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдмрдЪреНрдЪреЗ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдмрдЪреНрдЪреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВред

рдЫрд╛рдпрд╛ рдбреЛрдо


рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд╕реНрдЯрдо рддрддреНрд╡ рдФрд░ рд╢реИрдбреЛ рдбреЛрдо рдкреВрд░рдХ рддрдХрдиреАрдХ рд╣реИрдВред рдкрд╣рд▓рд╛ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡реЛрдВ рдореЗрдВ рдЬреЗрдПрд╕ рд▓реЙрдЬрд┐рдХ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЖрдкрдХреЛ рдбреАрдУрдПрдо рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдерд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЙрдирдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╢реИрдбреЛ рдбреЛрдо рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд┐рдЫрд▓реЗ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╢реИрдбреЛ рдбреЛрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ:

 class MyCustomElement extends HTMLElement { // ... constructor() {   super();   let shadowRoot = this.attachShadow({mode: 'open'});   let elementContent = document.createElement('div');   shadowRoot.appendChild(elementContent); } // ... }); 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ this.attachShadow рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ this.attachShadow ред

рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕


рд╣рдорд╛рд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, рд╣рдордиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХреА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдпрд╣рд╛рдБ рд╣рдо рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, <template> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк DOM рдХреЗ рдЦрдВрдб рдХреЛ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреГрд╖реНрда рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 <template id="my-custom-element-template"> <div class="my-custom-element">   <input type="text" class="email" />   <button class="submit"></button> </div> </template> 

рдпрд╣рд╛рдВ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдореЗрдВ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 let myCustomElementTemplate = document.querySelector('#my-custom-element-template'); class MyCustomElement extends HTMLElement { // ... constructor() {   super();   let shadowRoot = this.attachShadow({mode: 'open'});   shadowRoot.appendChild(myCustomElementTemplate.content.cloneNode(true)); } // ... }); 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡, рдПрдХ рд╢реИрдбреЛ рдбреЛрдо рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИред рдЗрд╕рдиреЗ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдкреГрдердХ рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдЬрд┐рд╕рдореЗрдВ HTML рд╕рдВрд░рдЪрдирд╛ рдХреЛ JS рддрд░реНрдХ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

stylization


рдЕрдм рддрдХ, рд╣рдордиреЗ рдХреЗрд╡рд▓ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реБрдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ HTML рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╣рдо рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рд╕реНрдкрд░реНрд╢ рдХрд░рддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢реИрдбреЛ рдбреЛрдо рдХреЗ рдЕрдВрджрд░ рд╕реНрдЯрд╛рдЗрд▓реНрд╕ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕рд╡рд╛рд▓ рдпрд╣ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд╕реЗ рдХреИрд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - рдпрджрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрддреНрд╡реЛрдВ рдХреЛред

 my-custom-element { border-radius: 5px; width: 30%; height: 50%; // ... } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрд╛рд╣рд░реА рд╢реИрд▓реА рдПрдХ рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдШреЛрд╖рд┐рдд рд╢реИрд▓рд┐рдпреЛрдВ рдкрд░ рдкреВрд░реНрд╡рддрд╛ рд▓реЗрддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреА рд╣реИред

рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ, рдЬрдм рдХреЛрдИ рдкреГрд╖реНрда рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЖрдк рдЙрд╕ рдкрд░ рдЧреИрд░-рд╢реИрд▓реА рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕реЗ FOUC - рдлреНрд▓реИрд╢ рдСрдл рдЕрдирд╕реНрдЯрд╛рдЗрд▓ рдХрдВрдЯреЗрдВрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЕрдкрдВрдЬреАрдХреГрдд рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдХреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рджреГрд╢реНрдп рдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдЗрд╕ рдШрдЯрдирд╛ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :defined ред рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

 my-button:not(:defined) { height: 20px; width: 50px; opacity: 0; } 

рдЕрдЬреНрдЮрд╛рдд рддрддреНрд╡ рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡


HTML рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд┐рд╕реА рднреА рдЯреИрдЧ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░, рдпрджрд┐ рдЯреИрдЧ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ HTMLUnknownElement рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 var element = document.createElement('thisElementIsUnknown'); if (element instanceof HTMLUnknownElement) { console.log('The selected element is unknown'); } 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдРрд╕реА рдпреЛрдЬрдирд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред , ? , , HTMLElement .

 var element = document.createElement('this-element-is-undefined'); if (element instanceof HTMLElement) { console.log('The selected element is undefined but not unknown'); } 

HTMLElement HTMLUnknownElement , , , , - . , , , . div . .


Chrome 36+. API Custom Components v0, , , , . API, , тАФ . API Custom Elements v1 Chrome 54+ Safari 10.1+ ( ). Mozilla v50, , . , Microsoft Edge API. , , webkit. , , , тАФ IE 11.


, , , customElements
window :

 const supportsCustomElements = 'customElements' in window; if (supportsCustomElements) { // API Custom Elements   } 

:

 function loadScript(src) { return new Promise(function(resolve, reject) {   const script = document.createElement('script');   script.src = src;   script.onload = resolve;   script.onerror = reject;   document.head.appendChild(script); }); } //    -    . if (supportsCustomElements) { //    ,    . } else { loadScript('path/to/custom-elements.min.js').then(_ => {   //   ,     . }); } 

рдкрд░рд┐рдгрд╛рдо


, :

  • HTML- JavaScript-, , CSS-.
  • HTML- ( , ).
  • . , тАФ JavaScript, HTML, CSS, , , .
  • - (Shadow DOM, , , ).
  • , .
  • , .

, Custom Elements v1 , , , , , .

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! ?

Source: https://habr.com/ru/post/hi419831/


All Articles