İşte uygulamalarda kullandığım çözümüm.
Gövde taşmasını devre dışı bıraktım ve tüm web sitesi html'sini kapsayıcı div'lerin içine yerleştirdim. Web sitesi kapsayıcılarında taşma vardır ve bu nedenle kullanıcı, sayfayı beklendiği gibi kaydırabilir.
Daha sonra tüm web sitesini kapsayan daha yüksek bir z-endeksine sahip bir kardeş div (#Prevent) oluşturdum. #Prevent daha yüksek bir z-endeksine sahip olduğundan, web sitesi kapsayıcısıyla çakışır. #Prevent göründüğünde, fare artık web sitesi kapsayıcılarının üzerine gelmez, bu nedenle kaydırma yapmak mümkün değildir.
Elbette, modalınız gibi, işaretlemede #Prevent'den daha yüksek bir z-endeksine sahip başka bir div yerleştirebilirsiniz. Bu, kaydırma sorunları yaşamayan açılır pencereler oluşturmanıza olanak tanır.
Bu çözüm daha iyidir çünkü kaydırma çubuklarını gizlemez (atlama etkisi). Olay dinleyicileri gerektirmez ve uygulaması kolaydır. Tüm tarayıcılarda çalışır, ancak IE7 & 8 ile oynamanız gerekir (özel kodunuza bağlıdır).
html
<body>
<div id="YourModal" style="display:none;"></div>
<div id="Prevent" style="display:none;"></div>
<div id="WebsiteContainer">
<div id="Website">
website goes here...
</div>
</div>
</body>
css
body { overflow: hidden; }
#YourModal {
z-index:200;
}
#Prevent {
z-index:100;
position:absolute;
left:0px;
height:100%;
width:100%;
background:transparent;
}
#WebsiteContainer {
z-index:50;
overflow:auto;
position: absolute;
height:100%;
width:100%;
}
#Website {
position:relative;
}
jquery / js
function PreventScroll(A) {
switch (A) {
case 'on': $('#Prevent').show(); break;
case 'off': $('#Prevent').hide(); break;
}
}
kaydırmayı devre dışı bırak / etkinleştir
PreventScroll('on');
PreventScroll('off');