- From: Yehonatan Daniv via GitHub <sysbot+gh@w3.org>
- Date: Fri, 19 Apr 2024 14:04:41 +0000
- To: public-css-archive@w3.org
ydaniv has just created a new issue for https://github.com/w3c/csswg-drafts:
== [web-animations-2] Propose syntax of imperative API for animation-trigger ==
This is a followup on #8942, looking a bit ahead and proposing an imperative syntax for `animation-trigger` in Web Animation API.
The main idea is to introduce a new class `AnimationTrigger` that takes an `options` object, as below:
```webidl
interface AnimationTrigger {
constructor(AnimationTriggerOptions options)
}
dictionary AnimationTriggerOptions {
AnimationTimeline timeline = DocumentTimeline
AnimationTriggerType type = "once"
TimelineRangeOffset rangeStart = "normal"
TimelineRangeOffset rangeEnd = "normal"
TimelineRangeOffset exitRangeStart = "normal"
TimelineRangeOffset exitRangeEnd = "normal"
}
enum AnimationTriggerType = { "once", "repeat", "alternate", "state" }
```
And the the following example in CSS:
```css
#target {
animation-trigger: repeat view() contain cover;
}
```
becomes this in JS:
```javascript
const view = new ViewTimeline({
subject: '#target'
});
const trigger = new AnimationTrigger({
type: 'repeat',
timeline: view,
rangeStart: 'contain 0%',
rangeEnd: 'contain 100%',
exitRangeStart: 'cover 0%',
exitRangeEnd: 'cover 100%'
});
```
The four properties for range seem a bit overwhelming, but this should follow current syntax for rangeStart/End for scroll-driven animations. Perhaps it's worth to consider only 2 properties like: `range` and `exitRange` that will take the shorthand form?
Then, usage with `Animation` could be:
```javascript
const effect = new KeyframeEffect(target, {
opacity: [0, 1]
});
const animation = new Animation(effect, {
trigger: trigger
});
```
Notice I overloaded the `Animation` constructor's signature with a property bag as a second parameter, instead of an `AnimationTimeline`. The idea is that, if possible, we could overload it to accept either a timeline, or a dict with optional properties, currently `timeline` and `trigger`.
Or, alternatively, via `.animate()`:
```javascript
target.animate({ opacity: [0, 1] }, {
duration: 1000,
easing: 'ease-in',
trigger: trigger
});
```
cc: @flackr @birtles
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/10229 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Friday, 19 April 2024 14:04:42 UTC