409 lines
17 KiB
HTML
409 lines
17 KiB
HTML
|
|
<!doctype html>
|
|||
|
|
<html lang="en">
|
|||
|
|
<head>
|
|||
|
|
<meta charset="utf-8" />
|
|||
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|||
|
|
<title>CDR — GigaBIT M1 Mirror | Atomaste</title>
|
|||
|
|
<meta name="robots" content="noindex, nofollow" />
|
|||
|
|
|
|||
|
|
<!-- Reveal.js (CDN) -->
|
|||
|
|
<link rel="stylesheet" href="https://unpkg.com/reveal.js@5/dist/reveal.css" />
|
|||
|
|
<link rel="stylesheet" href="https://unpkg.com/reveal.js@5/dist/theme/black.css" />
|
|||
|
|
<link rel="stylesheet" href="./theme-atomaste.css" />
|
|||
|
|
|
|||
|
|
<link rel="icon" type="image/svg+xml" href="/Media/Atomaste_logo_A.svg?v=2">
|
|||
|
|
</head>
|
|||
|
|
|
|||
|
|
<body>
|
|||
|
|
<div class="reveal">
|
|||
|
|
<div class="slides">
|
|||
|
|
|
|||
|
|
<!-- 1 Title -->
|
|||
|
|
<section>
|
|||
|
|
<h1>Critical Design Review (CDR)</h1>
|
|||
|
|
<h2>GigaBIT M1 Primary Mirror</h2>
|
|||
|
|
<p style="color: rgba(232,238,247,0.75)">Optique Fullum · Atomaste · <span id="today"></span></p>
|
|||
|
|
<aside class="notes">
|
|||
|
|
Goal: establish confidence to proceed with Schott blank order.
|
|||
|
|
Audience: StarSpec.
|
|||
|
|
Keep intro short: what decision we’re asking for.
|
|||
|
|
</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 2 Agenda -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Agenda</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Executive summary (decision + numbers)</li>
|
|||
|
|
<li class="fragment fade-up">Design evolution (PDR → CDR)</li>
|
|||
|
|
<li class="fragment fade-up">Selected design baseline (Option B)</li>
|
|||
|
|
<li class="fragment fade-up">Performance validation (WFE + margins)</li>
|
|||
|
|
<li class="fragment fade-up">Support system (whiffletree + lateral)</li>
|
|||
|
|
<li class="fragment fade-up">Reference frame & boundary condition strategy</li>
|
|||
|
|
<li class="fragment fade-up">Risks, schedule, next steps</li>
|
|||
|
|
</ul>
|
|||
|
|
<aside class="notes">Target: ~45 min including questions. Main deck ~24–26 slides + backup.</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 3 Exec summary -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Executive Summary</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up"><b>Status:</b> design maturity sufficient to authorize blank procurement</li>
|
|||
|
|
<li class="fragment fade-up"><b>Baseline for procurement:</b> Option B (Conical V14)</li>
|
|||
|
|
<li class="fragment fade-up"><b>Performance:</b> WFE compliant with 36–71% margin</li>
|
|||
|
|
<li class="fragment fade-up"><b>Mass:</b> ~95 kg (allocation 103.5 kg)</li>
|
|||
|
|
<li class="fragment fade-up"><b>Cost:</b> $525k quote (0.4% above $523k target)</li>
|
|||
|
|
<li class="fragment fade-up"><b>Schedule driver:</b> 18‑week Schott lead time</li>
|
|||
|
|
</ul>
|
|||
|
|
<aside class="notes">This slide is the meeting anchor: decision + evidence plan.</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 4 Key numbers -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Key Numbers (Option B)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up"><b>WFE 40°–20°:</b> 6.59 nm RMS (req ≤ 22 nm)</li>
|
|||
|
|
<li class="fragment fade-up"><b>WFE 60°–20°:</b> 14.79 nm RMS (req ≤ 22 nm)</li>
|
|||
|
|
<li class="fragment fade-up"><b>Req interpretation:</b> 22 nm RMS ≈ λ/25 @ 550 nm</li>
|
|||
|
|
<li class="fragment fade-up"><b>Mass:</b> ~95 kg (Δ = +8% margin to allocation)</li>
|
|||
|
|
<li class="fragment fade-up"><b>Quote:</b> $525,000 (received)</li>
|
|||
|
|
</ul>
|
|||
|
|
<aside class="notes">Call out margin: even with uncertainty, we remain well inside requirement.</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- Divider -->
|
|||
|
|
<section>
|
|||
|
|
<div class="section-divider">
|
|||
|
|
<div class="kicker">Section</div>
|
|||
|
|
<div class="title">Design Evolution (PDR → CDR)</div>
|
|||
|
|
<div style="color: rgba(232,238,247,0.7)">Method improvements + scale of validation.</div>
|
|||
|
|
</div>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 5 Transition to Atomizer -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Transition to Atomizer Framework</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Moved from HEEDS MDO → <b>custom Atomizer</b> framework</li>
|
|||
|
|
<li class="fragment fade-up">Full control of algorithms, tuning, and traceability</li>
|
|||
|
|
<li class="fragment fade-up">Automation: NX Nastran (SOL 101) + post-processing</li>
|
|||
|
|
<li class="fragment fade-up">Reproducible studies (version-controlled)</li>
|
|||
|
|
</ul>
|
|||
|
|
<aside class="notes">Atomizer is the engine behind the scale + reproducibility of this campaign.</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 6 OPD Zernike -->
|
|||
|
|
<section>
|
|||
|
|
<h2>OPD‑Based Zernike Method (Upgrade)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Upgraded from Z‑displacement only → <b>OPD‑based</b> extraction</li>
|
|||
|
|
<li class="fragment fade-up">Captures lateral displacement (X,Y), not only axial (Z)</li>
|
|||
|
|
<li class="fragment fade-up">Directly supports the system WFE metric</li>
|
|||
|
|
</ul>
|
|||
|
|
<aside class="notes">Key: more correct optical metric than Z-only, especially off-zenith.</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 7 Campaign scale -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Validation Scale</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up"><b>Total:</b> 3,770+ FEA simulations</li>
|
|||
|
|
<li class="fragment fade-up">14 design variables (support + ribs + blank geometry)</li>
|
|||
|
|
<li class="fragment fade-up">Algorithms: TPE, GNN, SAT v3, NSGA‑II, L‑BFGS</li>
|
|||
|
|
<li class="fragment fade-up"><b>Convergence confirmed:</b> multiple algorithms agree</li>
|
|||
|
|
</ul>
|
|||
|
|
<aside class="notes">This closes the “what if we optimize more?” question: diminishing returns.</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- Divider -->
|
|||
|
|
<section>
|
|||
|
|
<div class="section-divider">
|
|||
|
|
<div class="kicker">Section</div>
|
|||
|
|
<div class="title">Cost Reduction Campaign</div>
|
|||
|
|
<div style="color: rgba(232,238,247,0.7)">Manufacturing simplifications without sacrificing performance.</div>
|
|||
|
|
</div>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 8 Cost target -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Cost Target & Outcome</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Baseline quote: <b>$625k</b></li>
|
|||
|
|
<li class="fragment fade-up">Budget target: <b>$523k</b></li>
|
|||
|
|
<li class="fragment fade-up">Option B quote: <b>$525k</b> (0.4% above target)</li>
|
|||
|
|
<li class="fragment fade-up">Option C explored for manufacturability context (not procurement baseline)</li>
|
|||
|
|
</ul>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 9 Simplifications -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Key Simplifications (Implemented in Option B)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Support interface taper simplified to 0° (cylindrical)</li>
|
|||
|
|
<li class="fragment fade-up">Center mini ribs removed (validated low sensitivity)</li>
|
|||
|
|
<li class="fragment fade-up">Guided by sensitivity + campaign data (not one-off changes)</li>
|
|||
|
|
</ul>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- Divider -->
|
|||
|
|
<section>
|
|||
|
|
<div class="section-divider">
|
|||
|
|
<div class="kicker">Section</div>
|
|||
|
|
<div class="title">Selected Design Baseline</div>
|
|||
|
|
<div style="color: rgba(232,238,247,0.7)">Option B (Conical V14) for procurement.</div>
|
|||
|
|
</div>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 10 Option B description -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Option B (Baseline): Conical V14</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up"><b>Backface angle:</b> 4.3° (optimized)</li>
|
|||
|
|
<li class="fragment fade-up"><b>Center thickness:</b> 85 mm</li>
|
|||
|
|
<li class="fragment fade-up"><b>Mass:</b> ~95 kg</li>
|
|||
|
|
<li class="fragment fade-up"><b>Quote:</b> $525k received</li>
|
|||
|
|
</ul>
|
|||
|
|
<p style="color: rgba(232,238,247,0.7)"><i>Figure placeholder:</i> blank cross‑section export (CAD)</p>
|
|||
|
|
<aside class="notes">Add CAD cross-section image when available.</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 11 Trade summary -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Why Option B (vs Flat‑Back Option C)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Option C has excellent polishing metric (MFG 90 ~28 nm) and slightly better WFE</li>
|
|||
|
|
<li class="fragment fade-up">Option B selected for <b>maturity + procurement readiness</b> (quote in hand, heritage)</li>
|
|||
|
|
<li class="fragment fade-up">Option C remains documented as a credible alternative for future trades</li>
|
|||
|
|
</ul>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- Divider -->
|
|||
|
|
<section>
|
|||
|
|
<div class="section-divider">
|
|||
|
|
<div class="kicker">Section</div>
|
|||
|
|
<div class="title">Performance Validation</div>
|
|||
|
|
<div style="color: rgba(232,238,247,0.7)">WFE compliance, dominant modes, uncertainty.</div>
|
|||
|
|
</div>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 12 WFE compliance -->
|
|||
|
|
<section>
|
|||
|
|
<h2>WFE Compliance (Operational)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Requirement: <b>≤ 22 nm RMS</b> (relative to 20° reference)</li>
|
|||
|
|
<li class="fragment fade-up">40°: <b>6.59 nm</b> (≈71% margin)</li>
|
|||
|
|
<li class="fragment fade-up">60°: <b>14.79 nm</b> (≈36% margin)</li>
|
|||
|
|
</ul>
|
|||
|
|
<aside class="notes">Call out that requirement corresponds to λ/25 @ 550 nm, system-level spec.</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 13 Zernike breakdown -->
|
|||
|
|
<section>
|
|||
|
|
<h2>WFE Breakdown (40° Case, Filtered RMS)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Dominant: <b>Coma (J7–J8)</b> ~60%</li>
|
|||
|
|
<li class="fragment fade-up">Astigmatism (J5–J6) ~33%</li>
|
|||
|
|
<li class="fragment fade-up">Higher order contribution is low</li>
|
|||
|
|
</ul>
|
|||
|
|
<aside class="notes">Message: deformation is physically reasonable (gravity asymmetry); nothing pathological.</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 14 Uncertainty -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Uncertainty (RSS)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Combined WFE uncertainty estimate: <b>±1.2 nm</b></li>
|
|||
|
|
<li class="fragment fade-up">Worst-case 40°: ~7.5 nm (still far below 22 nm)</li>
|
|||
|
|
<li class="fragment fade-up">Support compliance target: reference frame deflection < 1 μm</li>
|
|||
|
|
</ul>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- Divider -->
|
|||
|
|
<section>
|
|||
|
|
<div class="section-divider">
|
|||
|
|
<div class="kicker">Section</div>
|
|||
|
|
<div class="title">Support System</div>
|
|||
|
|
<div style="color: rgba(232,238,247,0.7)">Architecture is defined; detailed design proceeds to FDR.</div>
|
|||
|
|
</div>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 15 Whiffletree -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Axial Support: 54‑Point Whiffletree</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Self‑equalizing hierarchical linkage (18 pads × 3 assemblies)</li>
|
|||
|
|
<li class="fragment fade-up">Load path: Mirror → pads → arms → 3 interface points → reference frame</li>
|
|||
|
|
<li class="fragment fade-up">RDOF joints provide thermal decoupling (insensitive in 100–200 Nmm range)</li>
|
|||
|
|
</ul>
|
|||
|
|
<p style="color: rgba(232,238,247,0.7)"><i>Figure placeholder:</i> whiffletree schematic</p>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 16 Lateral -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Lateral Support (3‑Point)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">3 assemblies at 120°; determinate restraint</li>
|
|||
|
|
<li class="fragment fade-up">Includes spherical bearing (moment isolation) + radial slide (thermal) + Z stage (collimation)</li>
|
|||
|
|
<li class="fragment fade-up">At 20° elevation, each point carries ~35 kg lateral load (order of magnitude)</li>
|
|||
|
|
</ul>
|
|||
|
|
<p style="color: rgba(232,238,247,0.7)"><i>Figure placeholder:</i> lateral support concept</p>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- Divider -->
|
|||
|
|
<section>
|
|||
|
|
<div class="section-divider">
|
|||
|
|
<div class="kicker">Section</div>
|
|||
|
|
<div class="title">Reference Frame & Boundary Conditions</div>
|
|||
|
|
<div style="color: rgba(232,238,247,0.7)">Procure now; develop frame in parallel.</div>
|
|||
|
|
</div>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 17 Reference frame scope -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Reference Frame (Scope Boundary)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Purpose: replicate fixed BCs used in optimization (stiff interface)</li>
|
|||
|
|
<li class="fragment fade-up">Status at CDR: <b>conceptual</b>; detailed design at FDR</li>
|
|||
|
|
<li class="fragment fade-up">Integration risk handled via ICD with StarSpec</li>
|
|||
|
|
</ul>
|
|||
|
|
<p style="color: rgba(232,238,247,0.7)"><i>Figure placeholder:</i> reference frame concept topology</p>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 18 BC strategy -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Why Ordering the Blank Now Is Safe</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up"><b>Diminishing returns:</b> 3,770+ trials; improvements are flat</li>
|
|||
|
|
<li class="fragment fade-up"><b>Separate problems:</b> mirror optimization vs frame stiffness engineering</li>
|
|||
|
|
<li class="fragment fade-up"><b>Parallel path:</b> order blank now, design/validate frame while Schott fabricates</li>
|
|||
|
|
</ul>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- Divider -->
|
|||
|
|
<section>
|
|||
|
|
<div class="section-divider">
|
|||
|
|
<div class="kicker">Section</div>
|
|||
|
|
<div class="title">Risks, Schedule, Next Steps</div>
|
|||
|
|
<div style="color: rgba(232,238,247,0.7)">Residual risks are known and manageable.</div>
|
|||
|
|
</div>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 19 Risk matrix -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Risk Snapshot (CDR)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Closed: design convergence (R1), mass allocation (R5), major methodology risks</li>
|
|||
|
|
<li class="fragment fade-up">Reduced: cost (R2), polishing difficulty (R6)</li>
|
|||
|
|
<li class="fragment fade-up">Open: Schott delivery delay (R3), interfaces (R7), material defect (R8)</li>
|
|||
|
|
<li class="fragment fade-up">New: reference frame stiffness (R4) — mitigated via parallel development</li>
|
|||
|
|
</ul>
|
|||
|
|
<aside class="notes">This slide is the “honest risks” moment. Keep it calm + mitigation-focused.</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 20 Schedule -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Path to FDR (High Level)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up">Schott PO: target Jan 20</li>
|
|||
|
|
<li class="fragment fade-up">Blank delivery: ~May 26 (18 weeks)</li>
|
|||
|
|
<li class="fragment fade-up">Reference frame concept review: Feb 28</li>
|
|||
|
|
<li class="fragment fade-up">Polishing start: Jun 2 → FDR: Sep</li>
|
|||
|
|
</ul>
|
|||
|
|
<aside class="notes">If you have a graphic timeline, swap this for the visual. Keep dates consistent with your doc.</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- 21 Recommendation -->
|
|||
|
|
<section>
|
|||
|
|
<h2>Decision Request</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li class="fragment fade-up"><b>Approve CDR baseline:</b> Option B (Conical V14)</li>
|
|||
|
|
<li class="fragment fade-up"><b>Authorize Schott blank order</b> (protect schedule)</li>
|
|||
|
|
<li class="fragment fade-up">Align on next steps: ICD + reference frame concept + support detailed design</li>
|
|||
|
|
</ul>
|
|||
|
|
<aside class="notes">Stop here; go to backup for Q&A.</aside>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<!-- Backup marker -->
|
|||
|
|
<section>
|
|||
|
|
<div class="section-divider">
|
|||
|
|
<div class="kicker">Backup</div>
|
|||
|
|
<div class="title">Appendix</div>
|
|||
|
|
<div style="color: rgba(232,238,247,0.7)">Detailed tables, parameters, and trades.</div>
|
|||
|
|
</div>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<section>
|
|||
|
|
<h2>Backup: Option B Optimized Parameters (excerpt)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li>lateral_inner_angle 27.88°</li>
|
|||
|
|
<li>lateral_outer_angle 13.19°</li>
|
|||
|
|
<li>lateral_inner_pivot 7.41 mm</li>
|
|||
|
|
<li>lateral_outer_pivot 11.53 mm</li>
|
|||
|
|
<li>whiffle_min 58.90 mm</li>
|
|||
|
|
<li>blank_backface_angle 4.30°</li>
|
|||
|
|
</ul>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
<section>
|
|||
|
|
<h2>Backup: Requirement Matrix (excerpt)</h2>
|
|||
|
|
<ul>
|
|||
|
|
<li>REQ‑01 WFE 40°: 6.59 nm ≤ 22 nm ✓</li>
|
|||
|
|
<li>REQ‑01 WFE 60°: 14.79 nm ≤ 22 nm ✓</li>
|
|||
|
|
<li>REQ‑06 Mass: ~95 kg ≤ 103.5 kg ✓</li>
|
|||
|
|
<li>REQ‑09 Thermal/STOP: pending (FDR)</li>
|
|||
|
|
</ul>
|
|||
|
|
</section>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<div class="atomaste-footer">
|
|||
|
|
<div class="atomaste-chip">
|
|||
|
|
<img src="/Media/Atomaste_light_grey_Logo.svg" alt="Atomaste" />
|
|||
|
|
<span>CDR · GigaBIT M1 Mirror</span>
|
|||
|
|
</div>
|
|||
|
|
<div class="atomaste-chip"><span class="slide-number"></span></div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<script src="https://unpkg.com/reveal.js@5/dist/reveal.js"></script>
|
|||
|
|
<script>
|
|||
|
|
// Lightweight gate (not real security): require localStorage marker from enter.html
|
|||
|
|
try {
|
|||
|
|
const ok = localStorage.getItem('atomaste_deck_gof_cdr') === 'stratosphere';
|
|||
|
|
if (!ok) window.location.href = './enter.html';
|
|||
|
|
} catch (e) {
|
|||
|
|
window.location.href = './enter.html';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
document.getElementById('today').textContent = new Date().toLocaleDateString(undefined, {
|
|||
|
|
year: 'numeric', month: 'short', day: '2-digit'
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
const deck = new Reveal({
|
|||
|
|
hash: true,
|
|||
|
|
transition: 'fade',
|
|||
|
|
backgroundTransition: 'fade',
|
|||
|
|
width: 1280,
|
|||
|
|
height: 720,
|
|||
|
|
margin: 0.08,
|
|||
|
|
controls: true,
|
|||
|
|
progress: true,
|
|||
|
|
center: false
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
deck.initialize().then(() => {
|
|||
|
|
const updateNum = () => {
|
|||
|
|
const idx = deck.getIndices();
|
|||
|
|
const current = idx.h + 1;
|
|||
|
|
const total = deck.getTotalSlides();
|
|||
|
|
const el = document.querySelector('.slide-number');
|
|||
|
|
if (el) el.textContent = current + ' / ' + total;
|
|||
|
|
};
|
|||
|
|
deck.on('slidechanged', updateNum);
|
|||
|
|
updateNum();
|
|||
|
|
});
|
|||
|
|
</script>
|
|||
|
|
</body>
|
|||
|
|
</html>
|