2011-12-19 26 views
11

Esencialmente, tengo contenido flash que se desplaza en la rueda del mouse. Funciona bien, a menos que haya otro contenido en el navegador de modo que la barra de desplazamiento del navegador esté habilitada; cuando ese sea el caso, tanto la ventana del navegador COMO mi SWF se desplazan en la rueda del mouse. ¿Hay alguna forma de corregir este comportamiento?¿Cómo detener el desplazamiento simultáneo del navegador y la rueda del mouse SWF en AS3?

pregunta similares preguntó aquí:

disable mouse wheel scrolling while cursor over flex app?

que hace referencia a la solución de blogs sobre aquí:

http://www.spikything.com/blog/index.php/2009/11/27/stop-simultaneous-flash-browser-scrolling/

Pero la solución no funciona en todos los navegadores! Aunque funciona en algunos navegadores de Windows, no funciona en absoluto en Mac OS X: registra los eventos de la rueda del mouse en Firefox, pero no se activan en absoluto en Chrome y Safari.

Ahora sé que (según los documentos oficiales de Adobe InteractiveObject) la rueda del mouse solo se admite en sistemas Windows, pero el evento todavía se activa por defecto en Mac OS X. ¿Es este error de desplazamiento simultáneo el motivo por el que no es compatible? ?

Editar: añadiendo más información sobre solución anterior ...

Tenga en cuenta que la solución anterior utiliza básicamente ExternalInterface para enviar el siguiente JavaScript a la función "eval":

var browserScrolling; 

function allowBrowserScroll(value) { 
    browserScrolling = value; 
} 
function handle(delta) { 
    if (!browserScrolling) { 
     return false; 
    } 
    return true; 
} 
function wheel(event) { 
    var delta = 0; 
    if (!event) { 
     event = window.event; 
    } 
    if (event.wheelDelta) { 
     delta = event.wheelDelta/120; 
    } else if (event.detail) { 
     delta = -event.detail/3; 
    } 
    if (delta) { 
     handle(delta); 
    } 
    if (!browserScrolling) { 
     if (event.preventDefault) { 
      event.preventDefault(); 
     } 
     event.returnValue = false; 
    } 
} 
if (window.addEventListener) { 
    window.addEventListener('DOMMouseScroll', wheel, false); 
} 
window.onmousewheel = document.onmousewheel = wheel; 
allowBrowserScroll(true); 

Es esto gato al menos en el camino correcto, o hay una mejor solución (es decir, completamente funcional)?

Respuesta

0

Puede necesitar probar las variaciones de scroll y mousewheel para acceder a los eventos de Webkit. Ver here.

0

Creo que tendrá que enganchar el evento en JS en la página, luego evitar el predeterminado y enviar el evento (delta) a su flash. El código que ha publicado parece que lo está configurando un poco (lo que impide el valor predeterminado) pero no veo dónde el código está enganchando el DOM.

2

Usted debe ser capaz de hacer esto en su totalidad a través de JavaScript ...

En primer lugar es necesario escuchar a la "rueda", "rueda del ratón" y también a "DOMMouseScroll". It appears DOMMouseScroll is for Firefox only .....

En segundo lugar - que podría ser un poco mejor para hacer esto en su totalidad en javascript:

// pseudo-code -- this tests for all "Objects" using not-so-standard elementFromPoint; 
// You can also look for the element directly using id 
    var fn = function(e) { 
     var element = document.elementFromPoint(e.pageX, e.pageY); 
     if (element && element.tagName === 'OBJECT') { 
      e.preventDefault(); 
      e.stopPropagation(); 
     } 
    } 

    window.addEventListener('DOMMouseScroll', fn); 
    window.addEventListener('mousewheel', fn); 
3

he creado una pequeña lib que se encarga de todo para usted. Funciona perfecto (por lo que he probado) en el complemento Flash Player predeterminado, en Pepper flash y en MAC-OS. Y no necesita agregar ningún archivo .js a su carpeta HTML

GIhub repo

Cuestiones relacionadas