Skip to content

Instantly share code, notes, and snippets.

@jonsadka jonsadka/.block
Last active Mar 10, 2017

Embed
What would you like to do?
Animated Hexagram (Inner Lines)
license: mit
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<style>
body {
background-color: #164677;
margin:0; position:fixed; top:0; right:0; bottom:0; left:0;
}
.parent-container {
position: relative;
}
.pattern-container {
position: absolute;
width: 100%;
height: 500px;
}
/* Perimeted of one star is 129 */
.pattern {
fill: none;
stroke: #2067AC;
stroke-dasharray: 129, 129;
stroke-dashoffset: 0;
}
</style>
</head>
<body>
<div class="parent-container">
<div class="pattern-container">
<svg width="100%" height="100%">
<defs>
<pattern id="Pattern" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse">
<path class="pattern point-up" d="M0 10,20 40,40 10Z" />
<path class="pattern point-down" d="M0 30,20 0,40 30Z"/>
</pattern>
</defs>
<rect fill="url(#Pattern)" width="100%" height="100%"/>
</svg>
</div>
</div>
</body>
<script>
let upperThreshold = 129 + 129;
const lowerThreshold = 0;
const increment = 5;
let reset = false;
setInterval(() => {
const patterns = document.getElementsByClassName('pattern');
for (let i = 0; i < patterns.length; i++) {
const pattern = patterns[i];
var previousStrokeDashOffset = +pattern.style['stroke-dashoffset'];
if (previousStrokeDashOffset > upperThreshold) {
reset = true;
} else {
reset = false
}
reset ?
pattern.style['stroke-dashoffset'] = lowerThreshold:
pattern.style['stroke-dashoffset'] = previousStrokeDashOffset += increment * Math.random() * 2;
}
}, 40)
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.