Comments (9)
I thought I had already made a built-in wait
motion, but I guess that wasn't in the library proper.
import { wait as waitUtil } from 'ember-animated';
export default function wait(sprite, opts) {
return new Wait(sprite, opts).run();
}
class Wait extends Motion {
* animate() {
yield waitUtil(this.duration);
}
}
from ember-animated.
I see. That works great!
So, there's no way to directly yield
the wait
call within my transition
?
Intuitively I keep reaching for something like this
import { wait } from 'ember-animated';
export default Controller.extend({
* transition({ duration, removedSprites }) {
removedSprites.forEach(sprite => {
yield wait(duration);
});
}
});
but it never actually works, and I end up going with Motions
instead.
Will userland code ever actually be yield
'ing within a transition? Maybe I need a mental model around Motion
... it's under private
but believe the class is public API? I could add some docs.
from ember-animated.
from ember-animated.
I have a local branch of the docs that I'm adding import paths and such to to facilitate our training on Monday. I'll add this.
If you were to just wait in the transition without ever initiating a motion
for a particular sprite, we have no reason to believe that sprite should
survive and interruption, because you weren’t using it.
I'm going to need more help understanding this. Maybe an example.
from ember-animated.
Think about what happens with removedSprites. If a removed sprite finishes its motion, it's done and we don't ever want to see it appearing on screen again. It would be confusing for it to continue to influence future transitions.
So when a transition is interrupted, we need to make a decision about which removed sprites to garbage collect vs keep in the next transition. The rule is that we keep ones that had at least one motion active when the interruption happened.
So if a transition never gets around to assigning any motion to a particular removed sprite, at interruption we're just going to delete it as unused. The transition is basically telling us it doesn't care about that sprite because that sprite is not "in motion".
If you do care about a sprite, even if only because it must stay visible in one place, then you need a wait motion to hold onto it.
from ember-animated.
@ef4 Could I PR this? It'd be great to have in my training on Monday.
from ember-animated.
Here's what I ended up with, for a "box" (say, an image) that starts out visible, and becomes a placeholder (still in the DOM and taking up space) while a separate Sprite is doing its thang.
In this case, I need the image to immediately hide when isFocused
becomes true, at which point I show a placeholder; and when isFocused
becomes false, I want to wait until the animation is finished to show it again.
* transition({ removedSprites }) {
removedSprites.forEach(sprite => {
if (sprite.element.dataset.animationId === 'placeholder') {
wait(sprite);
}
});
},
Not sure if this is good or if there's a simpler way.
Here's the rendering, the green box is there for reference to see how long the duration lasts.
from ember-animated.
Boom – and just like that I got it working!
from ember-animated.
Sure. Maybe we should call it "freeze" (inspired by the title of the PR) to distinguish from the lower-level wait
function that is really just a promise-based setTimeout.
from ember-animated.
Related Issues (20)
- [DOCS] Initial homepage for ember-animated has too much whitespace between lines HOT 1
- Embroider Compatibility: animated-container's dynamic Tag breaks build HOT 3
- Information on testing ember-animated in docs HOT 2
- Why do we need `assert-never` in `dependencies`? HOT 2
- Ember Global deprecation warning due to old version of ember-cli-babel in ember-animated HOT 2
- Consider public export of TransitionContext type HOT 1
- Attempted to resolve -element, which was expected to be a helper, but nothing was found HOT 5
- Embroider: ember-animated is trying to import from rsvp but that is not one of its explicit dependencies HOT 1
- 1.x breaks animated-outlet HOT 10
- TypeError: yield* (intermediate value)(intermediate value) is not iterable after removing IE11 from transpilation targets HOT 1
- `startTranslatedBy` and `endTranslatedBy` modify the initial and final bounds width/height
- AnimatedOrphans' documentation looks broken HOT 2
- Memory leak in emberAnimatedSingleton HOT 6
- Incompatibility with ember-element-helper v0.6.1 and Embroider optimized HOT 8
- Types are not resolveable with sufficiently new enough TypeScript
- Error after upgrade from `1.0.4` to `1.1.0` HOT 3
- Glint ember-animated/template-registry not found HOT 2
- v1.1.3 is missing type declarations HOT 4
- Documentation code examples rendering wrong
- App broken after upgrade from 2.0.0 to 2.0.1 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ember-animated.