2011-02-22 25 views
5

Estoy tratando de pausar el control deslizante en la página de inicio cuando se reproduce un video para que no siga deslizándose. Verifique here.Cómo capturar evento de clics con jQuery para iframe?

He intentado agregar un div encima y capturar los eventos de clic para el div, pero eso no funciona. Simplemente pasa los eventos al iframe, supongo. Tenga en cuenta que el iframe está cargando contenido desde Vimeo, no desde mi sitio.

¿Alguna idea sobre cómo hacer que esto funcione, o de alguna otra manera para poner en pausa el control deslizante cuando se reproduce el video? Parece que estoy en un callejón sin salida sin opciones ...

+0

posible duplicado de [Cómo añadir evento de clic a un iframe con JQuery] (http://stackoverflow.com/questions/1609741/how-to-add-click-event-to-a-iframe-with-jquery) –

+0

@Felix, esa pregunta nunca fue respondida. Este 'iframe' es contenido de un tercero, por lo que la solución presentada en la otra pregunta no funciona. –

+0

Oh, está bien. Disculpa, le hice una breve búsqueda de la pregunta rápidamente. No hay posibilidad de afaik. Quiero decir, si colocas un div encima del iframe, deberías poder capturar los eventos click, pero ya no serán reenviados al iframe. –

Respuesta

2

No parece posible capturar el evento click de un iFrame cuando el contenido es de otro dominio. Una solución que podría ser lo suficientemente buena es pausar la animación cada vez que el usuario mueve el mouse sobre el iframe y luego volver a reproducirlo cuando el mouse se va. Esto parece funcionar bien incluso si el usuario elige ir a pantalla completa en el reproductor de Vimeo.

<div class="item"> 
<iframe src="http://player.vimeo.com/video/20183913?title=0&amp;byline=0&amp;portrait=0" width="612" height="344" frameborder="0"></iframe> 
</div> 

<script type="text/javascript"> 
$("div.item iframe") 
.mouseover(function(){ 
    alert("Pause animation"); 
}) 
.mouseout(function(){ 
    alert("Play animation"); 
}); 
</script> 

Aquí está mi pequeña prueba http://jsfiddle.net/r8guJ/

+0

+1 para una buena solución alternativa. Gracias Jimmy! –

+0

Gracias! No leí con cuidado suficiente para ver que siempre cargaste contenido de Vimeo. En ese caso, la solución de Doc Hoffiday es definitivamente mejor. – jimmystormig

3

Otro método de detección de clics en un pequeño marco flotante, tales como el iframe Facebook, es utilizar el MouseEnter y MouseLeave eventos.

<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fisthegovernmentopen.info%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowtransparency="true"></iframe> 
var inIframe = false; 
$('iframe[src^="http://www.facebook.com"]') 
.bind('mouseover', function(){ 
    console.log('entered iframe'); 
    inIframe = true; 
    setTimeout(function() { 
    if (inIframe) { console.log('clicked on iframe'); } 
    }, 1000); 
}) 
.bind('mouseout', function(){ 
    console.log('left iframe'); 
    inIframe = false; 
}); 

http://jsfiddle.net/gQzeA/

+0

1ra. ¡GRACIAS! 2do. Sugerencia: use .live() o .on() ya que el iframe podría no estar en DOM al vincular los eventos (particularmente para Facebook y otros widgets sociales).También tuve varios widgets sociales en mi página uno al lado del otro usando esta técnica, y descubrí que necesitaba borrar el tiempo de espera en mouseout (si no, el reloj sigue corriendo y obtengo un "clic asumido" para rápidamente en otros iframes). En su código, agregue 'var hoverTimeout;' en la parte superior, luego 'hoverTimeout = setTimeout (function() {' y dentro de la función "mouseout" agregue 'clearTimeout (hoverTimeout);'. –

+0

3ª sugerencia: si está "asumiendo" clics "para estadísticas (por ejemplo, Google Analytics) Te recomiendo almacenar (caché)" clics supuestos "en una matriz. Y solo permitir 1 clic asumido por carga de página ... razón por la cual los widgets sociales (como Facebook's Like) se abren iframe adicional después de Me gusta/A diferencia ... esto da como resultado "clics supuestos" adicionales al pasar el ratón sobre esos iframes. –

1

Puede utilizar este plugin jQuery: https://github.com/finalclap/iframeTracker-jquery.

seleccionar el reproductor de vimeo iframe con un selector de jQuery y establecer una función de devolución de llamada que se apague el control deslizante (o hacer cualquier otra cosa):

jQuery(document).ready(function($){ 
    $('.vimeo_player iframe').iframeTracker({ 
     blurCallback: function(){ 
      // Stop your slider 
     } 
    }); 
}); 
Cuestiones relacionadas