2012-09-07 12 views
5

Sto usando la rotellina del mouse in jquery per aumentare il numero di un div, il numero aumenta correttamente ma lo scorrimento non viene fermato in Firefox.event.preventDefault(); non fermando la rotellina del mouse in Firefox

$(document).ready(function(){ 

    $('#test').bind('mousewheel DOMMouseScroll', function(event){ 

     var currentValue = parseInt($('#test').text(),10), 
      newValue = currentValue + 1; 

     $('#test').text(newValue);  
     event.preventDefault(); 
    }); 
}); 

Fiddle: http://jsfiddle.net/rHVUn/

il violino utilizza il rilevamento rotella del mouse standard, ma ho usato anche plug-rotella del mouse di Brandon Aaron ed ha lo stesso problema.

Rimuovere la riga che aggiorna il testo (ho anche provato html()) del div per risolvere il problema, ma questa è una parte cruciale del codice e non può essere rimossa.

Qualcuno sa come risolvere questo problema?

Grazie

Update: ho trovato il problema si verifica solo quando il mio mouse si trova direttamente sopra il testo, se il mio mouse è all'interno della scatola, ma non sul testo (entro l'imbottitura) il rotolo è fermo

+0

ho dimenticato di dire, se si scorre un paio di volte, poi giù il rotolo viene arrestato – Michael

risposta

1

Ho trovato una soluzione al mio problema, non può essere il modo migliore per farlo, ma Funziona.

Ho trovato che il problema si verifica solo quando il mio mouse è posizionato direttamente sul testo durante lo scorrimento, quindi ho aggiunto un elemento di sovrapposizione e lo uso come trigger della rotellina del mouse.

Fiddle: http://jsfiddle.net/rHVUn/9/
(Il colore di sfondo non è necessaria)

+0

Un hack sfortunato; Sto ancora soffrendo del problema originale :( – Matt

-1

Hai provato a legare l'evento 'mousewheel' invece di quello che hai? :

$('#test').bind('mousewheel', function(event){ ... 

ho adattato il vostro violino e sembra funzionare

+0

prega puoi pubblicare un link al violino? L'ho provato e non ha funzionato. – Michael

+0

Firefox non supporta 'mousewheel', invece usa' DOMMouseScroll'. – Matt

1

provare questo

$(document).ready(function(){ 

    $('#test').bind('mousewheel DOMMouseScroll', function(event){ 

     var currentValue = parseInt($('#test').text(),10), 
      newValue = currentValue + 1; 

     $('#test').text(newValue);  
     return false; 
    }); 
}); 
+0

Grazie, ma se provo a utilizzare il plug-in Mousewheel di Brandon Aaron, si interrompe nuovamente http://jsfiddle.net/rHVUn/6/, idealmente mi piacerebbe che funzionasse con e senza il plugin. – Michael

+0

@ Michael che la versione di Firefox stai usando funziona correttamente sul mio sistema ..! – Sibu

+0

Sto usando firefox versione 15.0 – Michael

-1
$('#objectId').on({ 
      'mousewheel': function(e) {     
       e.preventDefault(); 
       e.stopPropagation(); 
       } 
      }) 

Utilizzare questo, invece, che lavora per me

+0

Questo semplicemente non funziona L'evento si attiva ancora più volte. Per quanto ho trovato, non è possibile impedire il comportamento predefinito di un evento della rotellina del mouse. fuori perché trovare un modo per aggirare questo problema – AJB

0

Questo funziona bene su Chrome, Firefox versioni lattest e IE, Try this:

document.onmousewheel = function(){ stopWheel(); } /* IE7, IE8 */ 
 
if(document.addEventListener){ /* Chrome, Safari, Firefox */ 
 
    document.addEventListener('DOMMouseScroll', stopWheel, false); 
 
} 
 
    
 
function stopWheel(e){ 
 
    if(!e){ e = window.event; } /* IE7, IE8, Chrome, Safari */ 
 
    if(e.preventDefault) { e.preventDefault(); } /* Chrome, Safari, Firefox */ 
 
    e.returnValue = false; /* IE7, IE8 */ 
 
}
div { 
 
    float:left; 
 
    width:25px; 
 
    height:25px;; 
 
    text-align:center; 
 
    margin:5px; 
 
    padding:5px; 
 
    border:1px solid #bbb; 
 
} 
 
#test_ov { 
 
    position:absolute; 
 
    background:rgba(45,65,40,0.3); 
 
}
<div style="height:900px; border:0;"> 
 
    <div id="test">0</div> 
 
    <span id="test_ov"></span> 
 
</div>

1

Questo è ancora uno dei primi messaggi quando cerco il problema dello scorrimento di Firefox nonostante prevenga l'evento di scorrimento.

Firefox attiva due eventi sullo scorrimento del mouse: DOMMouseScroll e MozMousePixelScroll. Vedere https://github.com/jquery/jquery-mousewheel/issues/45#issuecomment-11749359 È necessario prevenire l'evento MozMousePixelScroll.

Secondo https://developer.mozilla.org/en-US/docs/Web/Events/MozMousePixelScroll il nome dell'evento più moderno è wheel, che sembra funzionare con la mia versione di Firefox (55) e Chrome (61). Probabilmente questo è quello che dovresti usare.Vedi https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent/WheelEvent

Ecco un JSFiddle:

https://jsfiddle.net/ahpy9f66/

Problemi correlati