Skip to content

[scroll-animations] playbackRate effect on non time-based animations #8816

Open
@ydaniv

Description

@ydaniv

A common pattern in animations based on scroll/hover is adding interpolation from last position to current position, so that a smooth movement is achieved even on abrupt progress changes, e.g. clicking on the scrollbar in a different location.

I proposed adding this effect by defining the interaction of Animation.playbackRate with non time-based animations here: #7059 (comment).

The Web Animations API 1 spec of Animation's playbackRate:

Animations have a playback rate that provides a scaling factor from the rate of change of the associated timeline’s time values to the animation’s current time.

If we translate that into non time-based (non-monotonic timelines) it's effectively a linear interpolation on each frame between current progress and last progress, so on each frame the progress' update becomes:

new_progress = last_progress * (1 - playbackRate) + current_progress * playbackRate

And this maintains an effectively paused animation on playbackRate == 0 and a flipped progress for playbackRate == -1.

In respect to Scroll-driven timelines progress is described as:

The startmost scroll position represents 0% progress and the endmost scroll position represents 100% progress.

I've created a demo that I hopes at least captures the nature of this feature: https://codepen.io/ydaniv/pen/VwBojoN
Notice that the effect is mostly prominent from playbackRate=~0.1 and below, because of its exponential nature.

I think this feature is orthogonal to the Transition delays feature suggested in #7059, although it creates a similar effect.

cc @birtles @flackr @fantasai @smfr

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions