simplex-noise实现可调节参数图片水面波动镜像效果代码
代码语言:html
所属分类:其他
代码描述:simplex-noise实现可调节参数图片水面波动镜像效果代码
代码标签: simplex-noise 调节 参数 图片 水面 波动 镜像
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="format-detection" content="telephone=no">
<style>
:root {
--dark-color-h: 334.29;
--dark-color-s: 32.03%;
--dark-color-l: 30%;
--light-color-h: 19.2;
--light-color-s: 30.86%;
--light-color-l: 84.12%;
--dark-color: hsl(
var(--dark-color-h),
var(--dark-color-s),
var(--dark-color-l)
);
--dark-color-lighter: hsl(
var(--dark-color-h),
var(--dark-color-s),
calc(var(--dark-color-l) + 10%)
);
--dark-color-darker: hsl(
var(--dark-color-h),
var(--dark-color-s),
calc(var(--dark-color-l) - 10%)
);
--dark-color-translucent: hsla(
var(--dark-color-h),
var(--dark-color-s),
var(--dark-color-l),
0.75
);
--dark-color-darker-translucent: hsla(
var(--dark-color-h),
var(--dark-color-s),
calc(var(--dark-color-l) - 10%),
0.75
);
--light-color: hsl(
var(--light-color-h),
var(--light-color-s),
var(--light-color-l)
);
--light-color-lighter: hsl(
var(--light-color-h),
var(--light-color-s),
calc(var(--light-color-l) + 10%)
);
--light-color-darker: hsl(
var(--light-color-h),
var(--light-color-s),
calc(var(--light-color-l) - 10%)
);
--light-color-translucent: hsla(
var(--light-color-h),
var(--light-color-s),
var(--light-color-l),
0.75
);
--color-bg: var(--dark-color);
--color-text: var(--light-color);
--resources-bg-color: var(--dark-color-darker-translucent);
--resources-active-color: color-mix(
in srgb,
var(--light-color) 75%,
transparent
);
--resources-color: var(--color-text);
--canvas-offset: 4rem;
--max-canvas-width: 52.5rem;
--max-canvas-height: 52.5rem;
--tp-base-background-color: #432331;
--tp-base-shadow-color: #432331;
--tp-button-background-color: #e3d2ca;
--tp-button-background-color-active: #f5eeeb;
--tp-button-background-color-focus: #ece0db;
--tp-button-background-color-hover: #e3d2ca;
--tp-button-foreground-color: #432331;
--tp-container-background-color: #533540;
--tp-container-background-color-active: #6b4f57;
--tp-container-background-color-focus: #634650;
--tp-container-background-color-hover: #5b3d48;
--tp-container-foreground-color: #e3d2ca;
--tp-groove-foreground-color: #533540;
--tp-input-background-color: #533540;
--tp-input-background-color-active: #6b4f57;
--tp-input-background-color-focus: #634650;
--tp-input-background-color-hover: #5b3d48;
--tp-input-foreground-color: #e3d2ca;
--tp-label-foreground-color: #b39e9c;
--tp-monitor-background-color: #381d29;
--tp-monitor-foreground-color: #b39e9c;
}
*,
::after,
::before {
border-style: solid;
border-width: 0;
box-sizing: border-box;
}
* {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
align-items: center;
background: var(--color-bg);
color: var(--color-text);
display: grid;
font-family: Inter, Roboto, "Helvetica Neue", "Arial Nova", "Nimbus Sans",
Arial, sans-serif;
justify-items: center;
line-height: 1.5;
margin: 0;
min-height: 100vh;
place-items: center;
width: 100%;
}
canvas {
--border-radius: clamp(0.5rem, 1.5vh, 1.5rem);
background: var(--dark-color-darker-translucent);
border-radius: var(--border-radius);
box-shadow: 0 0.125rem 0.25rem var(--dark-color-darker-translucent);
display: block;
height: calc(min(100dvw, 100dvh) - var(--canvas-offset));
max-block-size: var(--max-canvas-height);
max-inline-size: var(--max-canvas-width);
pointer-events: none;
position: relative;
width: calc(min(100dvw, 100dvh) - var(--canvas-offset));
width: calc(
min(100dvw, 100dvh) - var(--canvas-offset) - env(safe-area-inset-bottom)
);
}
.tp-dfwv {
padding: 0 0 3rem;
}
.tp-fldv:not(.tp-fldv-expanded) > .tp-fldv_c {
opacity: 0 !important;
}
.tp-lblv_l {
pointer-events: none;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.tp-fldv.tp-fldv-expanded > .tp-fldv_c {
opacity: 1 !important;
transition-delay: 0s, 0.2s !important;
transition-duration: 0.2s, 0.2s !important;
transition-property: height, opacity !important;
}
.tp-fldv_c:has(.tp-demo-thumbnails) {
margin-left: 0.25rem;
padding-left: 0;
}
.tp-demo-thumbnails {
display: grid;
gap: 0.1875rem;
grid-gap: 0.1875rem;
grid-template-columns: repeat(4, 1fr);
padding: 0 0.25rem 0.0625rem;
width: 100%;
}
.tp-demo-thumbnail {
align-items: center;
aspect-ratio: 1;
background-color: var(--cnt-bg);
border-radius: 0.25rem;
cursor: pointer;
display: grid;
height: auto;
justify-items: center;
overflow: hidden;
place-items: center;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
width: 100%;
}
.tp-demo-thumbnail:after {
aspect-ratio: 1;
border: 0.125rem solid transparent;
border-radius: 0.25rem;
content: "";
display: block;
grid-area: 1/-1;
pointer-events: none;
position: relative;
transition: border 0.3s;
width: 100%;
}
.tp-demo-thumbnail:active:after {
border: 0.125rem solid var(--cnt-fg);
}
.tp-demo-thumbnail img {
border-radius: 0.25rem;
display: block;
grid-area: 1/-1;
height: auto;
-o-object-fit: cover;
object-fit: cover;
width: 100%;
}
.resources-layer {
bottom: 0;
display: block;
position: fixed;
right: 0;
z-index: 1000;
}
.resources {
background: var(--resources-bg-color);
display: grid;
font-size: 0.6875rem;
font-weight: 300;
grid-auto-flow: column;
line-height: 1.3;
padding: 0.5rem;
pointer-events: auto;
}
.resources a {
align-content: center;
display: grid;
justify-content: center;
padding: 0 0.5rem;
place-content: center;
transition: color 0.2s ease-in-out;
}
.resources a,
.resources a:visited {
color: var(--resources-color);
}
.resources a:active,
.resources a:focus-visible {
color: var(--resources-active-color);
}
.resources a:focus-visible {
outline: none;
}
.resources a:not(:first-child) {
border-inline-start: thin solid currentColor;
}
@media (max-width: 51.29875em) {
canvas {
--border-radius: clamp(0.5rem, 2vh, 1rem);
}
}
@media (hover: hover) and (pointer: fine) {
.tp-demo-thumbnail:hover:not(:disabled):after {
border: 0.125rem solid var(--cnt-fg);
}
.resources a:active:not(:hover),
.resources a:hover {
color: var(--resources-active-color);
}
}
</style>
</head>
<body translate="no">
<canvas id="output"></canvas>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/utils-v3.min.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/simplex-noise.js"></script>
<script type="module">
import { Pane, FolderApi } from "//repo.bfw.wiki/bfwrepo/js/tweakpane.4.0.3.js";
const TweakpaneUtils = {
appendToFolderContent(folder, elements) {
const checkAndAppend = () => {
const folderContent = folder.element.querySelector(".tp-fldv_c");
if (!folderContent) return false;
(Array.isArray(elements) ? elements : [elements]).forEach(el => {
if (!folderContent.contains(el)) {
folderContent.appendChild(el);
}
});
return true;
};
if (checkAndAppend()) return;
const observer = new MutationObserver(() => {
if (checkAndAppend()) {
observer.disconnect();
}
});
observer.observe(folder.element, { childList: true, subtree: true });
},
appendToRootPaneContent(pane, elements) {
const checkAndAppend = () => {
const rootContent = pane.element.querySelector(".tp-rotv_c");
if (!rootContent) return false;
.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0