Add trigger for when element has highlighted
Browse files- assets/scripts/src/element.js +5 -0
- assets/scripts/src/overlay.js +14 -7
- assets/scripts/src/position.js +4 -4
- index.html +4 -1
assets/scripts/src/element.js
CHANGED
|
@@ -54,4 +54,9 @@ export default class Element {
|
|
| 54 |
|
| 55 |
return position;
|
| 56 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 57 |
}
|
|
|
|
| 54 |
|
| 55 |
return position;
|
| 56 |
}
|
| 57 |
+
|
| 58 |
+
onHighlighted() {
|
| 59 |
+
console.log('on highlighted');
|
| 60 |
+
console.log(this.getScreenCoordinates());
|
| 61 |
+
}
|
| 62 |
}
|
assets/scripts/src/overlay.js
CHANGED
|
@@ -104,9 +104,9 @@ export default class Overlay {
|
|
| 104 |
// Add the overlay on top of the whole body
|
| 105 |
this.addCloak();
|
| 106 |
|
| 107 |
-
|
| 108 |
-
const isFadingIn = this.overlayAlpha < 0.1;
|
| 109 |
|
|
|
|
| 110 |
if (isFadingIn) {
|
| 111 |
// Ignore the animation, just highlight the item at its current position
|
| 112 |
this.highlightedPosition = this.positionToHighlight;
|
|
@@ -151,12 +151,14 @@ export default class Overlay {
|
|
| 151 |
}
|
| 152 |
|
| 153 |
// Stage a new animation frame only if the position has not been reached
|
| 154 |
-
//
|
| 155 |
-
if (
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
) {
|
| 159 |
this.redrawAnimation = this.window.requestAnimationFrame(this.draw);
|
|
|
|
|
|
|
|
|
|
| 160 |
}
|
| 161 |
} else if (this.overlay.parentNode) {
|
| 162 |
// Otherwise if the overlay is there, remove it
|
|
@@ -164,6 +166,11 @@ export default class Overlay {
|
|
| 164 |
}
|
| 165 |
}
|
| 166 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 167 |
/**
|
| 168 |
* Removes the cloak from the given position
|
| 169 |
* i.e. cuts the chunk of layout which is over the element
|
|
|
|
| 104 |
// Add the overlay on top of the whole body
|
| 105 |
this.addCloak();
|
| 106 |
|
| 107 |
+
const isFadingIn = this.overlayAlpha < 0.1;
|
|
|
|
| 108 |
|
| 109 |
+
if (canHighlight) {
|
| 110 |
if (isFadingIn) {
|
| 111 |
// Ignore the animation, just highlight the item at its current position
|
| 112 |
this.highlightedPosition = this.positionToHighlight;
|
|
|
|
| 151 |
}
|
| 152 |
|
| 153 |
// Stage a new animation frame only if the position has not been reached
|
| 154 |
+
// or the alpha has not yet fully reached fully required opacity
|
| 155 |
+
if (!this.hasPositionHighlighted()) {
|
| 156 |
+
this.redrawAnimation = this.window.requestAnimationFrame(this.draw);
|
| 157 |
+
} else if (!this.animate && isFadingIn) {
|
|
|
|
| 158 |
this.redrawAnimation = this.window.requestAnimationFrame(this.draw);
|
| 159 |
+
} else {
|
| 160 |
+
// Element has been highlighted
|
| 161 |
+
this.highlightedElement.onHighlighted();
|
| 162 |
}
|
| 163 |
} else if (this.overlay.parentNode) {
|
| 164 |
// Otherwise if the overlay is there, remove it
|
|
|
|
| 166 |
}
|
| 167 |
}
|
| 168 |
|
| 169 |
+
hasPositionHighlighted() {
|
| 170 |
+
return this.positionToHighlight.equals(this.highlightedPosition) &&
|
| 171 |
+
this.overlayAlpha > (this.opacity - 0.05);
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
/**
|
| 175 |
* Removes the cloak from the given position
|
| 176 |
* i.e. cuts the chunk of layout which is over the element
|
assets/scripts/src/position.js
CHANGED
|
@@ -35,9 +35,9 @@ export default class Position {
|
|
| 35 |
* @returns {boolean}
|
| 36 |
*/
|
| 37 |
equals(position) {
|
| 38 |
-
return this.left
|
| 39 |
-
this.right
|
| 40 |
-
this.top
|
| 41 |
-
this.bottom
|
| 42 |
}
|
| 43 |
}
|
|
|
|
| 35 |
* @returns {boolean}
|
| 36 |
*/
|
| 37 |
equals(position) {
|
| 38 |
+
return Math.round(this.left) === Math.round(position.left) &&
|
| 39 |
+
Math.round(this.right) === Math.round(position.right) &&
|
| 40 |
+
Math.round(this.top) === Math.round(position.top) &&
|
| 41 |
+
Math.round(this.bottom) === Math.round(position.bottom);
|
| 42 |
}
|
| 43 |
}
|
index.html
CHANGED
|
@@ -44,7 +44,10 @@
|
|
| 44 |
|
| 45 |
<script src="./assets/scripts/dist/sholo.js"></script>
|
| 46 |
<script>
|
| 47 |
-
const sholo = new Sholo(
|
|
|
|
|
|
|
|
|
|
| 48 |
sholo.highlight('.section__header');
|
| 49 |
</script>
|
| 50 |
</body>
|
|
|
|
| 44 |
|
| 45 |
<script src="./assets/scripts/dist/sholo.js"></script>
|
| 46 |
<script>
|
| 47 |
+
const sholo = new Sholo({
|
| 48 |
+
animate: false,
|
| 49 |
+
opacity: 0.8
|
| 50 |
+
});
|
| 51 |
sholo.highlight('.section__header');
|
| 52 |
</script>
|
| 53 |
</body>
|