2009-10-15 6 views
9

Bien que Flash comporte un événement de roulette de la souris (MouseEvent.MOUSE_WHEEL), il présente un certain nombre de problèmes.Flash: Utilisation des événements de la roulette de la souris en mode plein écran (Windows et Mac)

Le premier est que l'événement n'est pas encore pris en charge sur le Mac. Donc, il y a un tas de solutions, qui capturent tous (fondamentalement) l'événement mousewheel (ou DOMMouseScroll) en javascript et le transmettent à l'application flash. Heureusement, sous tous les navigateurs Mac que j'ai testés, cela fonctionne aussi lorsque le flash est en mode plein écran. Le problème 2 est que le flash ignore les événements de la molette de la souris avec de petits "deltas". Par exemple, IntelliPoint Mice with "Smooth Scroll" de Microsoft provoque ce problème. Une solution à ceci est la même que la solution pour le mac ... c.-à-d. Capturer l'événement javascript mouse wheel dans le navigateur et le passer à l'application. Le problème est celui des navigateurs dans les fenêtres que j'ai testés (firefox, ie, safari, et chrome), ils ne semblent pas capturer cet événement lorsque le flash est en mode plein écran. Est-ce que quelqu'un sait pourquoi ou comment résoudre ce problème?

J'ai actuellement une solution hybride qui prend toujours des événements de javascript (en mode non plein écran ou plein écran) sauf quand il est en mode plein écran sur Windows (à quel moment il les prend de l'événement flashwheel). Donc, les seules fois où il échoue est en mode plein écran sur Windows avec une souris qui a de petits deltas. Quelqu'un at-il une solution complète? Ou juste un meilleur?

Répondre

3

C'est un problème connu sur JIRA d'Adobe. Vous devez les attendre pour les réparer ou utiliser un autre événement à la place de MouseEvent.MOUSE_WHEEL. Cela ne fonctionne pas sur Windows parce que l'implémentation de Flash Player est complètement différente dans les fenêtres de Mac et Linux. Mac et Linux utilisent GTK pour implémenter le plugin Handle. Sur Windows, il utilise un HWND commun Win32API, qui permet de se concentrer sur le mode plein écran, ce qui entraîne la non distribution des événements de défilement sur le navigateur. Sur Mac et Linux, GTK étend juste la taille du plugin à la taille du bureau, et ne fait pas un vrai plein écran. C'est un comportement GTK à l'intérieur de ces systèmes. Rien ne peut être fait.

0

Votre solution est l'une des meilleures. Un seul est mieux - ne pas utiliser la roue de la souris :(

Adobe devrait faire quelque chose avec lui (et avec le soutien d'autres contrôleurs)

0

MouseEvent.MOUSE_WHEEL semble fonctionner très bien sur Mac depuis la version bêta Gala et 10.1. finale. Je peux déclencher des événements de molette de la souris avec la souris magique et pavé tactile à la fois Safari et moi Chrome.

0

Pixelbreaker's MacMouseWheel a donné le défilement en plein écran avec succès sur un Mac, mais je l'ai pas utilisé dans un certain temps (sur Safari 5 par exemple)

L'inconvénient est qu'il capture des événements pour toute la page, de sorte que vous allez perdre le défilement pour le HTML même si l'élément flash est seulement une petite case sur l'écran.

Mais vous pouvez fondamentalement basculer entre ce que vous avez déjà construit, et ce qu'il utilise dans le macmousewheel.js lorsque vous avez activé le plein écran.

Espérons que ça aide, bonne chance.

Questions connexes