waitEvent(element, eventName) resolves with the next matching event
from element and removes its listener. Only one waitEvent is
pending per element: requesting another (whatever the event name)
before the old one fires rejects the earlier promise — so duplicate
transitionend / animationend handlers don't pile up. Part of
pota/use/event.
| Argument | Type | Description |
|---|---|---|
element |
Element |
Element to listen on. |
eventName |
string |
Name of the event to wait for (e.g. 'click'). |
Returns: a Promise that resolves with the dispatched event the
first time eventName fires on element.
Toggles a class to start a CSS transition, then awaits its
transitionend before logging — no manual addEventListener /
removeEventListener bookkeeping.
import { render, signal } from 'pota'
import { waitEvent } from 'pota/use/event'
function App() {
const open = signal(false)
const log = signal('')
let box
async function toggle() {
open.update(prev => !prev)
await waitEvent(box, 'transitionend')
log.write('transition finished')
}
return (
<div>
<button on:click={toggle}>toggle</button>
<div
use:ref={el => (box = el)}
style={() => ({
width: '100px',
height: '100px',
background: 'rebeccapurple',
transition: 'transform 300ms ease',
transform: open.read()
? 'translateX(100px)'
: 'translateX(0)',
})}
/>
<p>{log.read}</p>
</div>
)
}
render(App)