सिद्धांत
Pinterest साइट के वर्तमान कार्यान्वयन को देखते हुए (यह भविष्य में बदल सकता है), जब आप ओवरले खोलते हैं तो एक noscrollवर्ग bodyतत्व पर लागू होता है और overflow: hiddenसेट किया जाता है, इस प्रकार bodyअब स्क्रॉल करने योग्य नहीं है।
ओवरले (ऑन-द-मक्खी या पहले से ही पृष्ठ के अंदर और के माध्यम से दृश्यमान बनाया बनाया display: blockहै, यह कोई फर्क नहीं पड़ता) position : fixedऔर overflow-y: scrollके साथ, top, left, rightऔर bottomगुण के लिए सेट0 : इस शैली बनाता ओवरले पूरे व्यूपोर्ट भरें।
divओवरले के अंदर के बजाय सिर्फ में है position: staticतो आप देख खड़ी स्क्रॉलबार उस तत्व से संबंधित है। परिणामस्वरूप सामग्री स्क्रॉल करने योग्य होती है, लेकिन ओवरले निश्चित रहता है।
जब आप ज़ूम को बंद करते हैं display: noneतो आप ओवरले (माध्यम से ) को छिपाते हैं और फिर आप इसे पूरी तरह से जावास्क्रिप्ट (या सिर्फ सामग्री के अंदर से निकाल सकते हैं, यह आपके ऊपर है कि इसे कैसे इंजेक्ट किया जाए)।
अंतिम चरण के रूप में आपको noscrollवर्ग को भी हटाना है body(इसलिए अतिप्रवाह संपत्ति अपने प्रारंभिक मूल्य पर लौटती है)
कोड
कोडपेन उदाहरण
(यह aria-hiddenदिखाने और छिपाने और इसकी पहुँच बढ़ाने के लिए ओवरले की विशेषता को बदलकर काम करता है )।
मार्कअप
(खुला बटन)
<button type="button" class="open-overlay">OPEN LAYER</button>
(ओवरले और क्लोज बटन)
<section class="overlay" aria-hidden="true">
<div>
<h2>Hello, I'm the overlayer</h2>
...
<button type="button" class="close-overlay">CLOSE LAYER</button>
</div>
</section>
सीएसएस
.noscroll {
overflow: hidden;
}
.overlay {
position: fixed;
overflow-y: scroll;
top: 0; right: 0; bottom: 0; left: 0; }
[aria-hidden="true"] { display: none; }
[aria-hidden="false"] { display: block; }
जावास्क्रिप्ट (वेनिला-जेएस)
var body = document.body,
overlay = document.querySelector('.overlay'),
overlayBtts = document.querySelectorAll('button[class$="overlay"]');
[].forEach.call(overlayBtts, function(btt) {
btt.addEventListener('click', function() {
/* Detect the button class name */
var overlayOpen = this.className === 'open-overlay';
/* Toggle the aria-hidden state on the overlay and the
no-scroll class on the body */
overlay.setAttribute('aria-hidden', !overlayOpen);
body.classList.toggle('noscroll', overlayOpen);
/* On some mobile browser when the overlay was previously
opened and scrolled, if you open it again it doesn't
reset its scrollTop property */
overlay.scrollTop = 0;
}, false);
});
अंत में, यहां एक और उदाहरण है जिसमें संपत्ति पर transitionलागू सीएसएस द्वारा ओवरले फीका-प्रभाव के साथ खुलता opacityहै। इसके अलावा एक padding-rightजब स्क्रॉलबार गायब हो जाता है अंतर्निहित पाठ पर एक पुनर्प्रवाहित से बचने के लिए लागू किया जाता है।
कोडपेन उदाहरण (फीका)
सीएसएस
.noscroll { overflow: hidden; }
@media (min-device-width: 1025px) {
/* not strictly necessary, just an experiment for
this specific example and couldn't be necessary
at all on some browser */
.noscroll {
padding-right: 15px;
}
}
.overlay {
position: fixed;
overflow-y: scroll;
top: 0; left: 0; right: 0; bottom: 0;
}
[aria-hidden="true"] {
transition: opacity 1s, z-index 0s 1s;
width: 100vw;
z-index: -1;
opacity: 0;
}
[aria-hidden="false"] {
transition: opacity 1s;
width: 100%;
z-index: 1;
opacity: 1;
}