MPADiff
is a minimal JavaScript library written in TypeScript that prevents your website to reload when the user navigates to another page. This is the default behaviour for SPAs written React, Angulat, Vue & other SPA frameworks/libraries.
The main difference here is that MPADiff
provides this functionality to multi page applications written in PHP, Node.js, ASP, or any other language/framework.
It works by sending a GET
request to URIs of links to fetch HTML. Once the user clicks on such link, the head
element is updated (without reloading any CSS) & the body
element is swaped. Both eager & lazy loading of HTML documents are supported and can be configured accoeding to your needs.
Before.mov
after.mov
- Custom loaders
- Eager & Lazy Loading
- Custom delays
- Doesn't reload CSS.
- 3kb (Gzipped)
- TypeScript
- No Iframes
yarn install MPADiff
or
npm i -S MPADiff
or
<script src="https://cdn.jsdelivr.net/gh/atwamahmoud/MPADiff/build/index.js"></script>
or self hosted
<script src="/build/index.js"></script>
MPADiff exposes a minimal & simple API to use. To activate the library, all you need to do is initialize it with your custom or default configuration options.
<script src="https://cdn.jsdelivr.net/gh/atwamahmoud/MPADiff/build/index.js"></script>
<script>
window.MPADiff.default.init({
loaderDelay: 500,
eagerLoading: false,
loaderElement: undefined,
})
</script>
Option | Type | Explanation | Default |
---|---|---|---|
loaderDelay | number (ms) | number of milliseconds to wait before hiding the loader (in case of lazy loading) | 500 |
eagerLoading | boolean | Whether the links should be loaded once they appear or load them only when the user clicks on them. | true |
loaderElement | HTMLElement/Node/undefined | The element that will be used when the contents of a link is still loading and the user has clicked on it | undefined |
Initializes the MPADiff object with custom or default configuration options. Must be called before any other method. Can be called multiple times but only the first time is where the configuration is updated.
getInstance() returns an MPADiff object that is currently activated. This method is helpful since MPADiff is built based on the Singleton Design pattern.
Sets a number representing milliseconds before removing the loader from the DOM to avoid flashing if the content was loaded too quickly.
Sets a boolean representing whether the links should be eagerly or lazy loaded.
Sets the loader element that will be used. If undefined
is passed, No loader will appear.
import MPADiff from 'MPADiff';
MPADiff.init({...opts})
const MPADiffInstance = MPADiff.getInstance();
...
<script src="build/index.js"></script>
MPADiff.init({...opts})
const MPADiffInstance = MPADiff.getInstance();
...