Skip to content

Commit

Permalink
Refactor treasure map block
Browse files Browse the repository at this point in the history
  • Loading branch information
guilhermesimoes committed Sep 10, 2023
1 parent 70ade9f commit fa6974b
Showing 1 changed file with 25 additions and 24 deletions.
49 changes: 25 additions & 24 deletions assets/blocks/animating-a-pirate-treasure-map-path.html
Original file line number Diff line number Diff line change
Expand Up @@ -63,38 +63,39 @@
var animatedLine = document.querySelector("#animated-line");
var animatedLineMask = document.querySelector("#animated-line-mask");
var lineLength = line.getTotalLength();
var animationDuration = "3s";
var numDashes = 12;

function animate(event) {
function animate(el, transitionFn) {
el.style.strokeDashoffset = lineLength;
el.style.strokeDasharray = lineLength;

setTimeout(() => {
el.style["transition-duration"] = "3s";
el.style["transition-property"] = "stroke-dashoffset";
el.style["transition-timing-function"] = transitionFn;
el.style.strokeDashoffset = 0;
}, 10);
}

function handleClick(event) {
var button = event.target;

reset();

if (button.value === "continuous-line") {
animatedLine.style.strokeDashoffset = lineLength;
animatedLine.style.strokeDasharray = lineLength;
setTimeout(() => {
animatedLine.style["transition-duration"] = animationDuration;
animatedLine.style["transition-property"] = "stroke-dashoffset";
animatedLine.style.strokeDashoffset = 0;
}, 10);
} else { // "continuous-dashes" and "dash-by-dash"
animate(animatedLine, "ease");
} else {
// Make line dashed
animatedLine.style.strokeDasharray = lineLength / (numDashes * 2);

animatedLineMask.style.strokeDashoffset = lineLength;
animatedLineMask.style.strokeDasharray = lineLength;
setTimeout(() => {
animatedLineMask.style["transition-duration"] = animationDuration;
animatedLineMask.style["transition-property"] = "stroke-dashoffset";

if (button.value === "dash-by-dash") {
// This +1 shouldn't be here, but the animation doesn't look good without it on Firefox
animatedLineMask.style["transition-timing-function"] = `steps(${numDashes + 1}, jump-none)`;
}

animatedLineMask.style.strokeDashoffset = 0;
}, 10);
var transitionFn;
if (button.value === "dash-by-dash") {
// This +1 shouldn't be here, but the animation doesn't look good without it on Firefox
transitionFn = `steps(${numDashes + 1}, jump-none)`;
} else {
transitionFn = "ease";
}
animate(animatedLineMask, transitionFn);
}
}

Expand All @@ -105,6 +106,6 @@
animatedLineMask.style["transition-property"] = "none";
}

document.querySelector(".js-controls").addEventListener("click", animate);
document.querySelector(".js-controls").addEventListener("click", handleClick);
</script>
</body>

0 comments on commit fa6974b

Please sign in to comment.