2010-08-18 2 views
0

Si le document html est désactivé. (pas de défilement ...)HTML avec event.preventDefault

document.ontouchmove = function(event){ event.preventDefault(); } 

Puis-je activer des éléments de façon sélective dans le document html? comme un div, span Quel javascript devrais-je utiliser pour faire cela?

Répondre

5

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.

+0

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

+1

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 –

+0

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