Conditionnellement bloc de défilement/touchmove événement dans le navigateur safari mobile
iOS 5 permet maintenant de native overflow: scroll.
Ce que je voudrais faire est de désactiver le touchmove
événement pour tout, sauf les éléments qui ont le défilement de la classe ou de leurs enfants.
Mais je n'arrive pas à le faire fonctionner; c'est ce que j'ai travaillé avec ci-dessous:
<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>
OriginalL'auteur | 2011-12-22
Vous devez vous connecter pour publier un commentaire.
Je sais, ça fait un moment depuis que vous avez posé la question, mais j'ai eu le même problème et j'ai utilisé votre code comme base pour résoudre le problème. Donc merci pour l'inspiration.
(Javascript + jQuery)
Ou moins détaillé, mais en fin de compte le même résultat (crédit J Griffiths):
Vous devez également inclure la balise META suivante.
if (!$(e.target).closest('.scrollable').length) { e.preventDefault(); }
Bonne suggestion, j'ai voulu mettre à jour cette réponse plus tôt que cela, mais avez fait jusqu'à maintenant. Merci
OriginalL'auteur Scott
Version JavaScript basé sur Nevirs réponse:
OriginalL'auteur Fred Bergman
Si vous écrivez ce jquery dans le document.prête cas, il va travailler.
OriginalL'auteur sems
J'ai essayé de Scott réponse, mais il ne fonctionne pas sur mon iphone iOS 5.1.1
Aussi, cela est particulièrement important si vous êtes à la construction d'un webClip de l'app, mince j'espère iOS 6 va permettre à une fenêtre d'affichage de la balise qui désactive l'auto-bounce
Ma version ci-dessous fonctionne (ou ne pas) ainsi que Scott est la réponse ci-dessus, comme il le fait essentiellement la même chose.
jQuery 1.7.2
OriginalL'auteur tim
Nous pouvons utiliser la évènements touchstart de l'événement au lieu de touchmove événement. En vertu de l'Un Doigt Événements, il dit que non, les événements sont envoyés pendant une casserole, afin touchmove peut-être trop tard.
J'ai ajouté le port d'écoute du document, pas le corps.
OriginalL'auteur Pavan
Voici une (principalement) la solution de travail pour désactiver le défilement vertical pour tous, mais débordé éléments:
(CoffeeScript):
Est-ce que donner la réponse tout de moins en moins valable?
Oui, absolument.
js2coffee.org
OriginalL'auteur Nevir