2014-10-10 16 views
5

Web Animations is a new w3c spec, nur um klar zu sein, worüber wir reden. In jedem Fall wollte ich sanft zu einem bestimmten Element blättern. Mit der Animate Funktion von jQuery war das immer ein Kinderspiel, aber das scheint bei Web-Animationen nicht so einfach zu sein. Gibt es eine Möglichkeit, die Timing-Funktionen von Web Animation zu verwenden und sie auf eine DOM-Eigenschaft (scrollTop) anzuwenden. Der Grund, den ich stelle, ist, dass ich nicht eine ganze (zusätzliche) Bibliothek laden möchte, nur um seine Interpolationsfunktion zu verwenden, während ich es mit einer anderen Technologie/Bibliothek in der restlichen Anwendung mache.Animiere DOM-Eigenschaften (scrollTop) mit Web-Animationen

+0

das gleiche Problem verfolgen. Scheint, dass WA nur CSS-Eigenschaften animiert, wobei scrollTop nicht eins ist. – clyfe

+0

@clyfe Gut, stellt sich heraus, dass ich damals nicht ganz verrückt war: P Wie auch immer, ich habe es nie implementiert, aber ich überlegte, irgendwann eine zufällige billige CSS - Eigenschaft auf einem unsichtbaren Element zu animieren und das zu benutzen ScrollTop'. Nicht schön, aber besser als eine ganze zusätzliche Bibliothek zu laden. –

Antwort

2

Sie können Custom Effects verwenden, um scrollTop zu animieren, z.

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

Das müssen wir heute Abend noch ausprobieren, aber das sieht perfekt aus: O Und danke für deine tolle Arbeit an Polymer: D (und willkommen bei StackExchange?) –

+0

Hier ist ein funktionierender JSFiddle für alle, die irgendwann einmal darauf stoßen: http : //jsfiddle.net/4hd3hjrx/1/ und http://jsfiddle.net/4hd3hjrx/ –

+1

'Animation' heißt jetzt' KeyframeEffect' in der W3C-Spezifikation –

2

Aus Gründen der Dokumentation von Yvonne Antwort beginnend mit 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

Haben Sie eine Version mit Polymer 1.0? Core-Animation ist veraltet und die neue Neon-Animation-Unterstützung ist ziemlich undurchschaubar. –