webgl实现地中海漂移风粒子运动动画效果代码

代码语言:html

所属分类:粒子

代码描述:webgl实现地中海漂移风粒子运动动画效果代码

代码标签: webgl 地中海 漂移 粒子 运动 动画 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  

  
  
  
<style>
@import url("https://fonts.googleapis.com/css2?family=Bebas+Neue&family=DM+Mono:wght@300;400&display=swap");

@layer reset, base, layout, ui;

@layer reset {
	*,
	*::before,
	*::after {
		box-sizing: border-box;
		margin: 0;
		padding: 0;
	}
}

@layer base {
	:root {
		--bg: #0d141a;
		--paper: #f0ece3;
		--muted: #a3b0b8;
		--low: #e0896a;
		--high: #6a9fe0;
		--font-mono: "DM Mono", ui-monospace, monospace;
		--font-display: "Bebas Neue", system-ui, sans-serif;
	}

	html,
	body {
		block-size: 100%;
	}

	body {
		background: var(--bg);
		color: var(--paper);
		font-family: var(--font-mono);
		overflow: hidden;
	}
}

@layer layout {
	.map {
		position: fixed;
		inset: 0;
		background: var(--bg);
		isolation: isolate;
	}

	.map::after {
		content: "";
		position: absolute;
		inset: 0;
		z-index: 1;
		pointer-events: none;
		background-image: repeating-linear-gradient(
				to right,
				color-mix(in oklab, var(--paper) 18%, transparent) 0 1px,
				transparent 1px 84px
			),
			repeating-linear-gradient(
				to bottom,
				color-mix(in oklab, var(--paper) 18%, transparent) 0 1px,
				transparent 1px 84px
			);
		opacity: 0.5;
	}

	#wind_canvas {
		position: absolute;
		inset: 0;
		z-index: 0;
		inline-size: 100%;
		block-size: 100%;
	}

	.markers {
		position: absolute;
		inset: 0;
		z-index: 2;
		pointer-events: none;
	}
}

@layer ui {
	.pressure-system {
		position: absolute;
		inset-block-start: 0;
		inset-inline-start: 0;
		inline-size: var(--pressure-size, 7rem);
		block-size: var(--pressure-size, 7rem);
		pointer-events: none;
		will-change: transform;
	}

	.pressure-ring,
	.pressure-marker {
		position: absolute;
		inset: 50% auto auto 50%;
		border-radius: 50%;
		transform: translate(-50%, -50%);
	}

	.pressure-ring {
		background: transparent;
		box-shadow: none;
		inline-size: calc(var(--pressure-size, 7rem) * var(--ring-scale, 1));
		block-size: calc(var(--pressure-size, 7rem) * var(--ring-scale, 1));
		border: 1px solid color-mix(in oklab, var(--paper) 46%, transparent);
		opacity: calc(var(--pressure-opacity, 0.42) * var(--ring-opacity, 1));
	}

	.pressure-ring[data-ring="1"] {
		--ring-scale: 0.72;
		--ring-opacity: 0.24;
	}

	.pressure-ring[data-ring="2"] {
		--ring-scale: 1.18;
		--ring-opacity: 0.16;
	}

	.pressure-ring[data-ring="3"] {
		--ring-scale: 1.72;
		--ring-opacity: 0.09;
	}

	.pressure-marker {
		display: grid;
		place-items: center;
		inline-size: 1.8rem;
		block-size: 1.8rem;
		border: 1px solid color-mix(in oklab, var(--paper) 42%, transparent);
		font-family: var(--font-display);
		font-size: 1.05rem;
		line-height: 1;
		color: color-mix(in oklab, var(--paper) 88%, transparent);
		background: color-mix(in oklab, var(--bg) 76%, transparent);
		box-shadow: 0 0 0 1px color-mix(in oklab, var(--bg) 60%, transparent);
	}

	.caption {
		position: fixed;
		z-index: 3;
		inset-block-start: clamp(1rem, 3vmin, 2rem);
		inset-inline-start: clamp(1rem, 3vmin, 2rem);
		pointer-events: none;
	}

	.caption-title {
		font-family: var(--font-display);
		font-size: clamp(1.9rem, 5vmin, 3.2rem);
		line-height: 0.9;
		letter-spacing: 0.03em;
	}

	.caption-hint {
		margin-block-start: 0.4rem;
		font-size: 0.6rem;
		letter-spacing: 0.24em;
		text-transform: uppercase;
		color: var(--muted);
	}

	.mode-panel {
		position: fixed;
		z-index: 3;
		inset-block-end: clamp(1rem, 3vmin, 2rem);
		inset-inline-end: clamp(1rem, 3vmin, 2rem);
		display: flex;
		flex-wrap: wrap;
		justify-content: flex-end;
		gap: 0.35rem;
		max-inline-size: min(34rem, calc(100vw - 2rem));
	}

	.mode-panel button {
		.........完整代码请登录后点击上方下载按钮下载查看

网友评论0