Motion
Motion is how Play gets to a page, never what the page is. Write every page as it looks when finished; motion says how a presenter arrives there. Only Play reads it: the canvas always shows the finished page, and no export carries motion — a PDF prints each page as drawn.
Add motion when the person is making something to present or to click through, and keep it light. A transition per page and a reveal or two is a talk; everything flying in is noise.
Where it goes
After the last page, one block per page that has any:
motion intro enter=fade
intro.title enter=rise
intro.chart enter=fade step
intro.note enter=fade together
intro.cta enter=pop go=#pricing
motion pricing enter=push duration=600
pricing.back go=back
A header names a page — a top-level frame — and says how Play arrives on it. Each line under it names a node on that page and says what the node does. Never copy a page to animate between the copies: each page is written once.
The header
motion <page> [enter=…] [duration=…] [scroll]
enter | Play arrives on the page by… |
|---|---|
cut | nothing at all — the default |
fade | fading in over the page before |
push | pushing the page before out, sideways |
slide | sliding in over the page before, which stays put |
You never write a direction. Going forward runs the new page’s enter; going back runs the
leaving page’s enter in reverse.
scroll: a page taller than a screen
Play fits each page whole into the window, which shrinks a long web page to a thin strip.
scroll fits the page to the window’s width instead, and the presenter scrolls it — wheel,
trackpad, Space, Page Down, ↓ — the way a browser shows a page. At the bottom the same key goes
on to the next page; → still goes there at once. A header with only scroll is a whole block:
motion home scroll
Give it to a web page, a landing page or a long article taller than one screen. Leave it off
slides, posters and phone screens, which are meant to be seen whole. A go=#pricing to a frame
inside a page that scrolls lands with that frame at the top of the window. The canvas and every
export are unchanged: they show the whole page.
A line
<node> [enter=…|exit=…] [duration=…] [delay=…] [step|together] [go=…]
Effects, for enter and for exit:
| effect | entering | leaving |
|---|---|---|
cut | appears at once | vanishes at once |
fade | fades in | fades out |
rise | rises from a little below | rises away |
drop | drops from a little above | drops away |
pop | grows in from slightly smaller | shrinks away |
A node that enters is hidden when Play arrives on its page, until its turn; one that
exits is gone after its turn. A node may have one enter line and one exit line — two
lines, never both on one.
Order. Lines build in the order written, each starting when the one above finishes, unless it says:
together— start with the line above;step— wait for the presenter to press → or click. What follows runs by itself up to the nextstep.
delay=300 waits that long after the line would otherwise start.
Time is milliseconds, as a plain number: duration=600, never 600ms or 0.6s. The
default is 400 and the most is 10000.
Buttons: go=
Any line can say where a click on its node goes in Play. A click anywhere inside the node
counts, so put go= on the group or frame that is the button, not on its label.
go=#pricing— that page. A frame inside a page goes to its page.go=back— wherever the presenter came from.go=next— the next page, whatever is left to reveal on this one.go=https://…orgo=mailto:…— only a link the person gave you.
A button can animate as well: intro.cta enter=pop go=#pricing. A go= works only in Play.
A link that should also work in an exported PDF is a text run’s link= (see nodes).
Editing motion
A patch replaces a page’s whole block: write motion <page>, its header (scroll included),
and every line as it should end up. A bare motion <page> clears it.
motion intro enter=fade
intro.title enter=rise
intro.chart enter=fade step
Deleting a node removes its lines, and moving it to another page takes them along. The
vd_read outline ends with the pages that have motion; mode: "full" shows the lines.
What is checked
An error refuses the write: an effect that does not exist, a unit on a time, enter and
exit on one line, step with together, a line that says nothing, a second enter, exit
or go for one node, or a line naming the page itself. In a patch, naming a node that is not
on the page is an error too.
A warning keeps the line, and Play skips it: in a whole document, a node that is not
there, a node on another page, a header that is not a page, or a go=# to no frame.