Bedingt block scrollen/touchmove-event in mobile safari
iOS 5 erlaubt nun das native overflow: scroll-Unterstützung.
Was ich möchte zu tun ist, deaktivieren Sie die touchmove
Veranstaltung für alles, was mit Ausnahme von Elementen, die die 'Scrollbar' Klasse oder für Ihre Kinder.
Aber ich kann nicht scheinen, um es zu arbeiten; dies ist, was ich arbeite mit dem unten:
<html>
<head>
<style>
.scrollable {
height: 5em;
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
//doesn't seem to work
var handleMove = function (e) {
if (!$(e.target).parents().andSelf().hasClass('scrollable')) {
e.preventDefault();
}
};
document.addEventListener('touchmove', handleMove, true);
</script>
</head>
<body>
<div>
don't scroll if you drag here
</div>
<div class='scrollable'>
should be scrollable if you drag here
<ul>
<li>and here</li>
<li>and here</li>
<li>and here</li>
<li>and here</li>
<li>and here</li>
<li>and here</li>
<li>and here</li>
<li>and here</li>
</ul>
</div>
don't scroll if you drag here
</body>
</html>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, es ist schon eine Weile her, seit Sie die Frage, aber ich hatte das gleiche Problem und ich habe deinen code als Grundlage für die Lösung des Problems. Also danke für die inspiration.
(Javascript + jQuery)
Oder weniger ausführlich, aber letztlich das gleiche Ergebnis (Kredit J Griffiths):
Sollten Sie auch das folgende META-tag.
if (!$(e.target).closest('.scrollable').length) { e.preventDefault(); }
JavaScript-version, basierend auf Nevirs Antwort:
Wenn Sie schreiben, diese in jquery document.ready-Ereignis, es wird funktionieren.
Ich habe versucht, Scott ' s Antwort aber es hat nicht funktioniert auf meinem iphone iOS 5.1.1
Auch, dies ist besonders wichtig, wenn Sie einen webClip-app, Oh Mann, ich hoffe, dass iOS 6 wird es ein viewport-tag, der deaktiviert die auto-bounce
Meine version unten funktioniert (oder nicht) sowie Scott ' s Antwort oben, da es im wesentlichen nicht die gleiche Sache.
jQuery 1.7.2
Können wir die touchstart Veranstaltung statt touchmove Veranstaltung. Unter Einem Finger Ereignisse, die es sagt, dass keine Ereignisse gesendet werden, während eine Schwenk -, so touchmove zu spät sein kann.
Habe ich den Hörer zu dokumentieren, nicht Körper.
Hier ist eine (meist) funktionierende Lösung für das deaktivieren der vertikalen Bildlauf für alle, aber übergelaufen Elemente:
(CoffeeScript):