2011-12-19 15 views
11

In sostanza, ho contenuti flash che scorre sulla rotellina del mouse. Funziona bene, a meno che non ci sia altro contenuto nel browser in modo tale che barra di scorrimento del browser è abilitato - quando è il caso, sia la finestra del browser e il mio SWF scorrimento sul rotellina del mouse. C'è un modo per correggere questo comportamento?Come fermare il browser simultanea e rotellina del mouse SWF lo scorrimento in AS3?

domanda simile chiesto qui:

disable mouse wheel scrolling while cursor over flex app?

che fa riferimento la soluzione bloggato su qui:

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

Ma la soluzione non funziona su tutti i browser! Mentre si lavora su alcuni browser di Windows, non funziona affatto su Mac OS X - registra eventi rotellina del mouse in Firefox, ma non sono sempre sparato a tutti in Chrome e Safari.

Ora so che la ruota del mouse (secondo i documenti Adobe InteractiveObject ufficiale) è presumibilmente supportata solo su sistemi Windows, ma l'evento è ancora attivato per impostazione predefinita su Mac OS X. È questo bug di scorrimento simultaneo il motivo per cui non è supportato ?

Edit: aggiungere più informazioni soluzione di cui sopra ...

nota che la soluzione sopra utilizza fondamentalmente ExternalInterface di inviare il seguente JavaScript alla funzione "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); 

È questo gatto almeno sulla strada giusta, o c'è una soluzione migliore (cioè pienamente funzionale)?

risposta

0

Potrebbe essere necessario testare le variazioni di scroll e mousewheel per accedere agli eventi Webkit. Vedi here.

0

credo si dovrà associare l'evento in JS nella pagina, quindi evitare di default, e inviare l'evento (delta) per il flash. Il codice che hai postato sembra che è la creazione che fino un po '(evitando default) ma io non vedere dove il codice è agganciando il DOM.

2

Si dovrebbe essere in grado di fare questo del tutto tramite javascript ...

Prima di tutto è necessario ascoltare "ruota", "rotellina" e anche di "DOMMouseScroll". It appears DOMMouseScroll is for Firefox only .....

In secondo luogo - potrebbe essere un po 'meglio per fare questo interamente in 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

ho creato un piccolo lib che gestisce tutto per voi. Funziona perfettamente (per quanto ho testato) sul plug-in predefinito per Flash Player, su Pepper flash e su MAC-OS. E non è necessario aggiungere alcun file .js nella cartella HTML

GIhub repo

Problemi correlati