Comment simuler un vol stationnaire avec une touche en contact navigateurs compatibles?
Avec le code HTML comme ceci:
<p>Some Text</p>
Puis un peu de CSS comme ceci:
p {
color:black;
}
p:hover {
color:red;
}
Comment puis-je permettre un appui long sur une touche activé périphérique à répliquer hover? Je peux changer de balisage/utiliser JS etc, mais ne peut pas penser à un moyen facile de le faire.
- Je suis spécialement pensée de l'iPhone OS - c'est une démo de CSS animation sur qui, pour beaucoup, c'est facile à utiliser, passez plutôt que de clics pour commencer.
Vous devez vous connecter pour publier un commentaire.
OK, j'ai fait le! Il implique de modifier le CSS légèrement et ajouter de la JS.
À l'aide de jQuery pour le rendre facile:
En anglais: lorsque vous démarrez ou à la fin d'une touche, tournez la classe
hover_effect
sur on ou off.Puis, dans votre HTML, ajouter une classe hover pour tout ce que vous voulez que cela fonctionne avec. Dans votre CSS, remplacer n'importe quelle instance de:
avec
Et seulement pour l'ajout de l'utilité, de l'ajouter à votre CSS ainsi:
Pour arrêter le navigateur vous demandant de copier/sauvegarder/sélectionnez l'image ou quoi que ce soit.
Facile!
toggle
va gâcher les choses si l'utilisateur touche un élément et l'entraîne à l'autre (par exemple si ils ont touché le mauvais article et essayez d'annuler le toucher)touchend
etpreventDefault()
dans mon site et il fonctionne bien, mais maintenant, les menus ne sont pas automatiquement fermé par tap-out de l'objectif.touchstart
d'écoute sur le corps (ou similaire), mais je me demandais si il ya une meilleure façon. Merci!user-select
ettouch-callout
de bugs, 'bout il y a un an j'étais désespérément à la recherche de cette fonctionnalité, mais ne pouvais pas le trouver n'importe oùe.preventDefault();
ligne, et si il n'est pas nécessaire pour d'autres choses que vous pouvez aussi ne pas inclure lee
en tant que paramètre à la fonction.Tout ce que vous devez faire est de lier les évènements touchstart sur un parent. Quelque chose comme cela fonctionne:
Vous n'avez pas besoin de faire quoi que ce soit dans la fonction, laissez-le vide. Ce sera suffisant pour obtenir plane sur le toucher, pour une touche se comporte davantage comme :hover et de moins en moins :actif. iOS magie.
Essayez ceci:
Et dans votre CSS:
Avec ce code, vous n'avez pas besoin d'un supplément .placez la classe!
Pour répondre à ta question principale: “Comment faire pour simuler un vol stationnaire avec une touche en contact navigateurs compatibles?”
Simplement permettre à "cliquer" l'élément (en tapant sur l'écran), puis déclencher le
hover
événement à l'aide de JavaScript.Cela devrait fonctionner, aussi longtemps que il ya une
hover
événement sur votre appareil (même si elle n'est normalement pas utilisé).Mise à jour: je viens de tester cette technique sur mon iPhone et ça semble bien fonctionner. Essayer ici: http://jsfiddle.net/mathias/YS7ft/show/light/
Si vous souhaitez utiliser une longue "touch" pour déclencher passez la souris au lieu de cela, vous pouvez utiliser le code ci-dessus extrait de comme un point de départ et avoir du plaisir avec des minuteries et des trucs 😉
Encore Améliorée De La Solution De
D'abord, je suis allé avec le Riche Bradshaw approche de la, mais alors les problèmes ont commencé à apparaître. En faisant le e.preventDefault() sur 'évènements touchstart' événement, la page n'est plus des parchemins et des, ni le long de la presse est en mesure de tirer le menu options, ni double-cliquez sur le zoom est en mesure de terminer l'exécution.
Une solution pourrait être de trouver l'événement qui est appelé et juste e.preventDefault() dans l'autre, 'touchend'. Depuis défilement 'touchmove' vient avant 'touchend' il reste que, par défaut, et 'cliquez sur' est également empêché, car il vient par la suite dans le cas de la chaîne appliquée à la téléphonie mobile, comme suit:
Mais ensuite, lorsque les options de menu s'affiche, il ne tire plus 'touchend' responsable de la désactivation de la classe, et la prochaine fois hover comportement sera dans l'autre sens, totalement mélangés.
Une solution serait alors, de nouveau, à condition de trouver l'événement qui nous sommes, ou tout simplement faire distinctes, et l'utilisation addClass() et removeClass() respectivement sur 'évènements touchstart' et 'touchend', en veillant à toujours commence et se termine par, respectivement, l'ajout et la suppression la place des personnes de décider sur elle. Pour finir nous nous lie également le retrait de rappel à la 'focusout' type d'événement, en restant responsable de la compensation d'un lien du survol du classe qui pourrait rester et ne jamais revisité à nouveau, comme suit:
Attention: les Quelques bugs encore se produire dans les deux solutions précédentes et, pense aussi (pas testé), double-cliquez sur zoom échoue encore trop.
De rangement, et Espérons-le, sans Bug (pas :)) Javascript Solution
Maintenant, pour une seconde, plus propre, plus propre et réactive, l'approche de la juste utilisation de javascript (pas de mélange entre les deux .passez de classe et pseudo :hover) et à partir d'où vous pouvez appeler directement votre ajax comportement sur l'universel (mobile et desktop) 'cliquez sur' cas, j'ai trouvé assez bien répondu à la question à partir de laquelle j'ai enfin compris comment je pouvais mélanger les toucher et les événements de la souris sans plusieurs rappels d'événement inévitablement changer les uns des autres jusqu'à l'événement de la chaîne. Voici comment:
La souris
hover
effet ne peut être mis en œuvre dans le toucher de l'appareil . Quand je suis apparu avec la même situation danssafari
ios
j'ai utilisé:active
en css pour faire effet.ie.
Dans mon cas son travail .Peut-être que c'est aussi le cas, peut être utilisé avec l'aide de javascript. Juste lui donner un essai.
Ajouter ce code et ensuite définir la classe "tapHover" à des éléments qui vous aimeriez travailler de cette façon.
La première fois que vous appuyez sur un élément qu'il aura gain de pseudoclass ":hover" et de classe "tapé". Cliquez sur l'événement en sera empêché.
Deuxième fois que vous appuyez sur le même élément - cliquez sur l'événement sera déclenché.
JS:
CSS:
HTML:
Sans appareil (ou plutôt navigateur) spécifique JS je suis sûr que vous êtes hors de la chance.
Edit: croyais que tu voulais éviter cela jusqu'à ce que j'ai relu votre question. Dans le cas de la téléphonie Mobile Safari, vous pouvez vous inscrire pour obtenir tous les événements tactiles similaires à ce que vous pouvez faire avec native UIView-s. Ne pouvez pas trouver de la documentation à droite maintenant, va essayer de bien.
Une façon de le faire serait de faire du vol stationnaire effet lorsque la touche démarre, puis retirez le hover effet lorsque le contact se déplace ou se termine.
C'est ce que Apple a à dire à propos de le toucher de la manipulation en général, puisque vous parler de l'iPhone.
Mon goût personnel est à l'attribut de la
:hover
styles à la:focus
état, comme:Puis avec le code HTML suivant:
Et le code JavaScript suivant:
Un mélange de natif Javascript et jQuery:
Easyest solution que j'ai trouvé: j'ai eu quelques < span > balises avec :hover css règles en eux. Je suis passé par < a href="javascript:void(0)" > et voilà. Le hover styles dans iOS commencé à travailler.
Utilisation peut utiliser les CSS trop, ajouter de l'accent et de l'actif (pour IE7 et moins) pour le lien caché. Exemple de menu ul à l'intérieur d'un div avec la classe menu:
Il est tard et non-testés, devrait fonctionner 😉
Résolu 2019 - Passez la souris sur la Touche
Maintenant il semble préférable d'éviter d'utiliser hover tout à fait avec ios ou toucher en général. Le code ci-dessous s'applique à votre css tant que la touche est maintenue, et sans autres ios menus volants. Ce faire;
Jquery ajouter: $("p").sur("évènements touchstart", function(e) { $(this).focus(); e.preventDefault(); });
CSS: remplacer p:hover avec p:focus, et ajouter p:active
Options;
remplacer jquery sélecteur p avec n'importe quelle classe etc
l'effet rester, garder p:hover, et ajouter body{cursor:ponter;} si un appuyez n'importe où il se termine
essayez de cliquez sur & survol des événements ainsi que des évènements touchstart en même code (mais pas testé)
supprimer e.preventDefault(); afin de permettre aux utilisateurs d'utiliser ios menus volants ex: copie
Notes
testé uniquement pour les éléments de texte, ios peut traiter les entrées etc. différemment
uniquement testé sur iphone ios XR 12.1.12, et l'ipad 3 ios 9.3.5, à l'aide de Safari ou Chrome.