Events
As we are replacing the native lifecycle of a browser visit, we need events that let us imitate that lifecycle in our scripts.
Swup emits a list of events that can be used to implement custom logic, initialize components, trigger analytics, and much more. Listen to events using the on() and off methods.
// Add a new handler
swup.on('pageView', () => {
console.log('New page loaded');
});
swup.off('pageView', handler); // remove a single handler
swup.off('pageView'); // remove all 'pageView' handlers
swup.off(); // remove all handlers for all events
For backward compatibility, all events are also triggered on the document with a swup: prefix.
document.addEventListener('swup:contentReplaced', () => {});
List of all events
| Event name | Description |
|---|---|
| animationInDone | triggers when transition of all animated elements is done (after content is replaced) |
| animationInStart | triggers when animation IN starts (class is-animating is removed from html tag) |
| animationOutDone | triggers when transition of all animated elements is done (after click of link and before content is replaced) |
| animationOutStart | triggers when animation OUT starts (class is-animating is added to html tag) |
| animationSkipped | triggers when transition is skipped (on back/forward buttons) |
| clickLink | triggers when link is clicked |
| contentReplaced | triggers right after the content of page is replaced |
| disabled | triggers on destroy() |
| enabled | triggers when swup instance is created or re-enabled after call of destroy() |
| hoverLink | triggers when link is hovered |
| openPageInNewTab | triggers when page is opened to new tab (link clicked when control key is pressed) |
| pageLoaded | triggers when loading of some page is done |
| pagePreloaded | triggers when the preload of some page is done (differs from pageLoaded only by the source of event - hover/click) |
| pageRetrievedFromCache | triggers when page is retrieved from cache and no request is necessary |
| pageView | similar to contentReplaced, except it is once triggered on load |
| popState | triggers on popstate events (back/forward button) |
| samePage | triggers when link leading to the same page is clicked |
| samePageWithHash | triggers when link leading to the same page with #someElement in the href attribute is clicked |
| transitionStart | triggers when transition start (loadPage method is called) |
| transitionEnd | triggers when transition ends (content is replaced and all animations are done |
| willReplaceContent | triggers right before the content of page is replaced |
Examples
Trigger analytics page views
swup.on('pageView', () => {
dataLayer.push({
event: 'VirtualPageview',
virtualPageURL: window.location.pathname,
virtualPageTitle: document.title
});
});
Initialize new components on the page
swup.on('contentReplaced', () => {
swup.options.containers.forEach((selector) => {
// load scripts for all elements with 'selector'
});
});
Listening to swup's DOM events
document.addEventListener('swup:contentReplaced', () => {
// do something
});