Nie mogę zapobiec przewijaniu treści głównej podczas wyświetlania nakładki o ustalonej pozycji. Podobne pytania były zadawane wiele razy, ale wszystkie techniki, które wcześniej działały, wydają się nie działać na Safari w iOS 10. Wydaje się, że był to ostatni problem.Safari iOS 10: Zapobieganie przewijaniu za ustaloną nakładką i utrzymywanie pozycji przewijania
Kilka uwag:
- mogę wyłączyć przewijanie jeśli ustawić zarówno
html
ibody
dooverflow: hidden
, że sprawia jednak zwój treści ciało do góry. - Jeśli zawartość nakładki jest wystarczająco długa, aby można było przewinąć, przewijanie jest poprawnie wyłączone dla zawartości strony głównej. Jeśli zawartość nakładki nie jest wystarczająco długa, aby spowodować przewijanie, możesz przewijać zawartość strony głównej.
- Zawarłem funkcję javascript od http://blog.christoffer.me/six-things-i-learnt-about-ios-safaris-rubber-band-scrolling/, która wyłącza
touchmove
podczas wyświetlania nakładki. To działało wcześniej, ale już nie działa.
Oto pełne źródło HTML. Możesz go przetestować pod adresem http://www.pixeldigital.com/test/ios_scroll.html.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<style type="text/css">
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
body {
font-family: arial;
}
#overlay {
display: none;
position: fixed;
z-index: 9999;
left: 0;
right: 0;
top: 0;
bottom: 0;
overflow: scroll;
color: #fff;
background: rgba(0, 0, 0, 0.5);
}
#overlay span {
position: absolute;
display: block;
right: 10px;
top: 10px;
font-weight: bold;
font-size: 44px;
cursor: pointer;
}
#overlay p {
display: block;
padding: 100px;
font-size: 36px;
}
#page {
width: 100%;
height: 100%;
}
a {
font-weight: bold;
color: blue;
}
</style>
<script>
$(function() {
$('a').click(function(e) {
e.preventDefault();
$('body').css('overflow', 'hidden');
$('#page').addClass('disable-scrolling'); // for touchmove technique below
$('#overlay').fadeIn();
});
$('#overlay span').click(function() {
$('body').css('overflow', 'auto');
$('#page').removeClass('disable-scrolling'); // for touchmove technique below
$('#overlay').fadeOut();
});
});
/* Technique from http://blog.christoffer.me/six-things-i-learnt-about-ios-safaris-rubber-band-scrolling/ */
document.ontouchmove = function (event) {
var isTouchMoveAllowed = true, target = event.target;
while (target !== null) {
if (target.classList && target.classList.contains('disable-scrolling')) {
isTouchMoveAllowed = false;
break;
}
target = target.parentNode;
}
if (!isTouchMoveAllowed) {
event.preventDefault();
}
};
</script>
</head>
<body>
<div id="overlay">
<span>×</span>
<p>fixed popover</p>
</div>
<div id="page">
<strong>this is the top</strong><br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
lots of scrollable content<br>
asdfasdf<br>
<br>
<div><a href="#">Show Popover</a></div>
<br>
<br>
</div>
</body>
</html>
który pracował! Dzięki! – Gavin
Kod powinien być lepiej zapisany w pliku zewnętrznym, aby można go było zapisać w pamięci podręcznej. – Rolf
Tysięczne dzięki tobie! – TheTrueTDF