2014-10-10 14 views
5

Web Animations is a new w3c spec, solo per essere chiari di cosa stiamo parlando. Ad ogni modo, volevo scorrere verso un determinato elemento senza problemi. Usando la funzione Animate di jQuery questo è sempre stato un gioco da ragazzi, ma questo non sembra essere così semplice con le animazioni Web. Esiste un modo per utilizzare le funzioni di sincronizzazione di Web Animation e applicarle a una proprietà DOM (scrollTop). Il motivo per cui sto chiedendo è che non voglio caricare un'intera libreria (extra) solo per usare la sua funzione di interpolazione mentre lo faccio con una tecnologia/libreria diversa nel resto della mia applicazione.Animare le proprietà DOM (scrollTop) utilizzando le animazioni Web

+0

Praticando lo stesso problema. Sembra che WA animi solo le proprietà CSS, scrollTop non essendo uno. – clyfe

+0

@clyfe Bene, risulta che non ero completamente pazzo quindi: P In entrambi i casi, non l'ho mai implementato, ma a un certo punto stavo considerando di animare una proprietà css casuale e poco costosa su un elemento invisibile e usarlo per spostare il ' scrollTop'. Non bello, ma è meglio che caricare un'intera libreria extra. –

risposta

2

È possibile utilizzare Custom Effects per animare scrollTop, ad es.

var a = new Animation(el, function(time) { 
    el.scrollTop = el.scrollTop + time * 500; 
}, 1000); 
+0

Stasera devo ancora provarlo, ma sembra perfetto: O E grazie per il tuo fantastico lavoro su Polymer: D (e benvenuto a StackExchange?) –

+0

Ecco un JSFiddle funzionante per tutti quelli che si imbattono in questo punto: http : //jsfiddle.net/4hd3hjrx/1/ e http://jsfiddle.net/4hd3hjrx/ –

+1

'Animation' è ora chiamato' KeyframeEffect' nella specifica W3C –

2

Per motivi di documentazione, a partire dalla risposta di Yvonne, utilizzando core-animation:

<link rel="import" href="../../bower_components/polymer/polymer.html"> 
<link rel="import" href="../../bower_components/core-animation/core-animation.html"> 

<polymer-element name="animated-scroll"> 
    <template> 

    <style> 
     #scroller { 
     height: 300px; 
     overflow-y: scroll; 
     } 
    </style> 
    <button on-tap="{{animate}}">Scroll it</button> 
    <div id="scroller"> 
     <content></content> 
    </div> 
    <core-animation id="animation" duration="400" easing="ease-in-out"></core-animation> 

    </template> 
    <script> 
    (function() { 

     Polymer({ 
     animate: function (e) { 
      var start = this.$.scroller.scrollTop; 
      var end = 500; // px 
      var delta = end - start; 
      this.$.animation.target = this.$.scroller; 
      this.$.animation.customEffect = function (timeFraction, target, animation) { 
      target.scrollTop = start + delta * timeFraction; 
      }; 
      this.$.animation.play(); 
     } 
     }); 

    })(); 
    </script> 
</polymer-element> 
+0

Hai una versione che utilizza Polymer 1.0? core-animation è stato deprecato e il nuovo supporto per l'animazione neon è abbastanza imperscrutabile. –

Problemi correlati