1/* ========================================================================== 2 shikake.js â 仿ãï¼3ã¤ï¼ 3 -------------------------------------------------------------------------- 4 壱 å¹éã ç´ã®å¹ãå·¦å³ã«éãã¦ãµã¤ããå§ã¾ã 5 å¼ çè·¡ ã«ã¼ã½ã«ã®è»è·¡ãæ·¡å¢¨ã§æ®ããããä¹¾ãã¦æ¶ãã 6 å 罫 ç« ã®ç½«ããå·¦ããçã§å¼ããã 7 â»è±ç«ã¯ core.jsï¼ãã¼ã¸å ¨ä½ã§æã ä¸ããã¾ãï¼ãç« çªå·ã®å°ã core.js ã§ãã 8 9 ãã¹ã¦å ¥ã£ãç¶æ ã§åºå®ãã¦ãã¾ãï¼å ¥ãåãã®ããã«ã¯å¤ãã¾ããï¼ã 10 åå¥ã«æ¢ãããã¨ãã¯ãä¸ã® DEF ã®è©²å½ã false ã«ãã¦ãã ããã 11 æ¬ä½ï¼core.jsï¼ã«ã¯æãå ¥ãã¦ããªãã®ã§ããã®ãã¡ã¤ã«ã¨ 12 100-shikake.css ãå¤ãã ãã§å ã«æ»ãã¾ãã 13 ========================================================================== */ 14(function () { 15 "use strict"; 16 17 var $ = function (s, r) { return (r || document).querySelector(s); }; 18 var reduce = matchMedia("(prefers-reduced-motion: reduce)").matches; 19 var coarse = matchMedia("(pointer:coarse)").matches; 20 21 /* â å ¥ãåããå ¨é¨å ¥ãã§åºå®ãã¦ãã¾ããæ¢ããããã®ã ã false ã« */ 22 var DEF = { maku: true, fude: true, kei: true, hanabi: true }; 23 var st = DEF; 24 25 /* 以åã®ãã©ã¦ã¶ã«æ®ã£ã¦ãã鏿ã¯ãããè¦ã¾ãããæé¤ã ããã¦ããã¾ã */ 26 try { localStorage.removeItem("ametsuchi-shikake"); } catch (e) {} 27 28 function save() { 29 document.body.setAttribute("data-shikake", 30 Object.keys(st).filter(function (k) { return st[k]; }).join(" ")); 31 } 32 33 /* ====================================================================== 34 壱 å¹éã 35 ====================================================================== */ 36 function maku() { 37 if (!st.maku || reduce) return; 38 var seen = false; 39 try { seen = sessionStorage.getItem("ametsuchi-maku") === "1"; } catch (e) {} 40 if (seen) return; /* åããã©ã¦ã¸ã³ã°ä¸ã¯1度ã ã */ 41 42 var el = document.createElement("div"); 43 el.id = "maku"; el.setAttribute("aria-hidden", "true"); 44 /* å¹ã®åããç®ã«ã天å°ã®è§å°ãå¹ãéãã¨å ã«æ¶ãã¾ãã 45 â ç»å㯠assets/img/rakkan-tenchi.pngï¼genrakkan.py ã§ä½ãã¾ãï¼ã 46 ãéæ¼ãã®æåã«æ»ãããã¨ãã¯ãä¸ã®1è¡ã 47 '<span class="seal-open">éæ¼</span>' ã«å·®ãæ¿ãã¦ãã ããã */ 48 el.innerHTML = '<div class="h"></div><div class="h"></div>' + 49 '<span class="seal-open"><img src="assets/img/rakkan-tenchi.png" alt=""></span>'; 50 document.body.appendChild(el); 51 document.documentElement.style.overflow = "hidden"; 52 53 /* â éããã£ããã 54 以åã¯ã620ããªç§å¾ãã«éãã¦ãã¾ããããç»åã®èªã¿è¾¼ã¿ã« 55 ãã以ä¸ããããããéããã£ã¦ãã表ç´ãçµã¿ä¸ããï¼ 56 å¹ãè¦ããªãã¾ã¾çµãããã¨ãããã¾ããã 57 ãã¾ã¯ãèªã¿è¾¼ã¿ãçµãã£ã¦ãã0.5ç§ãã§éãã¾ãã 58 èªã¿è¾¼ã¿ãé·å¼ãã¦ã3ç§ã§å¿ ãéãã¾ãï¼å¾ ãããªãããï¼ã */ 59 var opened = false; 60 function open() { 61 if (opened) return; 62 opened = true; 63 el.classList.add("is-open"); 64 document.documentElement.style.overflow = ""; 65 try { sessionStorage.setItem("ametsuchi-maku", "1"); } catch (e) {} 66 setTimeout(function () { el.classList.add("is-done"); }, 1700); 67 } 68 if (document.readyState === "complete") setTimeout(open, 500); 69 else addEventListener("load", function () { setTimeout(open, 500); }); 70 setTimeout(open, 3000); /* ä¿éºã3ç§ã§å¿ ãéã */ 71 } 72 73 /* ====================================================================== 74 å¼ çè·¡ ââ æ·¡å¢¨ã®ç·ãæ®ããããä¹¾ãã¦æ¶ãã 75 ====================================================================== */ 76 function fude() { 77 if (!st.fude || reduce || coarse) return; 78 79 var c = document.createElement("canvas"); 80 c.id = "fude"; c.setAttribute("aria-hidden", "true"); 81 document.body.appendChild(c); 82 var g = c.getContext("2d"), dpr = Math.min(devicePixelRatio || 1, 2); 83 84 function size() { 85 c.width = innerWidth * dpr;
86 c.height = innerHeight * dpr; 87 c.style.width = innerWidth + "px"; 88 c.style.height = innerHeight + "px"; 89 g.setTransform(dpr, 0, 0, dpr, 0, 0); 90 } 91 size(); addEventListener("resize", size); 92 93 var pts = [], px = null, py = null, speed = 0; 94 95 addEventListener("mousemove", function (e) { 96 var x = e.clientX, y = e.clientY; 97 if (px !== null) { 98 var d = Math.hypot(x - px, y - py); 99 speed = speed * .7 + d * .3; 100 } 101 px = x; py = y; 102 /* â ç·ã®å¤ªããéãã»ã©ç´°ãï¼çã¨åãï¼ã 103 ãã£ã¨å¤ªããããã¨ã㯠22 㨠4.2 ãä¸ãã¦ãã ããã */ 104 var w = Math.max(6.5, 26 - speed * .40); 105 pts.push({ x: x, y: y, w: w, a: 1 }); 106 if (pts.length > 110) pts.shift(); 107 }, { passive: true }); 108 109 (function loop() { 110 g.clearRect(0, 0, innerWidth, innerHeight); 111 for (var i = 1; i < pts.length; i++) { 112 var p = pts[i], q = pts[i - 1]; 113 if (p.a <= 0) continue; 114 g.strokeStyle = "rgba(32,30,28," + (p.a * .26).toFixed(3) + ")"; 115 /* 太ãã¯èãããåã«ç´°ãããããªãï¼ä¹¾ãã¦ãç·å¹ ã¯æ®ãï¼ */ 116 g.lineWidth = p.w * (0.62 + 0.38 * p.a); 117 g.lineCap = "round"; g.lineJoin = "round"; 118 g.beginPath(); g.moveTo(q.x, q.y); g.lineTo(p.x, p.y); g.stroke(); 119 p.a -= .020; /* â ä¹¾ãã¦ããéã */ 120 } 121 while (pts.length && pts[0].a <= 0) pts.shift(); 122 requestAnimationFrame(loop); 123 })(); 124 } 125 126 /* ====================================================================== 127 è 罫 ââ ç« ã®ç½«ããå·¦ããçã§å¼ããã 128 0.9ç§ãèªãã®ãéªéãã¾ããã 129 ====================================================================== */ 130 function kei() { 131 if (!st.kei || reduce) return; 132 var rules = [].slice.call(document.querySelectorAll(".rule-set"));
133 rules.forEach(function (r) { 134 r.classList.add("kei"); 135 var io = new IntersectionObserver(function (es) { 136 es.forEach(function (e) { 137 if (!e.isIntersecting) return; 138 r.classList.add("is-on"); io.disconnect(); 139 }); 140 }, { threshold: 0.4 }); 141 io.observe(r); 142 }); 143 } 144 145 save(); 146 maku(); 147 fude(); 148 kei(); 149})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.