рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдЬреЛ рд╣рдо рд╣рдХрджрд╛рд░ рд╣реИрдВ

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


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

рдХрдИ рд▓реЛрдЧ рд╕рд╡рд╛рд▓ рдкреВрдЫреЗрдВрдЧреЗ: "рдХреНрдпреЛрдВ рдирд╣реАрдВ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?" рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдпрд╛ рддреЛ рдмрд┐рд▓реНрдХреБрд▓ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдпрд╛ рдмрд╣реБрдд рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдЖрдк рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

.body { overflow: hidden;} 

рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдкреЗрдЬ рдХреА рдПрдХ рд╣рд▓реНрдХреА-рдлреБрд▓реНрдХреА рдЭрд▓рдХ рдорд┐рд▓рддреА рд╣реИред рдХреЛрдб ред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рдЙрд╕реА рдЬрдЧрд╣ рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ рдкреГрд╖реНрда рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдлрд╛рд░реА рдореЗрдВ рдРрд╕реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдПрдиреАрдореЗрд╢рди рд╕рдорд╕реНрдпрд╛ (Gif)


рдПрдирдкреАрдПрдо рдУрдкрди рд╕реНрдкреЗрд╕ рдореЗрдВ рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рд╕реНрдХреНрд░реЙрд▓ рдХреЛ рдПрдХ рдЗрдВрдбреЗрдВрдЯ рдпрд╛ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реНрдХреНрд░реЙрд▓ (рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЧреНрд░реЗ рдмрд╛рд░) рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЬрд╛рджреВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЖрд░рдВрднрд┐рдХ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрдВрдЧреЗ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ:

 .body { position:fixed; overflow-y: scroll; } 

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

 function getBodyScrollTop() { return self.pageYOffset || (document.documentElement && document.documentElement.ScrollTop) || (document.body && document.body.scrollTop); } openModalButton.addEventListener('click', e => { e.preventDefault() body.dataset.scrollY = getBodyScrollTop() //    body.style.top = `-${body.dataset.scrollY}px` modal.classList.add('modal--open') body.classList.add('body-lock') }) closeModalButton.addEventListener('click', e => { e.preventDefault() modal.classList.remove('modal--open') body.classList.remove('body-lock') window.scrollTo(0, body.dataset.scrollY) //  ,   }) 

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

 function existVerticalScroll() { return document.body.offsetHeight > window.innerHeight } openModalButton.addEventListener('click', e => { e.preventDefault() body.dataset.scrollY = getBodyScrollTop() modal.classList.add('modal--open') if(existVerticalScroll()) { //   body.classList.add('body-lock') body.style.top = `-${body.dataset.scrollY}px` } }) closeModalButton.addEventListener('click', e => { e.preventDefault() modal.classList.remove('modal--open') if(existVerticalScroll()) { //   body.classList.remove('body-lock') window.scrollTo(0,body.dataset.scrollY) } }) 

рдЙрдкрд▓рдмреНрдзрддрд╛


рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рдЯреИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЖрдВрджреЛрд▓рди рд╣реЛрдЧрд╛ред Gif рдкрд░, рдмрд╕ рдЯреИрдм рдХреЛ рдХреБрдЫ рдмрд╛рд░ рд╣рд┐рдЯ рдХрд░реЗрдВред

рдПрдиреАрдореЗрд╢рди рд╕рдорд╕реНрдпрд╛ (Gif)


рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдИ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдлреЛрдХрд╕-рдЯреНрд░реИрдк.рдЬреЗрдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЛрдиреЗ рдкрд░ рдЕрдкрдиреА рдмреИрд╕рд╛рдЦреА рдмрд╛рдЗрдХ рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рддрд░реНрдХрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ, рд▓реЗрдЦрдХ рдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдЙрдирдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдпрд╛ ред

 //     const modalFocusTrap = createFocusTrap(".modal"); //      openModalButton.addEventListener('click', e => { e.preventDefault() body.dataset.scrollY = getBodyScrollTop() modal.classList.add('modal--open') modalFocusTrap.activate(); //  .   if(existVerticalScroll()) { body.classList.add('body-lock') body.style.top = `-${body.dataset.scrollY}px` } }) closeModalButton.addEventListener('click', e => { e.preventDefault() modal.classList.remove('modal--open') modalFocusTrap.deactivate(); //  .   if(existVerticalScroll()) { body.classList.remove('body-lock') window.scrollTo(0,body.dataset.scrollY) } }) 

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


рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдкреГрд╖реНрда рдкрд░ рдХрдИ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рднреА рдХреЛрдб рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдХрд╛ рд╡рд░реНрдЧ рдирд╛рдо рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 function initModal(className) { // ,        } initModal('modalName1') initModal('modalName2') 

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реНрдкрд╖реНрдЯ рдХреНрд╖рдг рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рддреИрдпрд╛рд░ рдХреЛрдб

рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░реА


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


All Articles