(12 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
− | {{NCTU_Formosa}} | + | {{NCTU_Formosa/test}} |
<html> | <html> | ||
− | + | ||
− | + | <head> | |
− | + | <meta charset="UTF-8"> | |
+ | <title>Home</title> | ||
+ | <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> | ||
+ | <script src="jQueryAssets/jquery-1.11.1.min.js"></script> | ||
+ | <script src="jQueryAssets/jquery.ui-1.10.4.dialog.min.js"></script> | ||
+ | <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" /> | ||
+ | |||
+ | <style> | ||
+ | /* ---- reset ---- */ | ||
+ | canvas{ display: block; vertical-align: bottom; } /* ---- particles.js container ---- */ | ||
+ | #particles-js{ | ||
+ | position:relative; | ||
+ | display: inline-block; | ||
+ | top: 2vw; | ||
+ | margin-left: 0%; | ||
+ | width: 30vw; | ||
+ | height: 30vw; | ||
+ | background-color: rgba(6, 13, 68,0); | ||
+ | background-image: url("https://static.igem.org/mediawiki/2018/6/6e/T--NCTU_Formosa--world2.png"); | ||
+ | background-repeat: no-repeat; | ||
+ | background-size: cover; | ||
+ | background-position: 25% 25%; } /* ---- stats.js ---- */ | ||
+ | #stats, .count-particles{ -webkit-user-select: none; margin-top: 5px; margin-left: 5px; } | ||
+ | #stats{ border-radius: 3px 3px 0 0; overflow: hidden; } | ||
+ | </style> | ||
+ | |||
+ | <style> | ||
+ | |||
+ | @-webkit-keyframes rotation { | ||
+ | 0% {transform: rotate(0deg);} | ||
+ | 25% {transform: rotate(90deg);} | ||
+ | 50% {transform: rotate(180deg);} | ||
+ | 75% {transform: rotate(270deg);} | ||
+ | 100% {transform: rotate(360deg);} | ||
+ | } | ||
+ | |||
+ | @keyframes rotation { | ||
+ | 0% {transform: rotate(0deg);} | ||
+ | 25% {transform: rotate(90deg);} | ||
+ | 50% {transform: rotate(180deg);} | ||
+ | 75% {transform: rotate(270deg);} | ||
+ | 100% {transform: rotate(360deg);} | ||
+ | } | ||
+ | |||
+ | @keyframes subtitle { | ||
+ | 0% {opacity: 0; top: 2vw;} | ||
+ | 30% {opacity: 0; top: 2vw;} | ||
+ | 50% {opacity: 0.4; top: 1vw;} | ||
+ | 75% {opacity: 0.7; top: 0.4vw;} | ||
+ | 100% {opacity: 1; top: 0;} | ||
+ | } | ||
+ | |||
+ | @keyframes subtitle1 { | ||
+ | 0% {opacity: 0; top: 1vw;} | ||
+ | 30% {opacity: 0; top: 1vw;} | ||
+ | 50% {opacity: 0.4; top: 0.4vw;} | ||
+ | 75% {opacity: 0.7; top: 0vw;} | ||
+ | 100% {opacity: 1; top: 0.5;} | ||
+ | } | ||
+ | |||
+ | @keyframes cloud { | ||
+ | 0% {opacity: 0; top: -14vw;} | ||
+ | 15% {opacity: 0; top: -10.5vw;} | ||
+ | 25% {opacity: 0.7; top: -7vw;} | ||
+ | 35% {opacity: 1; top: -3.5vw;} | ||
+ | 44% {opacity: 1; top: 0;} | ||
+ | 48% {opacity: 1; top: -1vw;} | ||
+ | 52% {opacity: 1; top: 0;} | ||
+ | 60% {opacity: 1; top: -1.5vw;} | ||
+ | 67.5% {opacity: 1; top: -3.5vw;} | ||
+ | 75% {opacity: 0.7; top: -7vw;} | ||
+ | 85% {opacity: 0; top: -10.5vw;} | ||
+ | 100% {opacity: 0; top: -14vw;} | ||
+ | } | ||
+ | |||
+ | #globalWrapper{ | ||
+ | padding-bottom: 0 !important; | ||
+ | } | ||
+ | |||
+ | body{ | ||
+ | font-size: 0; | ||
+ | margin: 0; | ||
+ | padding: 0 !important; | ||
+ | width: 100%; | ||
+ | |||
+ | } | ||
+ | |||
+ | .wrapper{ | ||
+ | width: 100%; | ||
+ | background-image: url(https://static.igem.org/mediawiki/2018/b/b0/T--NCTU_Formosa--background2.png); | ||
+ | background-size: cover; | ||
position: relative; | position: relative; | ||
} | } | ||
− | . | + | .cover{ |
width: 100%; | width: 100%; | ||
} | } | ||
− | . | + | |
− | + | .title{ | |
+ | font-size: 7vmin; | ||
+ | margin: 50px; | ||
+ | margin-top: 0px; | ||
+ | text-align: center; | ||
} | } | ||
− | . | + | .title_1{ |
− | + | font-size: 6vmin; | |
+ | width: 75%; | ||
+ | margin: 50px; | ||
+ | margin-top: 100px; | ||
+ | margin-left: 12.5%; | ||
} | } | ||
− | . | + | .title_2{ |
− | + | font-size: 5vmin; | |
− | width: | + | width: 70%; |
− | + | margin: 50px; | |
− | + | margin-left: 15%; | |
} | } | ||
− | . | + | .title_3{ |
− | + | font-size: 3.5vmin; | |
− | width: | + | width: 70%; |
− | + | margin: 50px; | |
− | + | margin-left: 15%; | |
} | } | ||
− | . | + | .text{ |
− | + | font-size: 3vmin; | |
− | width: | + | width: 75%; |
− | left: | + | position: relative; |
− | top: | + | margin-left: 12.5%; |
+ | margin-right: 12.5%; | ||
+ | margin-top: 40px; | ||
+ | margin-bottom: 40px; | ||
+ | text-align: justify; | ||
} | } | ||
− | . | + | .explanation{ |
− | + | font-size: 2.5vmin; | |
− | + | font-weight: bold; | |
− | + | color: #575656; | |
− | + | text-align: center; | |
} | } | ||
− | . | + | .text2{ |
− | + | font-size: 2.5vw; | |
− | + | font-family: Agency FB; | |
− | left: | + | color: white; |
− | + | text-align: left; | |
+ | transform: scaleX(1.3); | ||
+ | width: 55%; | ||
+ | padding-left: 20%; | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | .block{ | |
− | + | display: inline-block; | |
+ | width: 55%; | ||
+ | margin-left: 3%; | ||
+ | vertical-align: top; | ||
+ | position: relative; | ||
+ | top: 6vw; | ||
+ | } | ||
− | + | #drylab{ | |
− | + | top: 10vw; | |
+ | } | ||
+ | #wetlab{ | ||
+ | top: 10vw; | ||
+ | } | ||
− | + | #iot{ | |
+ | top: 13vw; | ||
+ | } | ||
− | + | #entre{ | |
− | + | top: 10vw; | |
− | + | } | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | |||
− | |||
− | |||
+ | .button_1{ | ||
+ | width: auto; | ||
+ | color: #064055; | ||
+ | background-color: #72C6C6; | ||
+ | border-radius: 8px; | ||
+ | font-size: 4vw; | ||
+ | font-family: solaris; | ||
+ | padding-left: 1.5vw; | ||
+ | padding-right: 1.5vw; | ||
+ | margin-top: 3vw; | ||
+ | margin-left: 30%; | ||
+ | transition-duration: 0.3s; | ||
+ | position: relative; | ||
+ | top: 5vw; | ||
+ | } | ||
+ | .button_1:hover{ | ||
+ | color: white; | ||
+ | } | ||
− | + | #description{ | |
− | + | position: relative; | |
− | + | opacity: 0; | |
− | + | margin-left: 3%; | |
+ | margin-top: 5vw; | ||
+ | display: inline-block; | ||
+ | bottom: 0px; | ||
+ | animation-fill-mode: forwards!important; | ||
+ | } | ||
− | + | a{ | |
+ | text-decoration: none!important; | ||
+ | } | ||
+ | p{ | ||
+ | margin: 0; | ||
+ | } | ||
+ | table{ | ||
+ | width: 55%; | ||
+ | border: solid 2px #e7eceb; | ||
+ | text-align: left; | ||
+ | margin: 40px; | ||
+ | margin-left: auto; | ||
+ | margin-right: auto; | ||
+ | padding: 10px; | ||
+ | border-collapse: collapse; | ||
+ | background: #fefefe; | ||
+ | } | ||
+ | tr{ | ||
+ | border: solid 1px #e7eceb; | ||
+ | margin: 15px; | ||
+ | padding: 10px; | ||
+ | } | ||
− | + | td,th{ | |
+ | padding: 10px; | ||
+ | } | ||
+ | caption{ | ||
+ | font-size: 3vmin; | ||
+ | font-weight: bold; | ||
+ | margin-bottom: 10px; | ||
+ | color: #575656; | ||
+ | box-sizing: border-box; | ||
+ | } | ||
+ | thead{ | ||
+ | background: #1182be; | ||
+ | color: #fefefe; | ||
+ | font-size: 3.5vmin; | ||
+ | } | ||
− | + | tbody{ | |
+ | font-size: 3vmin; | ||
+ | } | ||
− | + | .equation{ | |
− | + | font-size: 3vmin; | |
+ | margin: 40px; | ||
+ | text-align: center; | ||
+ | margin-left: auto; | ||
+ | margin-right: auto; | ||
+ | } | ||
+ | .icon{ | ||
+ | width: 20px; | ||
+ | vertical-align: middle; | ||
+ | } | ||
− | + | .pic{ | |
+ | width: 100%; | ||
+ | } | ||
− | + | .procedure{ | |
− | + | width: 100px; | |
− | + | } | |
− | + | ||
− | + | ||
− | + | .curcumin{ | |
+ | width: 30%; | ||
+ | margin-left: 5%; | ||
+ | display: inline-block; | ||
+ | } | ||
− | + | .wetlab{ | |
− | + | width: 100%; | |
− | + | } | |
− | + | .iot{ | |
+ | width: 30%; | ||
+ | margin-left: 2%; | ||
+ | display: inline-block; | ||
+ | margin-top: 6vw; | ||
+ | } | ||
+ | .cloud{ | ||
+ | position: relative; | ||
+ | width: 100%; | ||
+ | z-index: 100!important; | ||
+ | } | ||
+ | .lines{ | ||
+ | position: relative; | ||
+ | width:90%; | ||
+ | margin-left: 4.5%; | ||
+ | margin-top: -0.5vw; | ||
+ | z-index: 1; | ||
+ | -webkit-animation: cloud 6s infinite linear; | ||
+ | animation: cloud 6s infinite linear; | ||
+ | transition-duration: 0.4s; | ||
+ | } | ||
+ | .entre{ | ||
+ | width: 35%; | ||
+ | margin-left: 5%; | ||
+ | display: inline-block; | ||
+ | margin-top: 6vw; | ||
+ | } | ||
+ | .circle{ | ||
+ | width: 30%; | ||
+ | position: relative; | ||
+ | bottom: 10vw; | ||
+ | left: 37%; | ||
+ | margin-bottom: -9vw; | ||
+ | z-index: 2; | ||
+ | transition-duration: 0.4; | ||
+ | cursor: pointer; | ||
+ | } | ||
− | + | .circle:hover{ | |
− | + | -webkit-animation: rotation 6s infinite linear; | |
− | + | animation: rotation 6s infinite linear; | |
− | + | } | |
− | + | ||
− | + | .hand{ | |
− | + | width: 15%; | |
− | + | position: relative; | |
− | + | bottom: 0px; | |
− | + | margin-top: 10vw; | |
+ | margin-left: 13%; | ||
+ | z-index: 1; | ||
+ | display: inline-block; | ||
+ | } | ||
+ | #text2{ | ||
+ | position: relative; | ||
+ | opacity: 0; | ||
+ | animation-fill-mode: forwards!important; | ||
+ | } | ||
− | + | .planb{ | |
− | + | width: 70%; | |
+ | margin-left: 15%; | ||
+ | margin-bottom: 10vw; | ||
+ | margin-top: 5vw; | ||
+ | } | ||
+ | .bov{ | ||
+ | position: absolute; | ||
+ | width: 70%; | ||
+ | top: 1.5vw; | ||
+ | left: 6vw; | ||
+ | } | ||
+ | .bacteriocin{ | ||
+ | position: relative; | ||
+ | width: 37%; | ||
+ | margin-left: 5%; | ||
+ | display: inline-block; | ||
+ | margin-top: 6vw; | ||
+ | } | ||
+ | .earth{ | ||
+ | position:relative; | ||
+ | display: inline-block; | ||
+ | top: 2vw; | ||
+ | margin-left: 0%; | ||
+ | width: 30vw; | ||
+ | height: 30vw; | ||
+ | } | ||
+ | video{ | ||
+ | width: 100%; | ||
+ | } | ||
− | + | </style> | |
− | + | ||
− | + | ||
+ | <!-----------------------------------------------------------------------------> | ||
+ | <script> | ||
+ | </script> | ||
− | < | + | <!-----------------------------------------------------------------------------> |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | <!-- Latex resourse code--> | ||
+ | <script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js" type="text/javascript"> | ||
+ | MathJax.Hub.Config({ | ||
+ | extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"], | ||
+ | jax: ["input/TeX", "output/HTML-CSS"], | ||
+ | tex2jax: { | ||
+ | inlineMath: [ | ||
+ | ['$', '$'], | ||
+ | ["\\(", "\\)"] | ||
+ | ], | ||
+ | displayMath: [ | ||
+ | ['$$', '$$'], | ||
+ | ["\\[", "\\]"] | ||
+ | ], | ||
+ | }, | ||
+ | "HTML-CSS": { | ||
+ | availableFonts: ["TeX"] | ||
+ | } | ||
+ | }); | ||
+ | </script> | ||
− | < | + | <!-----------------------------------------------------------------------------> |
− | + | </head> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | </ | + | |
− | <div class=" | + | <body> |
− | <div class=" | + | <div class="wrapper"> |
− | <div class=" | + | <div class="sec1"> |
+ | <video src="https://static.igem.org/mediawiki/2018/a/a1/T--NCTU_Formosa--Home2.mp4" loop="loop" autoplay="autoplay"></video> | ||
+ | <img src="https://static.igem.org/mediawiki/2018/1/14/T--NCTU_Formosa--Mr.curcumin.png" class="curcumin"> | ||
+ | <div class="block"> | ||
+ | <div class="text2"> | ||
+ | <p> | ||
+ | As the first team to introduce machine learning below the ground, we can do some pretty incredible things... | ||
+ | </p> | ||
+ | </div> | ||
+ | <a href="https://2018.igem.org/Team:NCTU_Formosa/Applied_Design"><span class="button_1">DEsiGn</span></a> | ||
+ | </div> | ||
− | <div class=" | + | <div class="block" id="drylab"> |
− | + | <div class="text2"> | |
− | + | <p> | |
− | + | Regulating soil microbiota, who directly shapes the environment... | |
− | </ | + | </p> |
− | < | + | </div> |
− | < | + | <a href="https://2018.igem.org/Team:NCTU_Formosa/Model"><span class="button_1">Dry lAb</span></a> |
− | + | </div> | |
− | + | <img src="https://static.igem.org/mediawiki/2018/a/a7/T--NCTU_Formosa--earth2.png" alt="" class="earth"> | |
− | + | ||
− | + | <div class="bacteriocin"> | |
− | + | <img src="https://static.igem.org/mediawiki/2018/3/3d/T--NCTU_Formosa--bacterioriocin.png" class="wetlab"> | |
− | + | </div> | |
− | </ | + | <div class="block" id="wetlab"> |
− | + | <div class="text2"> | |
− | + | <p> | |
− | </a> | + | Using bio-stimulators, including our specially selected bacteriocins to manipulate bacterial ratios... |
+ | </p> | ||
+ | </div> | ||
+ | <a href="https://2018.igem.org/Team:NCTU_Formosa/Wet_Lab"><span class="button_1" >WEt lAb</span></a> | ||
+ | </div> | ||
+ | |||
+ | <div class="block" id="iot"> | ||
+ | <div class="text2"> | ||
+ | <p> | ||
+ | Collecting data through IoT system to strengthen prediction accuracy with feedback... | ||
+ | </p> | ||
+ | </div> | ||
+ | <a href="https://2018.igem.org/Team:NCTU_Formosa/Hardware"><span class="button_1" >IOt systEm</span></a> | ||
+ | </div> | ||
+ | <div class="iot"> | ||
+ | <img src="https://static.igem.org/mediawiki/2018/3/32/T--NCTU_Formosa--cloud.png" class="cloud"> | ||
+ | <img src="https://static.igem.org/mediawiki/2018/c/c8/T--NCTU_Formosa--lines2.png" class="lines"> | ||
+ | </div> | ||
+ | |||
+ | <img src="https://static.igem.org/mediawiki/2018/6/6b/T--NCTU_Formosa--Home_Entrepreneurship.png" class="entre"> | ||
+ | <div class="block" id="entre"> | ||
+ | <div class="text2"> | ||
+ | <p> | ||
+ | Integrating our concept with previous designs to benefit the industry and the environment... | ||
+ | </p> | ||
+ | </div> | ||
+ | <a href="https://2018.igem.org/Team:NCTU_Formosa/Entrepreneurship"><span class="button_1" style="margin-left: 14%;">EntrEprEnEurship</span></a> | ||
+ | </div> | ||
+ | |||
+ | <div class="text2" id="text2" style="text-align: center; font-size: 4vw; margin-top: 6vw; margin-bottom: 7vw;"><p>The journey begins here...</p></div> | ||
+ | <img src="https://static.igem.org/mediawiki/2018/5/5a/T--NCTU_Formosa--Home_Circle2.png" class="circle"> | ||
+ | <img src="https://static.igem.org/mediawiki/2018/6/67/T--NCTU_Formosa--Hand.png" class="hand"> | ||
+ | <a href="https://2018.igem.org/Team:NCTU_Formosa/Project/Description" id="description"><span class="button_1">DEscriptiOn</span></a> | ||
</div> | </div> | ||
+ | |||
+ | <!-----------------------------------------------------------------------------> | ||
+ | |||
+ | |||
+ | </div> | ||
+ | </body> | ||
+ | |||
+ | <script> | ||
+ | var Stats = function() { | ||
+ | function h(a) { | ||
+ | c.appendChild(a.dom); | ||
+ | return a | ||
+ | } | ||
+ | |||
+ | function k(a) { | ||
+ | for (var d = 0; d < c.children.length; d++) c.children[d].style.display = d === a ? "block" : "none"; | ||
+ | l = a | ||
+ | } | ||
+ | var l = 0, | ||
+ | c = document.createElement("div"); | ||
+ | c.style.cssText = "position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000"; | ||
+ | c.addEventListener("click", function(a) { | ||
+ | a.preventDefault(); | ||
+ | k(++l % c.children.length) | ||
+ | }, !1); | ||
+ | var g = (performance || Date).now(), | ||
+ | e = g, | ||
+ | a = 0, | ||
+ | r = h(new Stats.Panel("FPS", "#0ff", "#002")), | ||
+ | f = h(new Stats.Panel("MS", "#0f0", "#020")); | ||
+ | if (self.performance && self.performance.memory) var t = h(new Stats.Panel("MB", "#f08", "#201")); | ||
+ | k(0); | ||
+ | return { | ||
+ | REVISION: 16, | ||
+ | dom: c, | ||
+ | addPanel: h, | ||
+ | showPanel: k, | ||
+ | begin: function() { | ||
+ | g = (performance || Date).now() | ||
+ | }, | ||
+ | end: function() { | ||
+ | a++; | ||
+ | var c = (performance || Date).now(); | ||
+ | f.update(c - g, 200); | ||
+ | if (c > e + 1E3 && (r.update(1E3 * a / (c - e), 100), e = c, a = 0, t)) { | ||
+ | var d = performance.memory; | ||
+ | t.update(d.usedJSHeapSize / 1048576, d.jsHeapSizeLimit / 1048576) | ||
+ | } | ||
+ | return c | ||
+ | }, | ||
+ | update: function() { | ||
+ | g = this.end() | ||
+ | }, | ||
+ | domElement: c, | ||
+ | setMode: k | ||
+ | } | ||
+ | }; | ||
+ | Stats.Panel = function(h, k, l) { | ||
+ | var c = Infinity, | ||
+ | g = 0, | ||
+ | e = Math.round, | ||
+ | a = e(window.devicePixelRatio || 1), | ||
+ | r = 80 * a, | ||
+ | f = 48 * a, | ||
+ | t = 3 * a, | ||
+ | u = 2 * a, | ||
+ | d = 3 * a, | ||
+ | m = 15 * a, | ||
+ | n = 74 * a, | ||
+ | p = 30 * a, | ||
+ | q = document.createElement(""); | ||
+ | q.width = r; | ||
+ | q.height = f; | ||
+ | q.style.cssText = "width:80px;height:48px"; | ||
+ | var b = q.getContext("2d"); | ||
+ | b.font = "bold " + 9 * a + "px Helvetica,Arial,sans-serif"; | ||
+ | b.textBaseline = "top"; | ||
+ | b.fillStyle = l; | ||
+ | b.fillRect(0, 0, r, f); | ||
+ | b.fillStyle = k; | ||
+ | b.fillText(h, t, u); | ||
+ | b.fillRect(d, m, n, p); | ||
+ | b.fillStyle = l; | ||
+ | b.globalAlpha = .9; | ||
+ | b.fillRect(d, m, n, p); | ||
+ | return { | ||
+ | dom: q, | ||
+ | update: function(f, | ||
+ | v) { | ||
+ | c = Math.min(c, f); | ||
+ | g = Math.max(g, f); | ||
+ | b.fillStyle = l; | ||
+ | b.globalAlpha = 1; | ||
+ | b.fillRect(0, 0, r, m); | ||
+ | b.fillStyle = k; | ||
+ | b.fillText(e(f) + " " + h + " (" + e(c) + "-" + e(g) + ")", t, u); | ||
+ | b.drawImage(q, d + a, m, n - a, p, d, m, n - a, p); | ||
+ | b.fillRect(d + n - a, m, a, p); | ||
+ | b.fillStyle = l; | ||
+ | b.globalAlpha = .9; | ||
+ | b.fillRect(d + n - a, m, a, e((1 - f / v) * p)) | ||
+ | } | ||
+ | } | ||
+ | }; | ||
+ | "object" === typeof module && (module.exports = Stats); | ||
+ | </script> <!-- stats.js lib --> | ||
+ | |||
+ | <script> | ||
+ | function hexToRgb(e) { | ||
+ | var a = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; | ||
+ | e = e.replace(a, function(e, a, t, i) { | ||
+ | return a + a + t + t + i + i | ||
+ | }); | ||
+ | var t = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e); | ||
+ | return t ? { | ||
+ | r: parseInt(t[1], 16), | ||
+ | g: parseInt(t[2], 16), | ||
+ | b: parseInt(t[3], 16) | ||
+ | } : null | ||
+ | } | ||
+ | |||
+ | function clamp(e, a, t) { | ||
+ | return Math.min(Math.max(e, a), t) | ||
+ | } | ||
+ | |||
+ | function isInArray(e, a) { | ||
+ | return a.indexOf(e) > -1 | ||
+ | } | ||
+ | var pJS = function(e, a) { | ||
+ | var t = document.querySelector("#" + e + " > .particles-js-canvas-el"); | ||
+ | this.pJS = { | ||
+ | canvas: { | ||
+ | el: t, | ||
+ | w: t.offsetWidth, | ||
+ | h: t.offsetHeight | ||
+ | }, | ||
+ | particles: { | ||
+ | number: { | ||
+ | value: 400, | ||
+ | density: { | ||
+ | enable: !0, | ||
+ | value_area: 800 | ||
+ | } | ||
+ | }, | ||
+ | color: { | ||
+ | value: "#fff" | ||
+ | }, | ||
+ | shape: { | ||
+ | type: "circle", | ||
+ | stroke: { | ||
+ | width: 0, | ||
+ | color: "#ff0000" | ||
+ | }, | ||
+ | polygon: { | ||
+ | nb_sides: 5 | ||
+ | }, | ||
+ | image: { | ||
+ | src: "", | ||
+ | width: 100, | ||
+ | height: 100 | ||
+ | } | ||
+ | }, | ||
+ | opacity: { | ||
+ | value: 1, | ||
+ | random: !1, | ||
+ | anim: { | ||
+ | enable: !1, | ||
+ | speed: 2, | ||
+ | opacity_min: 0, | ||
+ | sync: !1 | ||
+ | } | ||
+ | }, | ||
+ | size: { | ||
+ | value: 20, | ||
+ | random: !1, | ||
+ | anim: { | ||
+ | enable: !1, | ||
+ | speed: 20, | ||
+ | size_min: 0, | ||
+ | sync: !1 | ||
+ | } | ||
+ | }, | ||
+ | line_linked: { | ||
+ | enable: !0, | ||
+ | distance: 100, | ||
+ | color: "#fff", | ||
+ | opacity: 1, | ||
+ | width: 1 | ||
+ | }, | ||
+ | move: { | ||
+ | enable: !0, | ||
+ | speed: 2, | ||
+ | direction: "none", | ||
+ | random: !1, | ||
+ | straight: !1, | ||
+ | out_mode: "out", | ||
+ | bounce: !1, | ||
+ | attract: { | ||
+ | enable: !1, | ||
+ | rotateX: 3e3, | ||
+ | rotateY: 3e3 | ||
+ | } | ||
+ | }, | ||
+ | array: [] | ||
+ | }, | ||
+ | interactivity: { | ||
+ | detect_on: "canvas", | ||
+ | events: { | ||
+ | onhover: { | ||
+ | enable: !0, | ||
+ | mode: "grab" | ||
+ | }, | ||
+ | onclick: { | ||
+ | enable: !0, | ||
+ | mode: "push" | ||
+ | }, | ||
+ | resize: !0 | ||
+ | }, | ||
+ | modes: { | ||
+ | grab: { | ||
+ | distance: 100, | ||
+ | line_linked: { | ||
+ | opacity: 1 | ||
+ | } | ||
+ | }, | ||
+ | bubble: { | ||
+ | distance: 200, | ||
+ | size: 80, | ||
+ | duration: .4 | ||
+ | }, | ||
+ | repulse: { | ||
+ | distance: 200, | ||
+ | duration: .4 | ||
+ | }, | ||
+ | push: { | ||
+ | particles_nb: 4 | ||
+ | }, | ||
+ | remove: { | ||
+ | particles_nb: 2 | ||
+ | } | ||
+ | }, | ||
+ | mouse: {} | ||
+ | }, | ||
+ | retina_detect: !1, | ||
+ | fn: { | ||
+ | interact: {}, | ||
+ | modes: {}, | ||
+ | vendors: {} | ||
+ | }, | ||
+ | tmp: {} | ||
+ | }; | ||
+ | var i = this.pJS; | ||
+ | a && Object.deepExtend(i, a), i.tmp.obj = { | ||
+ | size_value: i.particles.size.value, | ||
+ | size_anim_speed: i.particles.size.anim.speed, | ||
+ | move_speed: i.particles.move.speed, | ||
+ | line_linked_distance: i.particles.line_linked.distance, | ||
+ | line_linked_width: i.particles.line_linked.width, | ||
+ | mode_grab_distance: i.interactivity.modes.grab.distance, | ||
+ | mode_bubble_distance: i.interactivity.modes.bubble.distance, | ||
+ | mode_bubble_size: i.interactivity.modes.bubble.size, | ||
+ | mode_repulse_distance: i.interactivity.modes.repulse.distance | ||
+ | }, i.fn.retinaInit = function() { | ||
+ | i.retina_detect && window.devicePixelRatio > 1 ? (i.canvas.pxratio = window.devicePixelRatio, i.tmp.retina = !0) : (i.canvas.pxratio = 1, i.tmp.retina = !1), i.canvas.w = i.canvas.el.offsetWidth * i.canvas.pxratio, i.canvas.h = i.canvas.el.offsetHeight * i.canvas.pxratio, i.particles.size.value = i.tmp.obj.size_value * i.canvas.pxratio, i.particles.size.anim.speed = i.tmp.obj.size_anim_speed * i.canvas.pxratio, i.particles.move.speed = i.tmp.obj.move_speed * i.canvas.pxratio, i.particles.line_linked.distance = i.tmp.obj.line_linked_distance * i.canvas.pxratio, i.interactivity.modes.grab.distance = i.tmp.obj.mode_grab_distance * i.canvas.pxratio, i.interactivity.modes.bubble.distance = i.tmp.obj.mode_bubble_distance * i.canvas.pxratio, i.particles.line_linked.width = i.tmp.obj.line_linked_width * i.canvas.pxratio, i.interactivity.modes.bubble.size = i.tmp.obj.mode_bubble_size * i.canvas.pxratio, i.interactivity.modes.repulse.distance = i.tmp.obj.mode_repulse_distance * i.canvas.pxratio | ||
+ | }, i.fn.canvasInit = function() { | ||
+ | i.canvas.ctx = i.canvas.el.getContext("2d") | ||
+ | }, i.fn.canvasSize = function() { | ||
+ | i.canvas.el.width = i.canvas.w, i.canvas.el.height = i.canvas.h, i && i.interactivity.events.resize && window.addEventListener("resize", function() { | ||
+ | i.canvas.w = i.canvas.el.offsetWidth, i.canvas.h = i.canvas.el.offsetHeight, i.tmp.retina && (i.canvas.w *= i.canvas.pxratio, i.canvas.h *= i.canvas.pxratio), i.canvas.el.width = i.canvas.w, i.canvas.el.height = i.canvas.h, i.particles.move.enable || (i.fn.particlesEmpty(), i.fn.particlesCreate(), i.fn.particlesDraw(), i.fn.vendors.densityAutoParticles()), i.fn.vendors.densityAutoParticles() | ||
+ | }) | ||
+ | }, i.fn.canvasPaint = function() { | ||
+ | i.canvas.ctx.fillRect(0, 0, i.canvas.w, i.canvas.h) | ||
+ | }, i.fn.canvasClear = function() { | ||
+ | i.canvas.ctx.clearRect(0, 0, i.canvas.w, i.canvas.h) | ||
+ | }, i.fn.particle = function(e, a, t) { | ||
+ | if (this.radius = (i.particles.size.random ? Math.random() : 1) * i.particles.size.value, i.particles.size.anim.enable && (this.size_status = !1, this.vs = i.particles.size.anim.speed / 100, i.particles.size.anim.sync || (this.vs = this.vs * Math.random())), this.x = t ? t.x : Math.random() * i.canvas.w, this.y = t ? t.y : Math.random() * i.canvas.h, this.x > i.canvas.w - 2 * this.radius ? this.x = this.x - this.radius : this.x < 2 * this.radius && (this.x = this.x + this.radius), this.y > i.canvas.h - 2 * this.radius ? this.y = this.y - this.radius : this.y < 2 * this.radius && (this.y = this.y + this.radius), i.particles.move.bounce && i.fn.vendors.checkOverlap(this, t), this.color = {}, "object" == typeof e.value) | ||
+ | if (e.value instanceof Array) { | ||
+ | var s = e.value[Math.floor(Math.random() * i.particles.color.value.length)]; | ||
+ | this.color.rgb = hexToRgb(s) | ||
+ | } else void 0 != e.value.r && void 0 != e.value.g && void 0 != e.value.b && (this.color.rgb = { | ||
+ | r: e.value.r, | ||
+ | g: e.value.g, | ||
+ | b: e.value.b | ||
+ | }), void 0 != e.value.h && void 0 != e.value.s && void 0 != e.value.l && (this.color.hsl = { | ||
+ | h: e.value.h, | ||
+ | s: e.value.s, | ||
+ | l: e.value.l | ||
+ | }); | ||
+ | else "random" == e.value ? this.color.rgb = { | ||
+ | r: Math.floor(256 * Math.random()) + 0, | ||
+ | g: Math.floor(256 * Math.random()) + 0, | ||
+ | b: Math.floor(256 * Math.random()) + 0 | ||
+ | } : "string" == typeof e.value && (this.color = e, this.color.rgb = hexToRgb(this.color.value)); | ||
+ | this.opacity = (i.particles.opacity.random ? Math.random() : 1) * i.particles.opacity.value, i.particles.opacity.anim.enable && (this.opacity_status = !1, this.vo = i.particles.opacity.anim.speed / 100, i.particles.opacity.anim.sync || (this.vo = this.vo * Math.random())); | ||
+ | var n = {}; | ||
+ | switch (i.particles.move.direction) { | ||
+ | case "top": | ||
+ | n = { | ||
+ | x: 0, | ||
+ | y: -1 | ||
+ | }; | ||
+ | break; | ||
+ | case "top-right": | ||
+ | n = { | ||
+ | x: .5, | ||
+ | y: -.5 | ||
+ | }; | ||
+ | break; | ||
+ | case "right": | ||
+ | n = { | ||
+ | x: 1, | ||
+ | y: -0 | ||
+ | }; | ||
+ | break; | ||
+ | case "bottom-right": | ||
+ | n = { | ||
+ | x: .5, | ||
+ | y: .5 | ||
+ | }; | ||
+ | break; | ||
+ | case "bottom": | ||
+ | n = { | ||
+ | x: 0, | ||
+ | y: 1 | ||
+ | }; | ||
+ | break; | ||
+ | case "bottom-left": | ||
+ | n = { | ||
+ | x: -.5, | ||
+ | y: 1 | ||
+ | }; | ||
+ | break; | ||
+ | case "left": | ||
+ | n = { | ||
+ | x: -1, | ||
+ | y: 0 | ||
+ | }; | ||
+ | break; | ||
+ | case "top-left": | ||
+ | n = { | ||
+ | x: -.5, | ||
+ | y: -.5 | ||
+ | }; | ||
+ | break; | ||
+ | default: | ||
+ | n = { | ||
+ | x: 0, | ||
+ | y: 0 | ||
+ | } | ||
+ | } | ||
+ | i.particles.move.straight ? (this.vx = n.x, this.vy = n.y, i.particles.move.random && (this.vx = this.vx * Math.random(), this.vy = this.vy * Math.random())) : (this.vx = n.x + Math.random() - .5, this.vy = n.y + Math.random() - .5), this.vx_i = this.vx, this.vy_i = this.vy; | ||
+ | var r = i.particles.shape.type; | ||
+ | if ("object" == typeof r) { | ||
+ | if (r instanceof Array) { | ||
+ | var c = r[Math.floor(Math.random() * r.length)]; | ||
+ | this.shape = c | ||
+ | } | ||
+ | } else this.shape = r; | ||
+ | if ("image" == this.shape) { | ||
+ | var o = i.particles.shape; | ||
+ | this.img = { | ||
+ | src: o.image.src, | ||
+ | ratio: o.image.width / o.image.height | ||
+ | }, this.img.ratio || (this.img.ratio = 1), "svg" == i.tmp.img_type && void 0 != i.tmp.source_svg && (i.fn.vendors.createSvgImg(this), i.tmp.pushing && (this.img.loaded = !1)) | ||
+ | } | ||
+ | }, i.fn.particle.prototype.draw = function() { | ||
+ | function e() { | ||
+ | i.canvas.ctx.drawImage(r, a.x - t, a.y - t, 2 * t, 2 * t / a.img.ratio) | ||
+ | } | ||
+ | var a = this; | ||
+ | if (void 0 != a.radius_bubble) var t = a.radius_bubble; | ||
+ | else var t = a.radius; | ||
+ | if (void 0 != a.opacity_bubble) var s = a.opacity_bubble; | ||
+ | else var s = a.opacity; | ||
+ | if (a.color.rgb) var n = "rgba(" + a.color.rgb.r + "," + a.color.rgb.g + "," + a.color.rgb.b + "," + s + ")"; | ||
+ | else var n = "hsla(" + a.color.hsl.h + "," + a.color.hsl.s + "%," + a.color.hsl.l + "%," + s + ")"; | ||
+ | switch (i.canvas.ctx.fillStyle = n, i.canvas.ctx.beginPath(), a.shape) { | ||
+ | case "circle": | ||
+ | i.canvas.ctx.arc(a.x, a.y, t, 0, 2 * Math.PI, !1); | ||
+ | break; | ||
+ | case "edge": | ||
+ | i.canvas.ctx.rect(a.x - t, a.y - t, 2 * t, 2 * t); | ||
+ | break; | ||
+ | case "triangle": | ||
+ | i.fn.vendors.drawShape(i.canvas.ctx, a.x - t, a.y + t / 1.66, 2 * t, 3, 2); | ||
+ | break; | ||
+ | case "polygon": | ||
+ | i.fn.vendors.drawShape(i.canvas.ctx, a.x - t / (i.particles.shape.polygon.nb_sides / 3.5), a.y - t / .76, 2.66 * t / (i.particles.shape.polygon.nb_sides / 3), i.particles.shape.polygon.nb_sides, 1); | ||
+ | break; | ||
+ | case "star": | ||
+ | i.fn.vendors.drawShape(i.canvas.ctx, a.x - 2 * t / (i.particles.shape.polygon.nb_sides / 4), a.y - t / 1.52, 2 * t * 2.66 / (i.particles.shape.polygon.nb_sides / 3), i.particles.shape.polygon.nb_sides, 2); | ||
+ | break; | ||
+ | case "image": | ||
+ | if ("svg" == i.tmp.img_type) var r = a.img.obj; | ||
+ | else var r = i.tmp.img_obj; | ||
+ | r && e() | ||
+ | } | ||
+ | i.canvas.ctx.closePath(), i.particles.shape.stroke.width > 0 && (i.canvas.ctx.strokeStyle = i.particles.shape.stroke.color, i.canvas.ctx.lineWidth = i.particles.shape.stroke.width, i.canvas.ctx.stroke()), i.canvas.ctx.fill() | ||
+ | }, i.fn.particlesCreate = function() { | ||
+ | for (var e = 0; e < i.particles.number.value; e++) i.particles.array.push(new i.fn.particle(i.particles.color, i.particles.opacity.value)) | ||
+ | }, i.fn.particlesUpdate = function() { | ||
+ | for (var e = 0; e < i.particles.array.length; e++) { | ||
+ | var a = i.particles.array[e]; | ||
+ | if (i.particles.move.enable) { | ||
+ | var t = i.particles.move.speed / 2; | ||
+ | a.x += a.vx * t, a.y += a.vy * t | ||
+ | } | ||
+ | if (i.particles.opacity.anim.enable && (1 == a.opacity_status ? (a.opacity >= i.particles.opacity.value && (a.opacity_status = !1), a.opacity += a.vo) : (a.opacity <= i.particles.opacity.anim.opacity_min && (a.opacity_status = !0), a.opacity -= a.vo), a.opacity < 0 && (a.opacity = 0)), i.particles.size.anim.enable && (1 == a.size_status ? (a.radius >= i.particles.size.value && (a.size_status = !1), a.radius += a.vs) : (a.radius <= i.particles.size.anim.size_min && (a.size_status = !0), a.radius -= a.vs), a.radius < 0 && (a.radius = 0)), "bounce" == i.particles.move.out_mode) var s = { | ||
+ | x_left: a.radius, | ||
+ | x_right: i.canvas.w, | ||
+ | y_top: a.radius, | ||
+ | y_bottom: i.canvas.h | ||
+ | }; | ||
+ | else var s = { | ||
+ | x_left: -a.radius, | ||
+ | x_right: i.canvas.w + a.radius, | ||
+ | y_top: -a.radius, | ||
+ | y_bottom: i.canvas.h + a.radius | ||
+ | }; | ||
+ | switch (a.x - a.radius > i.canvas.w ? (a.x = s.x_left, a.y = Math.random() * i.canvas.h) : a.x + a.radius < 0 && (a.x = s.x_right, a.y = Math.random() * i.canvas.h), a.y - a.radius > i.canvas.h ? (a.y = s.y_top, a.x = Math.random() * i.canvas.w) : a.y + a.radius < 0 && (a.y = s.y_bottom, a.x = Math.random() * i.canvas.w), i.particles.move.out_mode) { | ||
+ | case "bounce": | ||
+ | a.x + a.radius > i.canvas.w ? a.vx = -a.vx : a.x - a.radius < 0 && (a.vx = -a.vx), a.y + a.radius > i.canvas.h ? a.vy = -a.vy : a.y - a.radius < 0 && (a.vy = -a.vy) | ||
+ | } | ||
+ | if (isInArray("grab", i.interactivity.events.onhover.mode) && i.fn.modes.grabParticle(a), (isInArray("bubble", i.interactivity.events.onhover.mode) || isInArray("bubble", i.interactivity.events.onclick.mode)) && i.fn.modes.bubbleParticle(a), (isInArray("repulse", i.interactivity.events.onhover.mode) || isInArray("repulse", i.interactivity.events.onclick.mode)) && i.fn.modes.repulseParticle(a), i.particles.line_linked.enable || i.particles.move.attract.enable) | ||
+ | for (var n = e + 1; n < i.particles.array.length; n++) { | ||
+ | var r = i.particles.array[n]; | ||
+ | i.particles.line_linked.enable && i.fn.interact.linkParticles(a, r), i.particles.move.attract.enable && i.fn.interact.attractParticles(a, r), i.particles.move.bounce && i.fn.interact.bounceParticles(a, r) | ||
+ | } | ||
+ | } | ||
+ | }, i.fn.particlesDraw = function() { | ||
+ | i.canvas.ctx.clearRect(0, 0, i.canvas.w, i.canvas.h), i.fn.particlesUpdate(); | ||
+ | for (var e = 0; e < i.particles.array.length; e++) { | ||
+ | var a = i.particles.array[e]; | ||
+ | a.draw() | ||
+ | } | ||
+ | }, i.fn.particlesEmpty = function() { | ||
+ | i.particles.array = [] | ||
+ | }, i.fn.particlesRefresh = function() { | ||
+ | cancelRequestAnimFrame(i.fn.checkAnimFrame), cancelRequestAnimFrame(i.fn.drawAnimFrame), i.tmp.source_svg = void 0, i.tmp.img_obj = void 0, i.tmp.count_svg = 0, i.fn.particlesEmpty(), i.fn.canvasClear(), i.fn.vendors.start() | ||
+ | }, i.fn.interact.linkParticles = function(e, a) { | ||
+ | var t = e.x - a.x, | ||
+ | s = e.y - a.y, | ||
+ | n = Math.sqrt(t * t + s * s); | ||
+ | if (n <= i.particles.line_linked.distance) { | ||
+ | var r = i.particles.line_linked.opacity - n / (1 / i.particles.line_linked.opacity) / i.particles.line_linked.distance; | ||
+ | if (r > 0) { | ||
+ | var c = i.particles.line_linked.color_rgb_line; | ||
+ | i.canvas.ctx.strokeStyle = "rgba(" + c.r + "," + c.g + "," + c.b + "," + r + ")", i.canvas.ctx.lineWidth = i.particles.line_linked.width, i.canvas.ctx.beginPath(), i.canvas.ctx.moveTo(e.x, e.y), i.canvas.ctx.lineTo(a.x, a.y), i.canvas.ctx.stroke(), i.canvas.ctx.closePath() | ||
+ | } | ||
+ | } | ||
+ | }, i.fn.interact.attractParticles = function(e, a) { | ||
+ | var t = e.x - a.x, | ||
+ | s = e.y - a.y, | ||
+ | n = Math.sqrt(t * t + s * s); | ||
+ | if (n <= i.particles.line_linked.distance) { | ||
+ | var r = t / (1e3 * i.particles.move.attract.rotateX), | ||
+ | c = s / (1e3 * i.particles.move.attract.rotateY); | ||
+ | e.vx -= r, e.vy -= c, a.vx += r, a.vy += c | ||
+ | } | ||
+ | }, i.fn.interact.bounceParticles = function(e, a) { | ||
+ | var t = e.x - a.x, | ||
+ | i = e.y - a.y, | ||
+ | s = Math.sqrt(t * t + i * i), | ||
+ | n = e.radius + a.radius; | ||
+ | n >= s && (e.vx = -e.vx, e.vy = -e.vy, a.vx = -a.vx, a.vy = -a.vy) | ||
+ | }, i.fn.modes.pushParticles = function(e, a) { | ||
+ | i.tmp.pushing = !0; | ||
+ | for (var t = 0; e > t; t++) i.particles.array.push(new i.fn.particle(i.particles.color, i.particles.opacity.value, { | ||
+ | x: a ? a.pos_x : Math.random() * i.canvas.w, | ||
+ | y: a ? a.pos_y : Math.random() * i.canvas.h | ||
+ | })), t == e - 1 && (i.particles.move.enable || i.fn.particlesDraw(), i.tmp.pushing = !1) | ||
+ | }, i.fn.modes.removeParticles = function(e) { | ||
+ | i.particles.array.splice(0, e), i.particles.move.enable || i.fn.particlesDraw() | ||
+ | }, i.fn.modes.bubbleParticle = function(e) { | ||
+ | function a() { | ||
+ | e.opacity_bubble = e.opacity, e.radius_bubble = e.radius | ||
+ | } | ||
+ | |||
+ | function t(a, t, s, n, c) { | ||
+ | if (a != t) | ||
+ | if (i.tmp.bubble_duration_end) { | ||
+ | if (void 0 != s) { | ||
+ | var o = n - p * (n - a) / i.interactivity.modes.bubble.duration, | ||
+ | l = a - o; | ||
+ | d = a + l, "size" == c && (e.radius_bubble = d), "opacity" == c && (e.opacity_bubble = d) | ||
+ | } | ||
+ | } else if (r <= i.interactivity.modes.bubble.distance) { | ||
+ | if (void 0 != s) var v = s; | ||
+ | else var v = n; | ||
+ | if (v != a) { | ||
+ | var d = n - p * (n - a) / i.interactivity.modes.bubble.duration; | ||
+ | "size" == c && (e.radius_bubble = d), "opacity" == c && (e.opacity_bubble = d) | ||
+ | } | ||
+ | } else "size" == c && (e.radius_bubble = void 0), "opacity" == c && (e.opacity_bubble = void 0) | ||
+ | } | ||
+ | if (i.interactivity.events.onhover.enable && isInArray("bubble", i.interactivity.events.onhover.mode)) { | ||
+ | var s = e.x - i.interactivity.mouse.pos_x, | ||
+ | n = e.y - i.interactivity.mouse.pos_y, | ||
+ | r = Math.sqrt(s * s + n * n), | ||
+ | c = 1 - r / i.interactivity.modes.bubble.distance; | ||
+ | if (r <= i.interactivity.modes.bubble.distance) { | ||
+ | if (c >= 0 && "mousemove" == i.interactivity.status) { | ||
+ | if (i.interactivity.modes.bubble.size != i.particles.size.value) | ||
+ | if (i.interactivity.modes.bubble.size > i.particles.size.value) { | ||
+ | var o = e.radius + i.interactivity.modes.bubble.size * c; | ||
+ | o >= 0 && (e.radius_bubble = o) | ||
+ | } else { | ||
+ | var l = e.radius - i.interactivity.modes.bubble.size, | ||
+ | o = e.radius - l * c; | ||
+ | o > 0 ? e.radius_bubble = o : e.radius_bubble = 0 | ||
+ | } if (i.interactivity.modes.bubble.opacity != i.particles.opacity.value) | ||
+ | if (i.interactivity.modes.bubble.opacity > i.particles.opacity.value) { | ||
+ | var v = i.interactivity.modes.bubble.opacity * c; | ||
+ | v > e.opacity && v <= i.interactivity.modes.bubble.opacity && (e.opacity_bubble = v) | ||
+ | } else { | ||
+ | var v = e.opacity - (i.particles.opacity.value - i.interactivity.modes.bubble.opacity) * c; | ||
+ | v < e.opacity && v >= i.interactivity.modes.bubble.opacity && (e.opacity_bubble = v) | ||
+ | } | ||
+ | } | ||
+ | } else a(); | ||
+ | "mouseleave" == i.interactivity.status && a() | ||
+ | } else if (i.interactivity.events.onclick.enable && isInArray("bubble", i.interactivity.events.onclick.mode)) { | ||
+ | if (i.tmp.bubble_clicking) { | ||
+ | var s = e.x - i.interactivity.mouse.click_pos_x, | ||
+ | n = e.y - i.interactivity.mouse.click_pos_y, | ||
+ | r = Math.sqrt(s * s + n * n), | ||
+ | p = ((new Date).getTime() - i.interactivity.mouse.click_time) / 1e3; | ||
+ | p > i.interactivity.modes.bubble.duration && (i.tmp.bubble_duration_end = !0), p > 2 * i.interactivity.modes.bubble.duration && (i.tmp.bubble_clicking = !1, i.tmp.bubble_duration_end = !1) | ||
+ | } | ||
+ | i.tmp.bubble_clicking && (t(i.interactivity.modes.bubble.size, i.particles.size.value, e.radius_bubble, e.radius, "size"), t(i.interactivity.modes.bubble.opacity, i.particles.opacity.value, e.opacity_bubble, e.opacity, "opacity")) | ||
+ | } | ||
+ | }, i.fn.modes.repulseParticle = function(e) { | ||
+ | function a() { | ||
+ | var a = Math.atan2(d, p); | ||
+ | if (e.vx = u * Math.cos(a), e.vy = u * Math.sin(a), "bounce" == i.particles.move.out_mode) { | ||
+ | var t = { | ||
+ | x: e.x + e.vx, | ||
+ | y: e.y + e.vy | ||
+ | }; | ||
+ | t.x + e.radius > i.canvas.w ? e.vx = -e.vx : t.x - e.radius < 0 && (e.vx = -e.vx), t.y + e.radius > i.canvas.h ? e.vy = -e.vy : t.y - e.radius < 0 && (e.vy = -e.vy) | ||
+ | } | ||
+ | } | ||
+ | if (i.interactivity.events.onhover.enable && isInArray("repulse", i.interactivity.events.onhover.mode) && "mousemove" == i.interactivity.status) { | ||
+ | var t = e.x - i.interactivity.mouse.pos_x, | ||
+ | s = e.y - i.interactivity.mouse.pos_y, | ||
+ | n = Math.sqrt(t * t + s * s), | ||
+ | r = { | ||
+ | x: t / n, | ||
+ | y: s / n | ||
+ | }, | ||
+ | c = i.interactivity.modes.repulse.distance, | ||
+ | o = 100, | ||
+ | l = clamp(1 / c * (-1 * Math.pow(n / c, 2) + 1) * c * o, 0, 50), | ||
+ | v = { | ||
+ | x: e.x + r.x * l, | ||
+ | y: e.y + r.y * l | ||
+ | }; | ||
+ | "bounce" == i.particles.move.out_mode ? (v.x - e.radius > 0 && v.x + e.radius < i.canvas.w && (e.x = v.x), v.y - e.radius > 0 && v.y + e.radius < i.canvas.h && (e.y = v.y)) : (e.x = v.x, e.y = v.y) | ||
+ | } else if (i.interactivity.events.onclick.enable && isInArray("repulse", i.interactivity.events.onclick.mode)) | ||
+ | if (i.tmp.repulse_finish || (i.tmp.repulse_count++, i.tmp.repulse_count == i.particles.array.length && (i.tmp.repulse_finish = !0)), i.tmp.repulse_clicking) { | ||
+ | var c = Math.pow(i.interactivity.modes.repulse.distance / 6, 3), | ||
+ | p = i.interactivity.mouse.click_pos_x - e.x, | ||
+ | d = i.interactivity.mouse.click_pos_y - e.y, | ||
+ | m = p * p + d * d, | ||
+ | u = -c / m * 1; | ||
+ | c >= m && a() | ||
+ | } else 0 == i.tmp.repulse_clicking && (e.vx = e.vx_i, e.vy = e.vy_i) | ||
+ | }, i.fn.modes.grabParticle = function(e) { | ||
+ | if (i.interactivity.events.onhover.enable && "mousemove" == i.interactivity.status) { | ||
+ | var a = e.x - i.interactivity.mouse.pos_x, | ||
+ | t = e.y - i.interactivity.mouse.pos_y, | ||
+ | s = Math.sqrt(a * a + t * t); | ||
+ | if (s <= i.interactivity.modes.grab.distance) { | ||
+ | var n = i.interactivity.modes.grab.line_linked.opacity - s / (1 / i.interactivity.modes.grab.line_linked.opacity) / i.interactivity.modes.grab.distance; | ||
+ | if (n > 0) { | ||
+ | var r = i.particles.line_linked.color_rgb_line; | ||
+ | i.canvas.ctx.strokeStyle = "rgba(" + r.r + "," + r.g + "," + r.b + "," + n + ")", i.canvas.ctx.lineWidth = i.particles.line_linked.width, i.canvas.ctx.beginPath(), i.canvas.ctx.moveTo(e.x, e.y), i.canvas.ctx.lineTo(i.interactivity.mouse.pos_x, i.interactivity.mouse.pos_y), i.canvas.ctx.stroke(), i.canvas.ctx.closePath() | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | }, i.fn.vendors.eventsListeners = function() { | ||
+ | "window" == i.interactivity.detect_on ? i.interactivity.el = window : i.interactivity.el = i.canvas.el, (i.interactivity.events.onhover.enable || i.interactivity.events.onclick.enable) && (i.interactivity.el.addEventListener("mousemove", function(e) { | ||
+ | if (i.interactivity.el == window) var a = e.clientX, | ||
+ | t = e.clientY; | ||
+ | else var a = e.offsetX || e.clientX, | ||
+ | t = e.offsetY || e.clientY; | ||
+ | i.interactivity.mouse.pos_x = a, i.interactivity.mouse.pos_y = t, i.tmp.retina && (i.interactivity.mouse.pos_x *= i.canvas.pxratio, i.interactivity.mouse.pos_y *= i.canvas.pxratio), i.interactivity.status = "mousemove" | ||
+ | }), i.interactivity.el.addEventListener("mouseleave", function(e) { | ||
+ | i.interactivity.mouse.pos_x = null, i.interactivity.mouse.pos_y = null, i.interactivity.status = "mouseleave" | ||
+ | })), i.interactivity.events.onclick.enable && i.interactivity.el.addEventListener("click", function() { | ||
+ | if (i.interactivity.mouse.click_pos_x = i.interactivity.mouse.pos_x, i.interactivity.mouse.click_pos_y = i.interactivity.mouse.pos_y, i.interactivity.mouse.click_time = (new Date).getTime(), i.interactivity.events.onclick.enable) switch (i.interactivity.events.onclick.mode) { | ||
+ | case "push": | ||
+ | i.particles.move.enable ? i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb, i.interactivity.mouse) : 1 == i.interactivity.modes.push.particles_nb ? i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb, i.interactivity.mouse) : i.interactivity.modes.push.particles_nb > 1 && i.fn.modes.pushParticles(i.interactivity.modes.push.particles_nb); | ||
+ | break; | ||
+ | case "remove": | ||
+ | i.fn.modes.removeParticles(i.interactivity.modes.remove.particles_nb); | ||
+ | break; | ||
+ | case "bubble": | ||
+ | i.tmp.bubble_clicking = !0; | ||
+ | break; | ||
+ | case "repulse": | ||
+ | i.tmp.repulse_clicking = !0, i.tmp.repulse_count = 0, i.tmp.repulse_finish = !1, setTimeout(function() { | ||
+ | i.tmp.repulse_clicking = !1 | ||
+ | }, 1e3 * i.interactivity.modes.repulse.duration) | ||
+ | } | ||
+ | }) | ||
+ | }, i.fn.vendors.densityAutoParticles = function() { | ||
+ | if (i.particles.number.density.enable) { | ||
+ | var e = i.canvas.el.width * i.canvas.el.height / 1e3; | ||
+ | i.tmp.retina && (e /= 2 * i.canvas.pxratio); | ||
+ | var a = e * i.particles.number.value / i.particles.number.density.value_area, | ||
+ | t = i.particles.array.length - a; | ||
+ | 0 > t ? i.fn.modes.pushParticles(Math.abs(t)) : i.fn.modes.removeParticles(t) | ||
+ | } | ||
+ | }, i.fn.vendors.checkOverlap = function(e, a) { | ||
+ | for (var t = 0; t < i.particles.array.length; t++) { | ||
+ | var s = i.particles.array[t], | ||
+ | n = e.x - s.x, | ||
+ | r = e.y - s.y, | ||
+ | c = Math.sqrt(n * n + r * r); | ||
+ | c <= e.radius + s.radius && (e.x = a ? a.x : Math.random() * i.canvas.w, e.y = a ? a.y : Math.random() * i.canvas.h, i.fn.vendors.checkOverlap(e)) | ||
+ | } | ||
+ | }, i.fn.vendors.createSvgImg = function(e) { | ||
+ | var a = i.tmp.source_svg, | ||
+ | t = /#([0-9A-F]{3,6})/gi, | ||
+ | s = a.replace(t, function(a, t, i, s) { | ||
+ | if (e.color.rgb) var n = "rgba(" + e.color.rgb.r + "," + e.color.rgb.g + "," + e.color.rgb.b + "," + e.opacity + ")"; | ||
+ | else var n = "hsla(" + e.color.hsl.h + "," + e.color.hsl.s + "%," + e.color.hsl.l + "%," + e.opacity + ")"; | ||
+ | return n | ||
+ | }), | ||
+ | n = new Blob([s], { | ||
+ | type: "image/svg+xml;charset=utf-8" | ||
+ | }), | ||
+ | r = window.URL || window.webkitURL || window, | ||
+ | c = r.createObjectURL(n), | ||
+ | o = new Image; | ||
+ | o.addEventListener("load", function() { | ||
+ | e.img.obj = o, e.img.loaded = !0, r.revokeObjectURL(c), i.tmp.count_svg++ | ||
+ | }), o.src = c | ||
+ | }, i.fn.vendors.destroypJS = function() { | ||
+ | cancelAnimationFrame(i.fn.drawAnimFrame), t.remove(), pJSDom = null | ||
+ | }, i.fn.vendors.drawShape = function(e, a, t, i, s, n) { | ||
+ | var r = s * n, | ||
+ | c = s / n, | ||
+ | o = 180 * (c - 2) / c, | ||
+ | l = Math.PI - Math.PI * o / 180; | ||
+ | e.save(), e.beginPath(), e.translate(a, t), e.moveTo(0, 0); | ||
+ | for (var v = 0; r > v; v++) e.lineTo(i, 0), e.translate(i, 0), e.rotate(l); | ||
+ | e.fill(), e.restore() | ||
+ | }, i.fn.vendors.exportImg = function() { | ||
+ | window.open(i.canvas.el.toDataURL("image/png"), "_blank") | ||
+ | }, i.fn.vendors.loadImg = function(e) { | ||
+ | if (i.tmp.img_error = void 0, "" != i.particles.shape.image.src) | ||
+ | if ("svg" == e) { | ||
+ | var a = new XMLHttpRequest; | ||
+ | a.open("GET", i.particles.shape.image.src), a.onreadystatechange = function(e) { | ||
+ | 4 == a.readyState && (200 == a.status ? (i.tmp.source_svg = e.currentTarget.response, i.fn.vendors.checkBeforeDraw()) : (console.log("Error pJS - Image not found"), i.tmp.img_error = !0)) | ||
+ | }, a.send() | ||
+ | } else { | ||
+ | var t = new Image; | ||
+ | t.addEventListener("load", function() { | ||
+ | i.tmp.img_obj = t, i.fn.vendors.checkBeforeDraw() | ||
+ | }), t.src = i.particles.shape.image.src | ||
+ | } | ||
+ | else console.log("Error pJS - No image.src"), i.tmp.img_error = !0 | ||
+ | }, i.fn.vendors.draw = function() { | ||
+ | "image" == i.particles.shape.type ? "svg" == i.tmp.img_type ? i.tmp.count_svg >= i.particles.number.value ? (i.fn.particlesDraw(), i.particles.move.enable ? i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw) : cancelRequestAnimFrame(i.fn.drawAnimFrame)) : i.tmp.img_error || (i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw)) : void 0 != i.tmp.img_obj ? (i.fn.particlesDraw(), i.particles.move.enable ? i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw) : cancelRequestAnimFrame(i.fn.drawAnimFrame)) : i.tmp.img_error || (i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw)) : (i.fn.particlesDraw(), i.particles.move.enable ? i.fn.drawAnimFrame = requestAnimFrame(i.fn.vendors.draw) : cancelRequestAnimFrame(i.fn.drawAnimFrame)) | ||
+ | }, i.fn.vendors.checkBeforeDraw = function() { | ||
+ | "image" == i.particles.shape.type ? "svg" == i.tmp.img_type && void 0 == i.tmp.source_svg ? i.tmp.checkAnimFrame = requestAnimFrame(check) : (cancelRequestAnimFrame(i.tmp.checkAnimFrame), i.tmp.img_error || (i.fn.vendors.init(), i.fn.vendors.draw())) : (i.fn.vendors.init(), i.fn.vendors.draw()) | ||
+ | }, i.fn.vendors.init = function() { | ||
+ | i.fn.retinaInit(), i.fn.canvasInit(), i.fn.canvasSize(), i.fn.canvasPaint(), i.fn.particlesCreate(), i.fn.vendors.densityAutoParticles(), i.particles.line_linked.color_rgb_line = hexToRgb(i.particles.line_linked.color) | ||
+ | }, i.fn.vendors.start = function() { | ||
+ | isInArray("image", i.particles.shape.type) ? (i.tmp.img_type = i.particles.shape.image.src.substr(i.particles.shape.image.src.length - 3), i.fn.vendors.loadImg(i.tmp.img_type)) : i.fn.vendors.checkBeforeDraw() | ||
+ | }, i.fn.vendors.eventsListeners(), i.fn.vendors.start() | ||
+ | }; | ||
+ | Object.deepExtend = function(e, a) { | ||
+ | for (var t in a) a[t] && a[t].constructor && a[t].constructor === Object ? (e[t] = e[t] || {}, arguments.callee(e[t], a[t])) : e[t] = a[t]; | ||
+ | return e | ||
+ | }, window.requestAnimFrame = function() { | ||
+ | return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(e) { | ||
+ | window.setTimeout(e, 1e3 / 60) | ||
+ | } | ||
+ | }(), window.cancelRequestAnimFrame = function() { | ||
+ | return window.cancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || clearTimeout | ||
+ | }(), window.pJSDom = [], window.particlesJS = function(e, a) { | ||
+ | "string" != typeof e && (a = e, e = "particles-js"), e || (e = "particles-js"); | ||
+ | var t = document.getElementById(e), | ||
+ | i = "particles-js-canvas-el", | ||
+ | s = t.getElementsByClassName(i); | ||
+ | if (s.length) | ||
+ | for (; s.length > 0;) t.removeChild(s[0]); | ||
+ | var n = document.createElement("canvas"); | ||
+ | n.className = i, n.style.width = "100%", n.style.height = "100%"; | ||
+ | var r = document.getElementById(e).appendChild(n); | ||
+ | null != r && pJSDom.push(new pJS(e, a)) | ||
+ | }, window.particlesJS.load = function(e, a, t) { | ||
+ | var i = new XMLHttpRequest; | ||
+ | i.open("GET", a), i.onreadystatechange = function(a) { | ||
+ | if (4 == i.readyState) | ||
+ | if (200 == i.status) { | ||
+ | var s = JSON.parse(a.currentTarget.response); | ||
+ | window.particlesJS(e, s), t && t() | ||
+ | } else console.log("Error pJS - XMLHttpRequest status: " + i.status), console.log("Error pJS - File config not found") | ||
+ | }, i.send() | ||
+ | }; | ||
+ | </script> | ||
+ | <script> | ||
+ | particlesJS("particles-js", {"particles":{"number":{"value":101,"density":{"enable":true,"value_area":820.2189465597543}},"color":{"value":"#ffffff"},"shape":{"type":"circle","stroke":{"width":0,"color":"#000000"},"polygon":{"nb_sides":5},"image":{"src":"","width":100,"height":100}},"opacity":{"value":1,"random":true,"anim":{"enable":false,"speed":1,"opacity_min":0.1,"sync":false}},"size":{"value":8.002432739552825,"random":true,"anim":{"enable":false,"speed":30,"size_min":0.1,"sync":false}},"line_linked":{"enable":true,"distance":125,"color":"#ffffff","opacity":0.4,"width":1},"move":{"enable":true,"speed":8.002432739552825,"direction":"none","random":true,"straight":false,"out_mode":"out","bounce":false,"attract":{"enable":false,"rotateX":600,"rotateY":1200}}},"interactivity":{"detect_on":"canvas","events":{"onhover":{"enable":true,"mode":"repulse"},"onclick":{"enable":true,"mode":"push"},"resize":true},"modes":{"grab":{"distance":400,"line_linked":{"opacity":1}},"bubble":{"distance":400,"size":40,"duration":2,"opacity":8,"speed":3},"repulse":{"distance":200,"duration":0.4},"push":{"particles_nb":4},"remove":{"particles_nb":2}}},"retina_detect":true});var count_particles, stats, update; stats = new Stats; stats.setMode(0); stats.domElement.style.position = 'absolute'; stats.domElement.style.left = '0px'; stats.domElement.style.top = '0px'; document.body.appendChild(stats.domElement); count_particles = document.querySelector('.js-count-particles'); update = function() { stats.begin(); stats.end(); if (window.pJSDom[0].pJS.particles && window.pJSDom[0].pJS.particles.array) { count_particles.innerText = window.pJSDom[0].pJS.particles.array.length; } requestAnimationFrame(update); }; requestAnimationFrame(update);; | ||
+ | </script> | ||
+ | <script> | ||
+ | $(".circle").hover(function(){ | ||
+ | $("#text2").css("animation", "subtitle 4s linear"); | ||
+ | }, function(){ | ||
+ | $("#text2").css("opacity", "1"); | ||
+ | }, function(){ | ||
+ | }); | ||
+ | $(".circle").hover(function(){ | ||
+ | $("#description").css("animation", "subtitle 4s linear"); | ||
+ | }, function(){ | ||
+ | $("#description").css("opacity", "1"); | ||
+ | }); | ||
+ | </script> | ||
</html> | </html> | ||
+ | |||
+ | {{NCTU_Formosa/Footer}} |
Latest revision as of 00:54, 18 October 2018