1.0.11 • Published 2 years ago
magical-scroll v1.0.11
Magical Scroll
Basic Usage
MagicalScroll.getInstance().addElement({
target: "#scroll",
animations: {
opacity: {
positions: [0, 100],
values: [0, 1],
},
},
});
Magic Slugs
Slug | Description |
---|---|
#screenWidth | width of the screen |
#screenHeight | height of the screen |
#scrollWidth | width of the scroll container |
#scrollHeight | height of the scroll container |
#elementWidth | width of the element |
#elementHeight | height of the element |
#elementIn | when the element appear at the bottom of the container |
#elementOut | when the element disappear at the top of the container |
#elementCenter | when the element is placed center of the container |
#parentElementWidth | width of the parent element (node) |
#parentElementHeight | height of the parent element (node) |
#parentElementIn | when the parent element (node) appear at the bottom of the container |
#parentElementOut | when the parent element (node) disappear at the top of the container |
#parentElementCenter | when the parent element (node) is placed center of the container |
#ancestorElementWidth{1} | width of the ancestor element (node), where {1} means the generation(s) |
#ancestorElementHeight{1} | height of the ancestor element (node), where {1} means the generation(s) |
#ancestorElementIn{1} | when the ancestor element (node) appear at the bottom of the container, where {1} means the generation(s) |
#ancestorElementOut{1} | when the ancestor element (node) disappear at the top of the container, where {1} means the generation(s) |
#ancestorElementCenter{1} | when the ancestor element (node) is placed center of the container, where {1} means the generation(s) |
Built-in Properties
Name | Description |
---|---|
opacity | |
scale | |
rotate | |
translateX | |
translateY | |
display | none or just nothing |
visibility | visible or hidden |
backgroundColor | calculating within values |
color | calculating within values |
Register/Replace your own property
Register/Replace the value populating callback
const magicalScroll = MagicalScroll.getInstance();
const animationName = "myScrollAnimation";
magicalScroll.registerPropertyPopulateCallback(
animationName,
(currentPosition, positions, values) => {
const index = positions.findIndex((position) => position > currentPosition);
return index > -1 ? values[index] : values[values.length - 1];
},
);
Explanation
Name | Meaning |
---|---|
currentPosition | current scroll top of the container |
positions | list of position which are already computed as a number |
values | list of value |
You can also register a new animation with existed built-in callback
const magicalScroll = MagicalScroll.getInstance();
const animationName = "opacity";
magicalScroll.registerPropertyPopulateCallback(
animationName,
MagicalScroll.populateNumberValueCallback,
);
Register/Replace the CSS generation callback
const magicalScroll = MagicalScroll.getInstance();
const animationName = "myScrollAnimation";
magicalScroll.registerPropertyPopulateCallback(
animationName,
(target, property, value) => {
target.style.display = value ? null : "none";
}
);
Explanation
Name | Meaning |
---|---|
target | element target |
property | name of the property, animationName as the example above |
value | computed value |
What the next?
- Provide other properties something like
skew
,brightness
. Interaction Observer API
for better performance.- Support multiple instances.
- Child slug.
- Query for element.
- Function of toggling class by position.
- Inertia?
- Animation function (ease-in-out, ... etc.) support.
- Refactor it into better architecture.
Matrix
calculation.