mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-05-14 07:26:52 +00:00
125 lines
3.1 KiB
JavaScript
125 lines
3.1 KiB
JavaScript
/* eslint-disable */
|
|
import { useEffect } from 'react'
|
|
const id = 'canvasNestCreated'
|
|
const Nest = () => {
|
|
const destroyNest = ()=>{
|
|
const nest = document.getElementById(id)
|
|
if(nest && nest.parentNode){
|
|
nest.parentNode.removeChild(nest)
|
|
}
|
|
}
|
|
|
|
useEffect(() => {
|
|
createNest()
|
|
return () => destroyNest()
|
|
}, [])
|
|
return <></>
|
|
}
|
|
|
|
export default Nest
|
|
|
|
/**
|
|
* 创建连接点
|
|
* @param config
|
|
*/
|
|
function createNest() {
|
|
const e = document.getElementById('__next')
|
|
if(!e) return
|
|
function n(e, n, t) {
|
|
return e.getAttribute(n) || t
|
|
}
|
|
function t() {
|
|
;(u = i.width =
|
|
window.innerWidth ||
|
|
document.documentElement.clientWidth ||
|
|
document.body.clientWidth),
|
|
(d = i.height =
|
|
window.innerHeight ||
|
|
document.documentElement.clientHeight ||
|
|
document.body.clientHeight)
|
|
}
|
|
function o() {
|
|
c.clearRect(0, 0, u, d)
|
|
const e = [s].concat(x)
|
|
let n, t, i, l, r, w
|
|
x.forEach(function (o) {
|
|
for (
|
|
o.x += o.xa,
|
|
o.y += o.ya,
|
|
o.xa *= o.x > u || o.x < 0 ? -1 : 1,
|
|
o.ya *= o.y > d || o.y < 0 ? -1 : 1,
|
|
c.fillRect(o.x - 0.5, o.y - 0.5, 1, 1),
|
|
t = 0;
|
|
t < e.length;
|
|
t++
|
|
)
|
|
(n = e[t]),
|
|
o !== n &&
|
|
null !== n.x &&
|
|
null !== n.y &&
|
|
((l = o.x - n.x),
|
|
(r = o.y - n.y),
|
|
(w = l * l + r * r),
|
|
w < n.max &&
|
|
(n === s &&
|
|
w >= n.max / 2 &&
|
|
((o.x -= 0.03 * l), (o.y -= 0.03 * r)),
|
|
(i = (n.max - w) / n.max),
|
|
c.beginPath(),
|
|
(c.lineWidth = i / 2),
|
|
(c.strokeStyle = 'rgba(' + a.c + ',' + (i + 0.2) + ')'),
|
|
c.moveTo(o.x, o.y),
|
|
c.lineTo(n.x, n.y),
|
|
c.stroke()))
|
|
e.splice(e.indexOf(o), 1)
|
|
}),
|
|
m(o)
|
|
}
|
|
var i = document.createElement('canvas')
|
|
i.id = id
|
|
var a = (function () {
|
|
const t = e
|
|
return {
|
|
z: n(t, 'zIndex', 0),
|
|
o: n(t, 'opacity', 0.7),
|
|
c: n(t, 'color', '0,0,0'),
|
|
n: n(t, 'count', 99)
|
|
}
|
|
})(),
|
|
c = i.getContext('2d')
|
|
let u, d
|
|
var m =
|
|
window.requestAnimationFrame ||
|
|
window.webkitRequestAnimationFrame ||
|
|
window.mozRequestAnimationFrame ||
|
|
window.oRequestAnimationFrame ||
|
|
window.msRequestAnimationFrame ||
|
|
function (e) {
|
|
window.setTimeout(e, 1e3 / 45)
|
|
}
|
|
const l = Math.random
|
|
var r,
|
|
s = { x: null, y: null, max: 2e4 }
|
|
;(i.style.cssText =
|
|
'position:fixed;top:0;left:0;pointer-events:none;z-index:' + a.z + ';opacity:' + a.o),
|
|
(r = 'body'), e.appendChild(i),
|
|
t(),
|
|
(window.onresize = t),
|
|
(window.onmousemove = function (e) {
|
|
;(e = e || window.event), (s.x = e.clientX), (s.y = e.clientY)
|
|
}),
|
|
(window.onmouseout = function () {
|
|
;(s.x = null), (s.y = null)
|
|
})
|
|
for (var x = [], w = 0; a.n > w; w++) {
|
|
const e = l() * u,
|
|
n = l() * d,
|
|
t = 2 * l() - 1,
|
|
o = 2 * l() - 1
|
|
x.push({ x: e, y: n, xa: t, ya: o, max: 6e3 })
|
|
}
|
|
setTimeout(function () {
|
|
o()
|
|
}, 100)
|
|
}
|