Voici une solution assez hacky.
Changer votre gestionnaire touchmove
comme suit:
document.ontouchmove = function (event) {
if (!event.elementIsEnabled) {
event.preventDefault();
}
};
Ensuite, pour un élément que vous souhaitez activer:
element.ontouchmove = function (event) {
event.elementIsEnabled = true;
};
Cela fonctionne parce que:
- Lorsqu'un événement
touchmove
est déclenché sur l'élément, ces deux gestionnaires d'événements gèrent l'événement dans la phase de bullage. Cela signifie que l'élément touchmove
se déclenche en premier, car il est le plus proche de la source de l'événement.
- Lorsque deux gestionnaires d'événements gèrent le même événement, ils reçoivent le même objet événement.
- Vous êtes autorisé à définir vos propres propriétés arbitraires sur un objet événement.
Ainsi, l'élément touchmove
gestionnaire définit simplement une propriété personnalisée sur l'objet de l'événement, et les documents touchmove
gestionnaire vérifie pour cette propriété personnalisée afin de déterminer s'il faut éviter l'action par défaut.
Y at-il un moyen de faire défiler dans un élément pas la page entière. J'ai essayé de définir une hauteur div: 100px; débordement: défilement; en CSS, mais cela n'a pas fonctionné. (La hauteur réelle du div est 500px). – Yazzmi
L'iPhone ne prend délibérément pas en charge 'overflow: scroll', car Apple pense qu'il crée des problèmes de convivialité sur un appareil mobile. En fonction de ce que vous essayez de faire, peut-être que cela vous aidera: http://cubiq.org/scrolling-div-on-iphone-ipod-touch –
Cela fonctionne étonnamment. J'ai vu toutes sortes de gens commenter sur ce sujet mais je n'ai jamais vu quelque chose fonctionner aussi bien votre solution. Je vous remercie! – JamesK89