Something pretty because I love pretty things.
A Pen by Chris Gannon on CodePen.
Something pretty because I love pretty things.
A Pen by Chris Gannon on CodePen.
| <svg id="mainSVG" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 600"> | |
| <defs> | |
| <filter id="drop" x="-100%" y="-100%" width="250%" height="250%"> | |
| <feGaussianBlur stdDeviation="5" result="coloredBlur" /> | |
| <feOffset dx="0" dy="60" result="offsetblur"></feOffset> | |
| <feFlood id="glowAlpha" flood-color="#555" flood-opacity="0.12"></feFlood> | |
| <feComposite in2="offsetblur" operator="in"></feComposite> | |
| <feMerge> | |
| <feMergeNode/> | |
| <feMergeNode in="SourceGraphic"></feMergeNode> | |
| </feMerge> | |
| </filter> | |
| <filter id="drop2" x="-100%" y="-100%" width="250%" height="250%"> | |
| <feGaussianBlur stdDeviation="6" result="coloredBlur" /> | |
| <feOffset dx="0" dy="6" result="offsetblur"></feOffset> | |
| <feFlood id="glowAlpha" flood-color="#555" flood-opacity="0.51"></feFlood> | |
| <feComposite in2="offsetblur" operator="in"></feComposite> | |
| <feMerge> | |
| <feMergeNode/> | |
| <feMergeNode in="SourceGraphic"></feMergeNode> | |
| </feMerge> | |
| </filter> | |
| <filter id="goo"> | |
| <feGaussianBlur in="SourceGraphic" stdDeviation="7" result="blur" /> | |
| <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 21 -9" result="cm" /> | |
| <feBlend /> | |
| </filter> | |
| <linearGradient id="grad1" gradientUnits="userSpaceOnUse" x1="400" y1="100" x2="400" y2="600"> | |
| <stop offset="0" style="stop-color:#059FF6" /> | |
| <stop offset="1" style="stop-color:#0369F3" /> | |
| </linearGradient> | |
| <path id="copyright-cg" d=""/> | |
| <linearGradient id="grad2" gradientUnits="userSpaceOnUse" x1="400" y1="200" x2="400" y2="400"> | |
| <stop offset="0" style="stop-color:#059FF6" /> | |
| <stop offset="1" style="stop-color:#0408A7" /> | |
| </linearGradient> | |
| <linearGradient id="grad3" gradientUnits="userSpaceOnUse" x1="400" y1="500" x2="400" y2="600"> | |
| <stop offset="0" style="stop-color:#059FF6" /> | |
| <stop offset="1" style="stop-color:#0369F3" /> | |
| </linearGradient> | |
| <linearGradient id="grad4" gradientUnits="userSpaceOnUse" x1="400" y1="200" x2="400" y2="300"> | |
| <stop offset="0" style="stop-color:#02DBFE" /> | |
| <stop offset="1" style="stop-color:#0369F3" /> | |
| </linearGradient> | |
| <linearGradient id="grad5" gradientUnits="userSpaceOnUse" x1="400" y1="100" x2="400" y2="600"> | |
| <stop offset="0" style="stop-color:#0369F3" /> | |
| <stop offset="1" style="stop-color:#02DBFE" /> | |
| </linearGradient> | |
| <clipPath id="mainMask"> | |
| <circle cx="400" cy="300" r="100" /> | |
| </clipPath> | |
| <clipPath id="otherMask"> | |
| <rect x="300" y="0" width="200" height="400" rx="100" ry="100"/> | |
| </clipPath> | |
| </defs> | |
| <g filter="url(#drop)"> | |
| <g id="whole" clip-path="url(#mainMask)"> | |
| <g class="dots1" filter="url(#goo)" fill="url(#grad1)"> | |
| <circle class="outline" cx="400" cy="300" r="90" fill="none" stroke="#0369F3" stroke-width="23" stroke-dasharray="160 65" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| </g> | |
| <g class="dots2" filter="url(#goo)" fill="url(#grad2)"> | |
| <circle class="outline" cx="400" cy="300" r="90" fill="none" stroke="#0408A7" stroke-width="23" stroke-dasharray="160 40" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| </g> | |
| <g class="dots3" filter="url(#goo)" fill="url(#grad3)"> | |
| <circle class="outline" cx="400" cy="300" r="90" fill="none" stroke="url(#grad3)" stroke-width="23" stroke-dasharray="240 " /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| </g> | |
| <g class="dots4" filter="url(#goo)" fill="url(#grad4)"> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| <circle class="dot" cx="0" cy="0" r="20" /> | |
| </g> | |
| </g> | |
| </g> | |
| <g filter="url(#drop2)"> | |
| <g clip-path="url(#otherMask)" > | |
| <g class="dots5" fill="url(#grad2)" filter="url(#goo)"> | |
| <!-- <circle class="outline" cx="400" cy="300" r="89" fill="none" stroke="url(#grad2)" stroke-width="23" stroke-dasharray="90 145" stroke-dashoffset="0" stroke-linecap="round" /> --> | |
| <circle class="outsideDot" cx="0" cy="0" r="20" /> | |
| <circle class="outsideDot" cx="0" cy="0" r="20" /> | |
| <circle class="outsideDot" cx="0" cy="0" r="20" /> | |
| <circle class="outsideDot" cx="0" cy="0" r="20" /> | |
| <circle class="outsideDot" cx="0" cy="0" r="20" /> | |
| <circle class="outsideDot" cx="0" cy="0" r="20" /> | |
| <circle class="outsideDot" cx="0" cy="0" r="20" /> | |
| <circle class="outsideDot" cx="0" cy="0" r="20" /> | |
| <circle class="outsideDot" cx="0" cy="0" r="20" /> | |
| </g> | |
| </g> | |
| </g> | |
| <!-- <rect x="300" y="0" width="200" height="400" rx="100" ry="100" opacity="0.3" fill="url(#grad3)"/> --> | |
| </svg> |
| let select = s => document.querySelector(s), | |
| selectAll = s => document.querySelectorAll(s), | |
| mainSVG = select('#mainSVG') | |
| let e = CustomWiggle.create('', {wiggles: 1, type: 'easeOut'}); | |
| gsap.set('svg', { | |
| visibility: 'visible' | |
| }) | |
| gsap.set('.dot', { | |
| transformOrigin: '50% 50%', | |
| attr:{ | |
| cx:'random(350, 450)', | |
| cy: 440, | |
| r: 'random(4, 20)' | |
| } | |
| }) | |
| gsap.set('.outsideDot', { | |
| transformOrigin: '50% 50%', | |
| attr:{ | |
| cx:'random(370, 420)', | |
| cy: 420, | |
| r: 'random(3, 19)' | |
| } | |
| }) | |
| let tl1 = gsap.timeline(); | |
| tl1.to('.dots1 .dot', { | |
| duration: 'random(2,8)', | |
| attr:{ | |
| cy: 'random(-220, -320)' | |
| }, | |
| stagger: { | |
| each: 0.16, | |
| repeat: -1, | |
| repeatRefresh: false | |
| }, | |
| ease: 'sine.in' | |
| }).seek(100) | |
| let tl2 = gsap.timeline(); | |
| tl2.to('.dots2 .dot', { | |
| duration: 'random(2,5)', | |
| attr:{ | |
| cy: 'random(-220, -320)' | |
| }, | |
| stagger: { | |
| each: 0.16, | |
| repeat: -1, | |
| repeatRefresh: false | |
| }, | |
| ease: 'sine.in' | |
| }).seek(100) | |
| let tl3 = gsap.timeline(); | |
| tl3.to('.dots3 .dot', { | |
| duration: 'random(6,12)', | |
| attr:{ | |
| cy: 'random(-220, -320)' | |
| }, | |
| stagger: { | |
| each: 0.16, | |
| repeat: -1, | |
| repeatRefresh: false | |
| }, | |
| ease: 'sine.in' | |
| }).seek(100) | |
| let tl4 = gsap.timeline(); | |
| tl4.to('.dots4 .dot', { | |
| duration: 'random(3,9)', | |
| attr:{ | |
| cy: 'random(-220, -320)' | |
| }, | |
| stagger: { | |
| each: 0.16, | |
| repeat: -1, | |
| repeatRefresh: false | |
| }, | |
| ease: 'sine.in' | |
| }).seek(100) | |
| gsap.to({}, {ease: e}); | |
| let tl5 = gsap.timeline(); | |
| tl5.to('.dots5 .outsideDot', { | |
| duration: 'random(3,9)', | |
| attr:{ | |
| cy: 'random(-220, -320)', | |
| r: 0 | |
| }, | |
| stagger: { | |
| each: 0.16, | |
| repeat: -1, | |
| repeatRefresh: false | |
| }, | |
| ease: 'power2.in' | |
| }).seek(100) | |
| gsap.to('.outline', { | |
| duration: gsap.utils.wrap([7, 6.1, 5.2]), | |
| svgOrigin: '400 300', | |
| rotation: gsap.utils.wrap([-360, -360]), | |
| ease: 'linear', | |
| stagger: { | |
| each: 1, | |
| repeat: -1 | |
| } | |
| }).seek(200) | |
| //ScrubGSAPTimeline(tl) | |
| //gsap.globalTimeline.timeScale(0.25) |
| <script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/gsap-latest-beta.min.js"></script> | |
| <script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/CustomEase3.min.js"></script> | |
| <script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/CustomWiggle3.min.js"></script> |
| body { | |
| background-color: #FFFCF9; | |
| overflow: hidden; | |
| text-align:center; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| body, | |
| html { | |
| height: 100%; | |
| width: 100%; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| svg { | |
| width: 100%; | |
| height: 100%; | |
| visibility: hidden; | |
| } | |
| /* .dot { | |
| fill: url(#grad); | |
| } */ |