zdog模拟高压电电火花动画效果代码
代码语言:html
所属分类:动画
代码描述:zdog模拟高压电电火花动画效果代码,按住按钮不放即可看到。
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
* {
box-sizing: border-box;
padding: 0;
margin: 0;
}
body {
color: hsl(180 100% 54%);
background: hsl(240 13% 9%);
min-block-size: 100svb;
display: grid;
place-items: center;
font-family: system-ui;
}
div {
display: flex;
flex-direction: column;
gap: 0.5rem;
align-items: center;
}
button {
font-size: 0.9rem;
font-family: inherit;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
display: block;
padding: 0.5rem 0.75rem;
border-radius: 1e5px;
border: none;
color: hsl(180 100% 54%);
background: hsl(240 13% 16%);
}
button:focus-visible {
outline: 2px solid currentColor;
outline-offset: 2px;
}
button:disabled {
opacity: 0.7;
}
button:not(:disabled) {
transform-origin: 50% 80%;
transition-property: scale, box-shadow;
transition-duration: 0.07s;
transition-timing-function: cubic-bezier(0.37, 0, 0.63, 1);
box-shadow: 0 0 1rem -0.6rem hsl(232 90% 68% / 0.5);
}
button:active {
box-shadow: 0 0 0 0 hsl(258 92% 62% / 0.5);
scale: 0.975;
}
</style>
</head>
<body translate="no">
<div>
<canvas style="display: block; inline-size: 100%; max-inline-size: 300px" width="300" height="300"></canvas>
<button disabled>Strike lightning</button>
</div>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/zdog.dist.js"></script>
<script >
const { Anchor, Shape } = Zdog;
(() => {
const canvas = document.querySelector("canvas");
const context = canvas.getContext("2d");
const { width, height } = canvas;
const colors = [
{
h: 232,
s: 90,
l: 68 },
{
h: 220,
s: 89,
l: 64 },
{
h: 180,
s: 100,
l: 54 }];
const strokes = {
core: 10,
lightning: [3, 0.05],
particle: 1.6 };
const { h, s, l } = colors[0];
const { h: h1, s: s1, l: l1 } = colors[1];
const { h: h2, s: s2, l: l2 } = colors[2];
const color = `hsl(${h}, ${s}%, ${l}%)`;
const color1 = `hsl(${h1}, ${s1}%, ${l1}%)`;
const diameter = Math.min(width, height);
const PI = Math.PI;
const TAU = PI * 2;
const points = Math.sqrt(100);
const offset = diameter / 2.5;
const particles = Array(points).
fill().
map((_, i, { length }) => {
const theta = PI * -1 + TAU / length * i;
return [
...Array(points).
fill().
map((_, j, { length }) => {
const a = PI * -1 + TAU / length * j;
const x = offset * Math.sin(theta) * Math.cos(a);
const y = offset * Math.sin(theta) * Math.sin(a);
const z = offset * Math.cos(theta);
return {
x,
y,
z };
})];
}).
flat();
const start = 0;
const end = offset;
const lines = 3;
const offsets = [5, 12.........完整代码请登录后点击上方下载按钮下载查看
网友评论0