2015-07-22 11 views
15

Chrome 44 (44.0.2403.89 m) è appena stato rilasciato e ho problemi durante l'utilizzo di translate3d. (In entrambe le versioni Mac e Windows)Bug con translate3d in Chrome v.44?


Questo sta influenzando plugin come fullPage.js e quindi thousands of pages in questo momento. ( Opened issue at fullpage.js github)


Mi sembra che quando l'applicazione di due diversi valori di tradurre allo stesso elemento consecutivamente dopo un breve periodo di tempo, si riavvia la posizione 0 quando applicare il nuovo valore, provocando la precedente transizione da perdere.

non ero in grado di isolare completamente e riprodurla pulita come mi sarebbe piaciuto, ma questo è quanto ho potuto fare:

http://jsfiddle.net/9ksx000q/3/

di riprodurlo, basta scorrere verso il basso . Noterai come torna alla sezione precedente di ogni scroll se lo fai consecutivamente. E.g: vedrai la prima sezione rossa due volte.

Se si apre lo stesso test con qualsiasi altro browser, non si vedrà il problema.

Le transizioni in atto sono le seguenti nel mio caso (che dipendono dalle dimensioni viewport):

translate3d(0px, -641px, 0px); 
translate3d(0px, -1282px, 0px); 
translate3d(0px, -1923px, 0px); 

Ma tra il 1 ° e il 2 ° e il 3 ° e il 4 ° sembra di tornare indietro a translate3d(0,0,0); provocando la visualizzazione della prima sezione ancora e ancora come punto di partenza.

+1

@misterManSam domanda aggiornata. – Alvaro

+0

Ho applicato questa transizione: 'translate3d (0px, -255px, 0px); translate3d (0px, -510px, 0px); translate3d (0px, -765px, 0px); translate3d (0px, -1020px, 0px) ' – Hackerman

+0

@Hackerman sì, che dipende dalla dimensione del viewport. Ma il problema è ancora lì. Ciò che è rilevante è che ritorna alla prima sezione che è la posizione 0,0,0. – Alvaro

risposta

1

Funziona solo se si chiama in un animation frame

http://jsfiddle.net/9ksx000q/4/

Indovina il problema è che l'animazione e il calcolo della posizione sta accadendo allo stesso tempo, che sta causando le cose per ottenere strane

requestAnimationFrame(function() { 
    var dtop = element.position().top; 

    element.addClass('active').siblings().removeClass('active'); 

    canScroll = false; 

    var translate3d = 'translate3d(0px, -' + Math.ceil(dtop) + 'px, 0px)'; 
    $('#container').css(getTransforms(translate3d)); 

    //after animations finishes we allow to scroll again 
    setTimeout(function() { 
     canScroll = true; 
    }, 1000);  
    //1000s is the time set to the in the CSS for the container 
    //transition: all 1000ms ease-in-out; 
}); 
+0

Molto interessante! [Ho dovuto creare un sostituto per IE <10] (https://gist.github.com/alvarotrigo/530d5ff7a34e8d3463eb), in quanto [non è supportato in tutti i browser] (http: // caniuse.it/# feat = requestanimationframe) ma sembra funzionare bene! Grazie per questo! (anche se il bug di Chrome deve ancora essere risolto, credo) – Alvaro

+0

Un problema che vedo quando si applica questa soluzione è che "requestAnimationFrame" interrompe la sincronia e può causare problemi. – Alvaro

+0

C'è qualche motivo per cui "requestAnimationFrame" dovrebbe essere applicato ora che il bug in Chrome è stato risolto? Qualche idea su di esso? – Alvaro

Problemi correlati