This commit is contained in:
“zhuoda
2020-01-13 12:23:07 +08:00
parent ee6bd6782f
commit c9ef7d3b41
614 changed files with 266 additions and 372 deletions

View File

@@ -0,0 +1,289 @@
// 离子波浪
export const lonWave = () => {
var starlings = function (n, r, t, o, e, u, i, f) {
var a = f.onSetup
void 0 === a && (a = null)
var v = f.onRepeat
void 0 === v && (v = null)
var c = f.modifier
void 0 === c && (c = null)
var l = f.perspective
void 0 === l && (l = 1)
var d = f.pixelRatio
void 0 === d && (d = 1)
var m = f.triangles
void 0 === m && (m = !1)
var s
var p
var y = r.length
var w = function (n, r) {
let t = s.createShader(n)
return s.shaderSource(t, r), s.compileShader(t), t
}
var b = function () {
for (var n = 0; n < o.length; n += 1) {
for (var r = s.createBuffer(), e = o[n], u = e.data(0, 0).length, i = new Float32Array(t * y * u), f = 0; f < t; f += 1) {
for (var a = e.data(f, t), v = f * y * u, l = 0; l < y; l += 1) {
for (var d = 0; d < u; d += 1) {
c !== null && e.name === c.attribute ? i[v] = c.value(i[v], a, d, l) : i[v] = a[d]
v += 1
}
}
}
s.bindBuffer(s.ARRAY_BUFFER, r)
s.bufferData(s.ARRAY_BUFFER, i, s.STATIC_DRAW)
var m = s.getAttribLocation(p, o[n].name)
s.enableVertexAttribArray(m)
s.vertexAttribPointer(m, u, s.FLOAT, !1, !1, 0, 0)
}
}
var A = function () {
e.push({
name: 'uMVP',
type: 'mat4'
})
for (var n = 0; n < e.length; n += 1) {
var r = s.getUniformLocation(p, e[n].name)
e[n].location = r
}
}
var F = {
float: function (n, r) {
return s.uniform1f(n, r)
},
vec2: function (n, r) {
return s.uniform2fv(n, r)
},
vec3: function (n, r) {
return s.uniform3fv(n, r)
},
vec4: function (n, r) {
return s.uniform4fv(n, r)
},
mat2: function (n, r) {
return s.uniformMatrix2fv(n, !1, r)
},
mat3: function (n, r) {
return s.uniformMatrix3fv(n, !1, r)
},
mat4: function (n, r) {
return s.uniformMatrix4fv(n, !1, r)
}
}
var g = function () {
s.clear(16640)
s.useProgram(p)
v !== null && v(s, p, e)
for (var n = 0; n < e.length; n += 1) F[e[n].type](e[n].location, e[n].value)
s.drawArrays(m ? s.TRIANGLES : s.POINTS, 0, y * t)
requestAnimationFrame(g)
}
var h = function () {
n.width = n.clientWidth * d
n.height = n.clientHeight * d
var r = s.drawingBufferWidth
var t = s.drawingBufferHeight
s.viewport(0, 0, r, t)
e[e.length - 1].value = [l / (r / t), 0, 0, 0, 0, l, 0, 0, 0, 0, -1, -1, 0, 0, 1, 1]
}
s = n.getContext('webgl')
p = s.createProgram()
s.attachShader(p, w(s.VERTEX_SHADER, u))
s.attachShader(p, w(s.FRAGMENT_SHADER, i))
s.linkProgram(p)
A()
h()
b()
a !== null && a(s)
g()
window.addEventListener('resize', h, !1)
}
// Do you like rainbow waves?
var rainbow = false
// Need more performance?
var HD = true
var canvas = document.getElementById('canvas')
var background = document.querySelector('.background')
var bar = document.querySelector('.progress')
var initialize = function initialize (vertices) {
var pixelRatio = HD ? window.devicePixelRatio : 1
var rows = HD ? 90 : 90
var multiplier = rows * rows
var duration = 0.4
var geometry = [{
x: 0,
y: 0,
z: 0
}]
var pointSize = (HD ? 6 : 2).toFixed(1)
var step = 0.004
var size = 5
var attributes = [{
name: 'aPositionStart',
data: function data (i, total) {
return [size - (i % rows / rows + 0.5 / rows) * (size * 2), -1, (size - (Math.floor(i / rows) / rows + 0.5 / rows) * size * 2) * -1]
}
},
{
name: 'aControlPointOne',
data: function data (i) {
return [size - (i % rows / rows + 0.5 / rows) * (size * 2), -0.5 + getRandom(0.2), (size - (Math.floor(i / rows) / rows + 0.5 / rows) * size * 2) * -1]
}
},
{
name: 'aControlPointTwo',
data: function data (i) {
return [size - (i % rows / rows + 0.5 / rows) * (size * 2), -0.5 + getRandom(0.2), (size - (Math.floor(i / rows) / rows + 0.5 / rows) * size * 2) * -1]
}
},
{
name: 'aPositionEnd',
data: function data (i) {
return [size - (i % rows / rows + 0.5 / rows) * (size * 2), -1, (size - (Math.floor(i / rows) / rows + 0.5 / rows) * size * 2) * -1]
}
},
{
name: 'aOffset',
data: function data (i) {
return [i * ((1 - duration) / (multiplier - 1))]
}
},
{
name: 'aColor',
data: function data (i, total) {
return getHSL(rainbow ? i / total * 1.0 : 0.5 + i / total * 0.4, 0.5, 0.5)
}
}]
var uniforms = [{
name: 'uProgress',
type: 'float',
value: 0.8
}]
var vertexShader = '\n attribute vec3 aPositionStart;\n attribute vec3 aControlPointOne;\n attribute vec3 aControlPointTwo;\n attribute vec3 aPositionEnd;\n attribute float aOffset;\n attribute vec3 aColor;\n\n uniform float uProgress;\n uniform mat4 uMVP;\n\n varying vec3 vColor;\n\n vec3 bezier4(vec3 a, vec3 b, vec3 c, vec3 d, float t) {\n return mix(mix(mix(a, b, t), mix(b, c, t), t), mix(mix(b, c, t), mix(c, d, t), t), t);\n }\n\n float easeInOutQuint(float t){\n return t < 0.5 ? 16.0 * t * t * t * t * t : 1.0 + 16.0 * (--t) * t * t * t * t;\n }\n\n void main () {\n float tProgress = easeInOutQuint(min(1.0, max(0.0, (uProgress - aOffset)) / ' + duration + '));\n vec3 newPosition = bezier4(aPositionStart, aControlPointOne, aControlPointTwo, aPositionEnd, tProgress);\n gl_PointSize = ' + pointSize + ' + ((newPosition.y + 1.0) * 80.0);\n gl_Position = uMVP * vec4(newPosition, 1.0);\n vColor = aColor;\n }\n'
var fragmentShader = '\n precision mediump float;\n\n varying vec3 vColor;\n\n void main() {\n vec2 pc = 2.0 * gl_PointCoord - 1.0;\n gl_FragColor = vec4(vColor, 1.0 - dot(pc, pc));\n }\n'
var onSetup = function onSetup (gl) {
gl.blendFunc(gl.SRC_ALPHA, gl.ONE)
gl.enable(gl.BLEND)
}
var onRepeat = function onRepeat () {
rotateY(uniforms[uniforms.length - 1].value, 0.002)
if (uniforms[0].value < 0) {
uniforms[0].value = 1
}
uniforms[0].value -= step
}
var options = {
onSetup: onSetup,
onRepeat: onRepeat,
pixelRatio: pixelRatio
}
starlings(canvas, geometry, multiplier, attributes, uniforms, vertexShader, fragmentShader, options)
}
var getRandom = function getRandom (value) {
return Math.random() * value - value / 2
}
var rotateY = function rotateY (matrix, angle) {
var sin = Math.sin(angle)
var cos = Math.cos(angle)
var clone = JSON.parse(JSON.stringify(matrix))
matrix[0] = clone[0] * cos - clone[8] * sin
matrix[1] = clone[1] * cos - clone[9] * sin
matrix[2] = clone[2] * cos - clone[10] * sin
matrix[3] = clone[3] * cos - clone[11] * sin
matrix[8] = clone[0] * sin + clone[8] * cos
matrix[9] = clone[1] * sin + clone[9] * cos
matrix[10] = clone[2] * sin + clone[10] * cos
matrix[11] = clone[3] * sin + clone[11] * cos
}
var h2r = function h2r (p, q, t) {
if (t < 0) t += 1
if (t > 1) t -= 1
if (t < 1 / 6) return p + (q - p) * 6 * t
if (t < 1 / 2) return q
if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t)
return p
}
var getHSL = function getHSL (h, s, l) {
h = (h % 1 + 1) % 1
s = Math.max(0, Math.min(1, s))
l = Math.max(0, Math.min(1, l))
if (s === 0) return [l, l, l]
var p = l <= 0.5 ? l * (1 + s) : l + s - l * s
var q = 2 * l - p
return [h2r(q, p, h + 1 / 3), h2r(q, p, h), h2r(q, p, h - 1 / 3)]
}
initialize()
}
// 随机线条
export const canvasParticle = (function () {
function getElementByTag (name) { return document.getElementsByTagName(name) }
function getELementById (id) { return document.getElementById(id) }
function canvasInit (canvasConfig) {
canvasConfig = canvasConfig || {}
var html = getElementByTag('html')[0]
var body = document.getElementById('canvasView')
var canvasObj = document.createElement('canvas')
var canvas = { element: canvasObj, points: [], config: { vx: canvasConfig.vx || 4, vy: canvasConfig.vy || 4, height: canvasConfig.height || 2, width: canvasConfig.width || 2, count: canvasConfig.count || 100, color: canvasConfig.color || '121, 162, 185', stroke: canvasConfig.stroke || '130,255,255', dist: canvasConfig.dist || 6000, e_dist: canvasConfig.e_dist || 20000, max_conn: 10 } }; if (canvas.element.getContext('2d')) { canvas.context = canvas.element.getContext('2d') } else { return null }
body.style.padding = '0'; body.style.margin = '0'; body.appendChild(canvas.element); canvas.element.style = 'position: fixed; top: 0; left: 0; z-index: -1;'; canvasSize(canvas.element); window.onresize = function () { canvasSize(canvas.element) }
body.onmousemove = function (e) { var event = e || window.event; canvas.mouse = { x: event.clientX, y: event.clientY } }
document.onmouseleave = function () { canvas.mouse = undefined }
setInterval(function () { drawPoint(canvas) }, 40)
}
function canvasSize (canvas) {
var width = document.getElementById('canvasView').style.width
var height = document.getElementById('canvasView').style.height
width = parseInt(width); height = parseInt(height)
canvas.width = width || window.innerWeight || document.documentElement.clientWidth || document.body.clientWidth; canvas.height = height || window.innerWeight || document.documentElement.clientHeight || document.body.clientHeight
}
function drawPoint (canvas) {
var context = canvas.context
var point
var dist
context.clearRect(0, 0, canvas.element.width, canvas.element.height); context.beginPath(); context.fillStyle = 'rgb(' + canvas.config.color + ')'; for (var i = 0, len = canvas.config.count; i < len; i++) {
if (canvas.points.length != canvas.config.count) { point = { x: Math.floor(Math.random() * canvas.element.width), y: Math.floor(Math.random() * canvas.element.height), vx: canvas.config.vx / 2 - Math.random() * canvas.config.vx, vy: canvas.config.vy / 2 - Math.random() * canvas.config.vy } } else { point = borderPoint(canvas.points[i], canvas) }
context.fillRect(point.x - canvas.config.width / 2, point.y - canvas.config.height / 2, canvas.config.width, canvas.config.height); canvas.points[i] = point
}
drawLine(context, canvas, canvas.mouse); context.closePath()
}
function borderPoint (point, canvas) {
var p = point; if (point.x <= 0 || point.x >= canvas.element.width) { p.vx = -p.vx; p.x += p.vx } else if (point.y <= 0 || point.y >= canvas.element.height) { p.vy = -p.vy; p.y += p.vy } else { p = { x: p.x + p.vx, y: p.y + p.vy, vx: p.vx, vy: p.vy } }
return p
}
function drawLine (context, canvas, mouse) {
let dist
context = context || canvas.context; for (var i = 0, len = canvas.config.count; i < len; i++) {
canvas.points[i].max_conn = 0; for (var j = 0; j < len; j++) {
if (i != j) {
dist = Math.round(canvas.points[i].x - canvas.points[j].x) * Math.round(canvas.points[i].x - canvas.points[j].x) +
Math.round(canvas.points[i].y - canvas.points[j].y) * Math.round(canvas.points[i].y - canvas.points[j].y); if (dist <= canvas.config.dist && canvas.points[i].max_conn < canvas.config.max_conn) {
canvas.points[i].max_conn++; context.lineWidth = 0.5 - dist / canvas.config.dist; context.strokeStyle = 'rgba(' + canvas.config.stroke + ',' + (1 - dist / canvas.config.dist) + ')'
context.beginPath(); context.moveTo(canvas.points[i].x, canvas.points[i].y); context.lineTo(canvas.points[j].x, canvas.points[j].y); context.stroke()
}
}
}
if (mouse) {
dist = Math.round(canvas.points[i].x - mouse.x) * Math.round(canvas.points[i].x - mouse.x) +
Math.round(canvas.points[i].y - mouse.y) * Math.round(canvas.points[i].y - mouse.y); if (dist > canvas.config.dist && dist <= canvas.config.e_dist) { canvas.points[i].x = canvas.points[i].x + (mouse.x - canvas.points[i].x) / 20; canvas.points[i].y = canvas.points[i].y + (mouse.y - canvas.points[i].y) / 20 }
if (dist <= canvas.config.e_dist) { context.lineWidth = 1; context.strokeStyle = 'rgba(' + canvas.config.stroke + ',' + (1 - dist / canvas.config.e_dist) + ')'; context.beginPath(); context.moveTo(canvas.points[i].x, canvas.points[i].y); context.lineTo(mouse.x, mouse.y); context.stroke() }
}
}
}
return canvasInit
})()