three实现三维三峡大坝五级闸门上下游货船通行过闸操控体验代码
代码语言:html
所属分类:三维
代码描述:three实现三维三峡大坝五级闸门上下游货船通行过闸操控体验代码,控制货船一级一级过闸。
代码标签: three 三维 三峡 大坝 五级 闸门 上下 游 货船 通行 过闸 操控 体验 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>三峡五级船闸 · 船舶过闸通行模拟</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=ZCOOL+QingKe+HuangYou&family=Noto+Sans+SC:wght@400;500;700&family=Chakra+Petch:wght@500;600;700&display=swap" rel="stylesheet">
<style>
:root{
--bg0:#06161d; --panel:rgba(10,32,41,.92); --panel2:rgba(6,22,29,.94);
--amber:#ffb454; --amber2:#ff8a3d; --green:#43e08a; --red:#ff5d5d; --teal:#25c4d6;
--ink:#e9f4f2; --dim:#8fb0b4; --line:rgba(255,180,84,.32);
--disp:'ZCOOL QingKe HuangYou',system-ui; --num:'Chakra Petch',monospace; --body:'Noto Sans SC',sans-serif;
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%;overflow:hidden;background:var(--bg0);font-family:var(--body);color:var(--ink)}
#app canvas{display:block}
.cham{clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px)}
.panel{background:linear-gradient(180deg,var(--panel),var(--panel2));border:1px solid var(--line);position:relative}
.panel::after{content:'';position:absolute;inset:0;pointer-events:none;
background:repeating-linear-gradient(0deg,rgba(255,255,255,.022) 0 1px,transparent 1px 3px)}
#ui{position:fixed;inset:0;pointer-events:none;z-index:10}
#topbar{position:absolute;top:0;left:0;right:0;display:flex;align-items:flex-start;gap:14px;padding:14px 18px}
#badge{display:flex;align-items:center;gap:12px;padding:10px 16px}
#badge .dir{font-family:var(--disp);font-size:34px;line-height:1;color:var(--amber);text-shadow:0 0 18px rgba(255,180,84,.5)}
#badge .t1{font-family:var(--disp);font-size:20px;letter-spacing:2px}
#badge .t2{font-family:var(--num);font-size:11px;color:var(--dim);letter-spacing:1px;margin-top:2px}
#steps{flex:1;display:flex;justify-content:center;gap:4px;padding-top:6px;flex-wrap:wrap}
#steps .chip{font-size:12px;letter-spacing:1px;padding:7px 12px;border:1px solid rgba(143,176,180,.25);
color:var(--dim);background:rgba(6,22,29,.7);transition:all .35s;white-space:nowrap}
#steps .chip.done{color:var(--green);border-color:rgba(67,224,138,.45)}
#steps .chip.on{color:#08151b;background:var(--amber);border-color:var(--amber);font-weight:700;
box-shadow:0 0 18px rgba(255,180,84,.55);transform:translateY(-2px)}
#tools{display:flex;align-items:center;gap:8px}
#timer{font-family:var(--num);font-size:22px;font-weight:600;color:var(--teal);padding:8px 14px;letter-spacing:1px}
.tbtn{pointer-events:auto;width:40px;height:40px;display:grid;place-items:center;cursor:pointer;
background:rgba(6,22,29,.85);border:1px solid var(--line);color:var(--amber);font-size:17px;
transition:all .2s;font-family:var(--num)}
.tbtn:hover{background:var(--amber);color:#08151b;transform:translateY(-2px);box-shadow:0 4px 16px rgba(255,180,84,.4)}
#banner{position:absolute;left:50%;bottom:30px;transform:translateX(-50%);width:min(680px,92vw);
display:flex;align-items:center;gap:14px;padding:14px 20px;animation:bIn .45s cubic-bezier(.2,.9,.3,1.2)}
@keyframes bIn{from{opacity:0;transform:translate(-50%,26px)}to{opacity:1;transform:translate(-50%,0)}}
#banner .ico{width:46px;height:46px;flex:none;display:grid;place-items:center;font-size:22px;
border:2px solid var(--amber);color:var(--amber);border-radius:50%;animation:pulse 1.8s infinite;transition:all .3s}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(255,180,84,.45)}55%{box-shadow:0 0 0 12px rgba(255,180,84,0)}}
#banner .tt{font-family:var(--disp);font-size:24px;letter-spacing:2px}
#banner .sb{font-size:12px;color:var(--dim);margin-top:3px;letter-spacing:.5px}
#banner .prog{height:5px;background:rgba(255,255,255,.1);margin-top:7px;display:none}
#banner .prog i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--teal),var(--green))}
#banner.ok .ico{border-color:var(--green);color:var(--green);animation:pulseG 1.1s infinite}
@keyframes pulseG{0%,100%{box-shadow:0 0 0 0 rgba(67,224,138,.5)}55%{box-shadow:0 0 0 12px rgba(67,224,138,0)}}
#banner.warn .ico{border-color:var(--red);color:var(--red);animation:none}
#gauges{position:absolute;left:18px;bottom:30px;width:236px;padding:14px 16px}
#gauges h4{font-family:var(--disp);font-size:14px;letter-spacing:3px;color:var(--amber);
border-bottom:1px solid var(--line);padding-bottom:7px;margin-bottom:10px;display:flex;justify-content:space-between}
#gauges h4 span{font-family:var(--num);color:var(--dim);font-size:10px;letter-spacing:1px}
.g-row{margin-bottom:11px}
.g-lab{display:flex;justify-content:space-between;font-size:11px;color:var(--dim);letter-spacing:2px;margin-bottom:4px}
.g-val{font-family:var(--num);font-size:24px;font-weight:700;color:var(--ink);line-height:1}
.g-val small{font-size:11px;color:var(--dim);font-weight:500;margin-left:3px}
.g-bar{height:6px;background:rgba(255,255,255,.09);position:relative;margin-top:5px}
.g-bar i{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--teal);transition:width .15s}
.g-bar.rud::before{content:'';position:absolute;left:50%;top:-2px;bottom:-2px;width:1px;background:var(--dim)}
.g-bar.rud i{left:50%;background:var(--amber)}
.g-bar .tgt{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--green);display:none}
#wlVal{color:var(--teal)} #wlTgt{color:var(--green);font-size:15px}
#profile{position:absolute;right:18px;bottom:30px;width:312px;padding:12px 14px 8px}
#profile h4{font-family:var(--disp);font-size:14px;letter-spacing:3px;color:var(--amber);margin-bottom:8px;
display:flex;justify-content:space-between}
#profile h4 span{font-family:var(--num);color:var(--dim);font-size:10px}
#plot{position:relative;height:96px;border-bottom:2px solid rgba(143,176,180,.4)}
#plot .col{position:absolute;top:0;bottom:0;border-left:1px dashed rgba(143,176,180,.18)}
#plot .fill{position:absolute;left:2px;right:2px;bottom:0;background:linear-gradient(180deg,#3fd6e0,#137a8c);
opacity:.85;transition:height .25s}
#plot .tl{position:absolute;left:0;right:0;border-top:2px dashed var(--green);display:none}
#shipDot{position:absolute;width:14px;height:8px;background:var(--amber);transform:translate(-50%,50%);
clip-path:polygon(0 0,100% 0,80% 100%,20% 100%);box-shadow:0 0 10px rgba(255,180,84,.8);transition:left .2s}
#plabs{display:flex;margin-top:5px}
#plabs b{flex:1;text-align:center;font-size:10px;color:var(--dim);font-weight:500;font-family:var(--num)}
#toast{position:absolute;top:16%;left:50%;transform:translateX(-50%) scale(.8);opacity:0;
font-family:var(--disp);font-size:30px;letter-spacing:4px;color:var(--green);
text-shadow:0 0 24px rgba(67,224,138,.6);transition:all .35s cubic-bezier(.2,.9,.3,1.4)}
#toast.show{opacity:1;transform:translateX(-50%) scale(1)}
#toast.warn{color:var(--red);text-shadow:0 0 24px rgba(255,93,93,.6)}
#vig{position:absolute;inset:0;box-shadow:inset 0 0 140px rgba(255,60,50,.85);opacity:0;transition:opacity .5s}
.ov{position:fixed;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;
background:radial-gradient(ellipse at 30% 20%,rgba(10,40,50,.88),rgba(4,13,18,.95));transition:opacity .5s}
.ov.hide{opacity:0;pointer-events:none}
.contour{position:absolute;inset:0;opacity:.5;pointer-events:none;
background:repeating-radial-gradient(circle at 82% 18%,transparent 0 46px,rgba(37,196,214,.06) 46px 47px),
repeating-radial-gradient(circle at 12% 85%,transparent .........完整代码请登录后点击上方下载按钮下载查看















网友评论0