three实现三维海岛沙盘场景代码
代码语言:html
所属分类:其他
代码由qwen-4 ai生成,可能有错误,仅供参考:点击查看提示词
代码描述:三维海岛沙盘场景
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<meta name="theme-color" content="#f3efe6">
<title>停泊 · ANCHORAGE — 地中海石屋海岛三维沙盘</title>
<style>
/* ============================================================
色板:取自场景 —— 米白 / 松石绿 / 陶土橙 / 深木棕 / 深青蓝
============================================================ */
:root{
--bg:#f3efe6; --surface:#fbf8f1; --surface2:#efe8d8; --line:#e0d6c2;
--ink:#3b2e22; --ink2:#7a6a55; --ink3:#a5947c;
--turq:#2fa79e; --turq2:#4ec9c0; --teal:#1f5f6b;
--terra:#c96f4a; --terra2:#e0855c; --wood:#5d4430;
--amber:#d9a441; --ok:#6f8f4f; --warn:#d9a441; --danger:#c25438; --info:#2fa79e;
--serif:"Songti SC","STSong","Noto Serif SC","Source Han Serif SC",Georgia,"Times New Roman",serif;
--sans:"PingFang SC","Hiragino Sans GB","Microsoft YaHei",-apple-system,"Segoe UI",sans-serif;
--mono:ui-monospace,"SF Mono","Cascadia Mono",Consolas,Menlo,monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
background:var(--bg); color:var(--ink); font-family:var(--sans);
overflow:hidden; -webkit-font-smoothing:antialiased;
}
/* —— 全站自定义滚动条(米白轨道 / 松石绿滑块 / 陶土悬停)—— */
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:var(--surface2);border-radius:6px}
::-webkit-scrollbar-thumb{background:linear-gradient(180deg,var(--turq2),var(--teal));border-radius:6px;border:2px solid var(--surface2)}
::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,var(--terra2),var(--terra))}
*{scrollbar-width:thin;scrollbar-color:var(--turq) var(--surface2)}
/* ============================ 三栏编辑部式布局 ============================ */
#app{display:grid;grid-template-columns:300px minmax(0,1fr) 312px;height:100vh;height:100dvh}
/* —— 左栏:杂志文字区 —— */
#rail{
padding:30px 26px 22px;border-right:1px solid var(--line);
display:flex;flex-direction:column;gap:18px;overflow-y:auto;min-width:0;
background:linear-gradient(160deg,#f7f3ea 0%,var(--bg) 55%,#efe9db 100%);
}
.brand{display:flex;align-items:center;gap:12px}
.brand svg{flex:none;filter:drop-shadow(0 2px 4px rgba(62,47,35,.15))}
.brand .issue{font-family:var(--mono);font-size:10px;letter-spacing:.22em;color:var(--ink2);line-height:1.7}
.brand .issue b{display:block;color:var(--terra);font-size:11px}
h1{
font-family:var(--serif);font-weight:900;font-size:clamp(64px,7vw,96px);
line-height:1.02;letter-spacing:.06em;color:var(--ink);position:relative;padding-left:18px;
}
h1::before{content:"";position:absolute;left:0;top:8px;bottom:10px;width:5px;border-radius:3px;
background:linear-gradient(180deg,var(--terra2),var(--terra) 60%,var(--teal))}
.en{font-family:var(--mono);font-size:11px;letter-spacing:.34em;color:var(--teal);font-weight:600}
.rule{height:1px;background:linear-gradient(90deg,var(--terra),var(--line) 70%,transparent);flex:none}
.meta{list-style:none;display:flex;flex-direction:column;gap:7px}
.meta li{font-family:var(--mono);font-size:11.5px;color:var(--ink2);display:flex;gap:8px;align-items:baseline;line-height:1.5}
.meta li::before{content:"—";color:var(--turq);flex:none}
.meta li b{color:var(--ink);font-weight:600}
.lede{font-family:var(--serif);font-size:13.5px;line-height:2;color:var(--ink2);text-align:justify}
.lede em{font-style:normal;color:var(--terra);border-bottom:1px dotted var(--terra)}
.legend{display:flex;flex-wrap:wrap;gap:6px}
.legend span{display:inline-flex;align-items:center;gap:6px;font-size:10.5px;font-family:var(--mono);
color:var(--ink2);background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:4px 10px}
.legend i{width:9px;height:9px;border-radius:50%;flex:none;box-shadow:inset 0 0 0 1px rgba(62,47,35,.15)}
.keys{margin-top:auto;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.keys small{font-size:10px;color:var(--ink3);letter-spacing:.12em;width:100%;font-family:var(--mono)}
.keys kbd{font-family:var(--mono);font-size:10px;background:var(--surface);border:1px solid var(--line);
border-bottom-width:2px;border-radius:5px;padding:2px 7px;color:var(--teal)}
.keys em{font-style:normal;font-size:10.5px;color:var(--ink2);margin-right:6px}
.colophon{font-family:var(--mono);font-size:9.5px;color:var(--ink3);letter-spacing:.14em;line-height:1.8}
/* —— 中栏:3D 舞台 —— */
#stage{position:relative;min-width:0;overflow:hidden;background:var(--bg)}
#scene{position:absolute;inset:0;width:100%;height:100%;display:block;outline:none}
.overlay{position:absolute;inset:0;pointer-events:none}
#vignette{background:
radial-gradient(ellipse at 52% 40%, rgba(78,201,192,.07), transparent 55%),
radial-gradient(ellipse at 50% 55%, transparent 52%, rgba(62,47,35,.16) 100%)}
#grain{opacity:.05;mix-blend-mode:multiply;
background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='160' height='160' filter='url(%23n)' opacity='0.6'/></svg>")}
#frame{inset:14px;border:1px solid rgba(122,106,85,.22)}
#frame::before,#frame::after{content:"";position:absolute;width:14px;height:14px;border:2px solid var(--terra)}
#frame::before{left:-2px;top:-2px;border-right:none;border-bottom:none}
#frame::after{right:-2px;bottom:-2px;border-left:none;border-top:none}
/* 顶部条:实时标记 + 一键静音 */
#strip{position:absolute;top:22px;left:26px;right:26px;display:flex;justify-content:space-between;align-items:center;pointer-events:none;z-index:5}
.live{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:10px;letter-spacing:.24em;color:var(--ink2)}
.live i{width:8px;height:8px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 0 rgba(111,143,79,.5);animation:pulse 2.2s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(111,143,79,.45)}70%{box-shadow:0 0 0 9px rgba(111,143,79,0)}100%{box-shadow:0 0 0 0 rgba(111,143,79,0)}}
#bSound{pointer-events:auto;display:flex;align-items:center;gap:8px;border:1px solid var(--line);
background:rgba(251,248,241,.92);backdrop-filter:blur(6px);border-radius:22px;padding:7px 14px 7px 11px;
cursor:pointer;font-family:var(--mono);font-size:11px;color:var(--teal);font-weight:600;letter-spacing:.05em;
transition:.2s;box-shadow:0 3px 12px rgba(62,47,35,.1)}
#bSound:hover{border-color:var(--turq);transform:translateY(-1px);box-shadow:0 6px 16px rgba(47,167,158,.2)}
#bSound.muted{color:var(--danger)}
#bSound svg{flex:none}
#caption{position:absolute;left:28px;bottom:22px;font-family:var(--mono);font-size:10px;letter-spacing:.18em;color:var(--ink2);pointer-events:none;line-height:1.9}
#caption b{color:var(--terra)}
#hint{position:absolute;left:50%;bottom:24px;transform:translateX(-50%);font-size:11px;color:var(--ink2);
background:rgba(251,248,241,.9);border:1px solid var(--line);border-radius:20px;padding:6px 16px;
pointer-events:none;transition:opacity .8s;letter-spacing:.08em;white-space:nowrap}
#hint.gone{opacity:0}
#compassWrap{position:absolute;right:26px;bottom:20px;display:flex;flex-direction:column;align-items:center;gap:4px;pointer-events:none}
#autoTag{font-family:var(--mono);font-size:9px;letter-spacing:.2em;color:var(--turq);opacity:0;transition:.4s}
#autoTag.on{opacity:1}
#toast{position:absolute;left:50%;bottom:64px;transform:translate(-50%,16px);background:var(--ink);color:#f6f1e6;
font-size:12px;padding:9px 18px;border-radius:10px;opacity:0;transition:.35s;pointer-events:none;z-index:8;
display:flex;gap:8px;align-items:center;box-shadow:0 8px 24px rgba(62,47,35,.3);max-width:82%;text-align:center}
#toast.show{opacity:1;transform:translate(-50%,0)}
#toast i{width:8px;height:8px;border-radius:50%;background:var(--info);flex:none}
#toast.ok i{background:var(--ok)} #toast.warn i{background:var(--warn)} #toast.err i{background:var(--danger)}
/* —— 右栏:常驻控制台 —— */
#panel{border-left:1px solid var(--line);background:var(--surface);display:flex;flex-direction:column;min-width:0}
#panel header{padding:20px 20px 14px;border-bottom:1px solid var(--line);
background:linear-gradient(135deg,#fbf8f1,#f3ecdd)}
#panel header h2{font-family:var(--serif);font-size:19px;letter-spacing:.14em;display:flex;align-items:center;gap:9px}
#panel header h2::before{content:"";width:9px;height:9px;border-radius:2px;background:var(--terra);transform:rotate(45deg)}
#panel header .clock{font-family:var(--mono);font-size:10.5px;color:var(--teal);margin-top:6px;letter-spacing:.14em}
#panelBody{flex:1;overflow-y:auto;padding:6px 20px 16px}
.grp{padding:13px 0 4px}
.grp h3{font-family:var(--mono);font-size:10px;letter-spacing:.26em;color:var(--ink3);font-weight:600;
display:flex;align-items:center;gap:8px;margin-bottom:10px}
.grp h3::after{content:"";flex:1;height:1px;background:var(--line)}
.grp h3 b{color:var(--turq)}
.grp+.grp{border-top:1px dashed var(--line)}
.row{margin-bottom:12px}
.row-top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}
.row-top label{font-size:12.5px;color:var(--ink);font-weight:600;letter-spacing:.03em}
.row-top output{font-family:var(--mono);font-size:11px;color:var(--terra);font-weight:600}
.row.dim{opacity:.45;transition:.3s}
input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:22px;background:transparent;cursor:pointer}
input[type=range]::-webkit-slider-runnable-track{height:5px;border-radius:3px;
background:linear-gradient(90deg,var(--turq) var(--p,50%),#e6dcc6 var(--p,50%))}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;border-radius:50%;
background:var(--surface);border:3.5px solid var(--terra);margin-top:-5.5px;
box-shadow:0 1px 5px rgba(62,47,35,.3);transition:transform .15s}
input[type=range]:hover::-webkit-slider-thumb{transform:scale(1.18)}
input[type=range]::-moz-range-track{height:5px;border-radius:3px;background:#e6dcc6}
input[type=range]::-moz-range-progress{height:5px;border-radius:3px;background:var(--turq)}
input[type=range]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:var(--surface);border:3.5px solid var(--terra)}
input[type=range]:focus-visible{outline:2px solid var(--terra);outline-offset:2px;border-radius:6px}
.switch-row{display:flex;justify-content:space-between;.........完整代码请登录后点击上方下载按钮下载查看















网友评论0