juegos juego hechos hacer como ios css html5 iframe embed

ios - hechos - Problemas táctiles del juego HTML5 cuando están incrustados en un iframe



juegos en javascript (2)

Estoy tratando de integrar juegos HTML5 en iframes para mostrar en el navegador en dispositivos móviles como iPads y iPhones.

Si los visitas directamente en un iPad funcionan bien.

Pero si los incorporas usando un iframe, cuando tocas el juego y luego lo dejas ir, el juego se detiene.

¿Hay alguna manera de detener este comportamiento de iframe para que se comporten como deberían?

Parece que tal vez el enfoque se pierde cuando dejas de tocar y piensas que está vacío y se detiene.

Ejemplo

Pruebe los dos enlaces de ejemplo a continuación en el emulador y verá el problema.

El código que estoy usando (básico)

<!doctype html> <html> <head> <meta charset="utf-8"> <title>Game</title> </head> <body> <div> <iframe src="http://static.tresensa.com/madcab/index.html?dst=A0000" frameborder="0" scrolling="no" width="960" height="536"></iframe> </div> </body> </html>

Lo que he intentado

Estilo CSS para cambiar el tipo de interacción.

<div style="overflow:auto;-webkit-overflow-scrolling:touch;"> <iframe src="" height="" height=""></iframe> </div>

JS para prevenir incumplimientos

<script> document.ontouchmove = function(e) { e.preventDefault(); }; </script>

... tampoco han ayudado


Qué hacer:

Puedes agregar lo siguiente al HTML de la página del juego:

<body onload="init()">

o alternativamente en JavaScript

document.addEventListener(''load'', init);

Agrega el siguiente JS en la página del juego también

window.init = function() { window.parent.frameRegister(window.frameElement.id); }

En su página de contenedor, defina frameRegister en JS:

var frame; window.frameRegister = function(frameId) { frame = window.frames[frameId]; }

Todo lo que está haciendo es establecer un medio de comunicación entre los dos marcos. Usaremos esto más adelante en la siguiente sección para pasar los eventos de manera apropiada entre los marcos de destino y de nivel superior.

Luego, vamos a forzar que esos eventos lleguen al elemento apropiado en la ubicación del contenedor de su hijo.

En el documento padre (su contenedor para el iframe )

Añadir este JS

var touchEvents = [''start'', ''move'', ''enter'', ''leave'', ''cancel'', ''leave'']; // Make this whichever events you want to pass for (i = 0, l = touchEvents.length; i<l; i++) { document.addEventLister(''touch'' + touchEvents[i], function(e) { e.preventDefault(); frame.document.elementFromPoint(e.pageX, e.pageY);.dispatchEvent(e); } }

Suposiciones

  1. Tu iframe es del mismo tamaño que su elemento que contiene
  2. Tu código se usa solo para móviles
    • Si lo está utilizando para la web (en un iframe) y de alguna manera lo hace funcionar en IE 8 o menos, deberá usar attachEvent y shim elementFromPoint consecuencia.

consideraciones adicionales

Si estas usando jQuery

  • Toque eventos en jQuery usando pageX / pageY
  • Esta respuesta es probablemente incompleta. Deberá hacer más cosas para garantizar que esté golpeando el elemento correcto.
    • por ejemplo, si está utilizando algún tipo de superposición, CSS con pointer-events: none; en la superposición tendrá que ser utilizado.

Enfrentando el mismo problema en este momento. Parece que solo Safari lo hace de esta manera en Google Chrome Samsung Galaxay S4 funciona.

Actualización: creo que este problema no se puede resolver desde un sitio web que aloja el juego. Lo que descubrí hasta ahora al profundizar en el material: si agrega esto en el código, por ejemplo, CSS:

body{ -ms-touch-action: none; touch-action: none; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }

o / y Javascript

document.addEventListener(''ontouchstart'', function(e) {e.preventDefault()}, false); document.addEventListener(''ontouchmove'', function(e) {e.preventDefault()}, false);

del "juego iframed" funcionará y bloqueará este comportamiento (cosas como: touchmoves, touchscroll, etc., todo lo que hace que el juego pierda el foco). Pero todo lo que está en el iframe se adhiere a las reglas del código allí y parece que no se puede bloquear si intentamos agregar esto a la cuadrícula de iframe.

La única solución que se me ocurre es superponer un div invisible absoluto con un índice z más alto y tratar de agregarle habilidades. Pero creo que el juego ya no responderá al toque en este caso. IDK ...