ResizeObserver - рдЕрдиреБрдХреВрд▓рди рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг

рд╢реБрдн рджрд┐рди, рджреЛрд╕реНрддреЛрдВ!

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

рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛


рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдореАрдбрд┐рдпрд╛ рдкреНрд░рд╢реНрди рдереЗ - рдПрдХ рдореАрдбрд┐рдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕реНрдХреНрд░реАрди рдХреЗ рдЖрдХрд╛рд░, рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрдХрд▓реНрдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реАрдПрд╕рдПрд╕ рд╕рдорд╛рдзрд╛рди (рдПрдХ рдореАрдбрд┐рдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рджреНрд╡рд╛рд░рд╛, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░, рдлреЛрди рдпрд╛ рдЯреИрдмрд▓реЗрдЯ)ред рдореАрдбрд┐рдпрд╛ рдХреНрд╡реЗрд░реА рдХрд╛рдлреА рд▓рдЪреАрд▓реА рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП, рдореАрдбрд┐рдпрд╛ рдХреНрд╡реЗрд╢реНрдЪрди рдХреЗрд╡рд▓ CSS рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдереЗ, рдЕрдм рд╡реЗ JS рдореЗрдВ window.matchMedia (MediaQueryString) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЕрдм рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреГрд╖реНрда рдХрд┐рд╕ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рджреЗрдЦрдиреЗ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рднреА рдХрд░рддреЗ рд╣реИрдВ (рд╣рдо MediaQueryList.addListener () рд╡рд┐рдзрд┐ - рд▓рдЧрднрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ ред

рддрддреНрд╡ рдкреНрд░рд╢реНрди


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдХрдореА рдереА рд╡рд╣ рдПрдХ рдПрдХрд▓ DOM рддрддреНрд╡ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдереА, рди рдХрд┐ рдкреВрд░реЗ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдХреАред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрдИ рд╕рд╛рд▓реЛрдВ рд╕реЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕рдмрд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред 2015 рдореЗрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рднреА рд╕рд╛рдордиреЗ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ - рдХрдВрдЯреЗрдирд░ рдЖрдХрд╛рд░ ( рдХрдВрдЯреЗрдирд░ рдХреНрд╡реЗрд░реА ) рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз :
рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдХреНрд╕рд░ рд╢реИрд▓реА рддрддреНрд╡реЛрдВ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдм рд╡реЗ рджреЗрдЦрдиреЗ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдиреЗ рдореВрд▓ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВред рдХрдВрдЯреЗрдирд░ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдЙрдиреНрд╣реЗрдВ рдпрд╣ рдЕрд╡рд╕рд░ рджреЗрддреЗ рд╣реИрдВред рд╕реАрдПрд╕рдПрд╕ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:ред
рднреБрдЧрддрд╛рди: рдореАрдбрд┐рдпрд╛ (рдиреНрдпреВрдирддрдо-рдЪреМрдбрд╝рд╛рдИ: 30em) рд╕реНрдХреНрд░реАрди {***}
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рдерд╛ - рдкрд░рд┐рдкрддреНрд░ рдирд┐рд░реНрднрд░рддрд╛ (рдЬрдм рдПрдХ рдЖрдХрд╛рд░ рджреВрд╕рд░реЗ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ; рдЗрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ )ред рдЗрд╕рдореЗрдВ рдФрд░ рдЕрдиреНрдп рдХреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ? рд╣рдо window.resize (рдХреЙрд▓рдмреИрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ "рдорд╣рдВрдЧреА рдЦреБрд╢реА" рд╣реИ - рд╣рд░ рдмрд╛рд░ рдЬрдм рдХреЛрдИ рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреЙрд▓рдмреИрдХ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧрдгрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХрд╛ рдЖрдХрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ ...

ResizeObserver API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рддрддреНрд╡


рдорд┐рд▓рд┐рдП ResizeObserver рдПрдкреАрдЖрдИ рдХреНрд░реЛрдо рд╕реЗ:
ResizeObserver API рдЯреНрд░реИрдХрд┐рдВрдЧ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдпрд╣ рдПрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП window.resize рдЗрд╡реЗрдВрдЯ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдирд╛рд▓реЙрдЧ рд╣реИред

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

рдЙрджрд╛рд╣рд░рдг: рдХрд┐рд╕реА рддрддреНрд╡ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдкрд░ рдкрд╛рда рдмрджрд▓рдирд╛


рдирд┐рдореНрди рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ - рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдХрд╛ рдкрд╛рда рддрддреНрд╡ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред ResizeObserver API рджреЛ рдЯреВрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - ResizeObserver рдФрд░ ResizeObserverEntryред ResizeObserver рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ ResizeObserverEntry рдореЗрдВ рдЙрд╕ рдЖрдЗрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдЬреЛ рдЖрдХрд╛рд░ рдмрджрд▓ рдЪреБрдХрд╛ рд╣реИред
рдХреЛрдб рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:

<h1> size </h1>
<h2> boring text </h2>

const ro = new ResizeObserver(entries => {
    for(let entry of entries){
        const width = entry.contentBoxSize
        ? entry.contentBoxSize.inlineSize
        : entry.contentRect.width

        if(entry.target.tagName === 'H1'){
            entry.target.textContent = width < 1000 'small' : 'big'
        }

        if(entry.target.tagName === 'H2' && width < 500){
            entry.target.textContent = `I won't change anymore`
            ro.unobserve(entry.target) //  ,     500px
        }
    }
})

//       
ro.observe(document.querySelector('h1'))
ro.observe(document.querySelector('h2'))

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ ResizeObserver рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдПрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ:

const resizeObserver = new ResizeObserver((entries, observer) => {
    for(let entry of entries){
        // 
    }
})

ResizeObserverEntries рдореЗрдВ рд╢рд╛рдорд┐рд▓ рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╣рд░ рдмрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╣реА рд╣реИред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢рд░реНрдд рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ рддреЛ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЛ рд░реЛрдХрдирд╛ред

рдХреЙрд▓рдмреИрдХ рдХреЛ ResizeObserverEntry рдХрд╛ рдПрдХ рд╕рд░рдгреА рдорд┐рд▓рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рдордирд╛рдпрд╛ рддрддреНрд╡ (рд▓рдХреНрд╖реНрдп) рдХреЗ рдЖрдпрд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

for(let entry of entries){
    const width = entry.contentBoxSize
    ? entry.contentBoxSize.inlineSize
    : entry.contentRect.width

    if(entry.target.tagName === 'H1'){
        entry.target.textContent = width < 1000 ? 'small' : 'big'
    }
    ...
}

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


рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ bordeBoxSize рдФрд░ contentBoxSize рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ contentRect рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред ResizeObserverSize рдореЗрдВ рджреЛ рдЧреБрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдЗрдирд▓рд╛рдЗрдирд╕рд╛рдЗрдЬрд╝ рдФрд░ рдмреНрд▓реЙрдХрд╕рд╛рдЗрдЬрд╝, рдЬрд┐рд╕рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ (рдмрд╢рд░реНрддреЗ рдХрд┐ рд╣рдо рдкрд╛рда рдХреЗ рдХреНрд╖реИрддрд┐рдЬ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рд▓реЗрдЦрди-рдореЛрдб: рдХреНрд╖реИрддрд┐рдЬ)ред

рддрддреНрд╡ рдЕрд╡рд▓реЛрдХрди


рдЕрдВрддрд┐рдо рдЪреАрдЬ рдЖрдЗрдЯрдо рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо ResizeObserver.observe () рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдзрд┐ рджреЗрдЦреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдирдпрд╛ рд▓рдХреНрд╖реНрдп рдЬреЛрдбрд╝рддреА рд╣реИред рд╣рдо рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХ рдпрд╛ рдХрдИ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

// resizeObserver(target, options)
ro.observe(document.querySelector('h1'))
ro.observe(document.querySelector('h2'))

рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ "рд╡реИрдХрд▓реНрдкрд┐рдХ" рд╣реИред рдЖрдЬ рддрдХ, рдЙрдкрд▓рдмреНрдз рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдмреЙрдХреНрд╕ рд╣реИ, рдЬреЛ рдПрдХ рдмреНрд▓реЙрдХ рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдп рд╕рд╛рдордЧреНрд░реА-рдмреЙрдХреНрд╕ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ), рдмреЙрд░реНрдбрд░-рдмреЙрдХреНрд╕ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕-рдкрд┐рдХреНрд╕реЗрд▓-рд╕рд╛рдордЧреНрд░реА-рдмреЙрдХреНрд╕ (рдХреЗрд╡рд▓ рдХреНрд░реЛрдо) рд╣реИрдВред рдПрдХ ResizeObserver рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмреНрд▓реЙрдХ рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдирд┐рдЧрд░рд╛рдиреА рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ResizeObserver.unobserve (рд▓рдХреНрд╖реНрдп) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, ResizeObserver.disconnect () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдмреНрд▓реЙрдХ рдореЙрдбрд▓


рд╕рд╛рдордЧреНрд░реА рдмреЙрдХреНрд╕ рдмреНрд▓реЙрдХрд┐рдВрдЧ, рдмреЙрд░реНрдбрд░ рдФрд░ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рдмрд┐рдирд╛ рдмреНрд▓реЙрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИред рдмреЙрд░реНрдбрд░ рдмреЙрдХреНрд╕ рдореЗрдВ рдкреИрдбрд┐рдВрдЧ рдФрд░ рдмреЙрд░реНрдбрд░ (рдХреЛрдИ рдорд╛рд░реНрдЬрд┐рди рдирд╣реАрдВ) рд╢рд╛рдорд┐рд▓ рд╣реИред



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

рдкреНрд░реЗрдХреНрд╖рдХ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдм рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ?


рд╣рд░ рдмрд╛рд░ рд▓рдХреНрд╖реНрдп рддрддреНрд╡ рдХреЗ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдкрд░ рдХреЙрд▓рдмреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдпреБрдХреНрддрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд╣рддреА рд╣реИ:

  • рдЕрд╡рд▓реЛрдХрди рдордирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдордирд╛рдпрд╛ рдЖрдЗрдЯрдо рдбреЛрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ / рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдкреНрд░реЗрдХреНрд╖рд┐рдд рддрддреНрд╡ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдЧреБрдг рдХреЛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдкрд░ рдЕрд╡рд▓реЛрдХрди рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  • рдЕрд╡рд▓реЛрдХрди "рдЕрд╕рдВрдмрджреНрдз" рд▓рд╛рдЗрди рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  • рд╕реАрдПрд╕рдПрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рдЕрд╡рд▓реЛрдХрди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  • , , .. , 0,0.

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

рдХрдВрдЯреЗрдирд░ рдЖрдХрд╛рд░ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ рдЬрд┐рдирдХрд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛? рдкрд░рд┐рдкрддреНрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЙрдирдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ? рддреЛ, ResizeObserver API рдореЗрдВ "resize" рдХреЗ рдЕрдВрддрд╣реАрди рд▓реВрдк рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдкрдврд╝реЗрдВ ред

рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ: MDN CanIUse

рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдХрд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреЙрд▓реАрдлрд╝рд┐рд▓



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


All Articles