// Initialize embed api const p3d = new P3dEmbedApi(document.getElementById('p3d-embed')); p3d.listVariants().then((variantSets) => { document.getElementById('container').style.display = 'block'; document.getElementById('loading').style.opacity = '0.0'; document.getElementById('loading').style.visibility = 'hidden'; // Display a set in the UI by index const displaySet = (setIndex) => { for (let i = 0; i < variantSets.length; i++) { const isActive = i === setIndex; // Only display options for the selected set const setOptions = document.getElementById(`variantset-${i}`); setOptions.style.display = isActive ? 'flex' : 'none'; // Mark button active const setButton = document.getElementById(`variantset-${i}-button`); if (isActive) { setButton.classList.add('active'); } else { setButton.classList.remove('active'); } } }; // Initially display first set displaySet(0); variantSets.forEach((variantSet, setIndex) => { const setButton = document.getElementById(`variantset-${setIndex}-button`); setButton.onclick = () => { displaySet(setIndex); }; variantSet.variants.forEach((variant, variantIndex) => { const variantButton = document.getElementById(`variant-${setIndex}-button-${variantIndex}`); variantButton.onclick = function () { variant.select(); }; }); }); }); // Add spin toggle button const spinToggle = document.getElementById('spin-toggle'); function toggleSpin() { p3d.getSpin().then((didSpin) => { const newSpin = !didSpin; if (newSpin) { spinToggle.classList.add('active'); } else { spinToggle.classList.remove('active'); } p3d.setSpin(newSpin); }); } spinToggle.onclick = toggleSpin; // Spin by default toggleSpin();
<script src="https://cfstatic.p3d.in/embed-api/v2/p3d-embed-api.js"></script> <div id="loading"> <div class="loading-content"> <div class="spinner-dual-ring"></div> Loading... </div> </div> <div class="container" style="display:none;" id="container"> <iframe src="https://p3d.in/e/rFdjp+api+load+controls,variants,hotspots-hidden+bg-222222ff" border="0" frameborder="0" height="80%" width="90%" allowtransparency="true" id="p3d-embed"></iframe> <div class="variant-set-container"> <div id="controls" class="controls"> <b class="controls-label" display="block">Product Options ></b> <div class="variant-set"> <button class="button set-button" id="variantset-0-button">Models</button> </div> <div class="variant-set"> <button class="button set-button" id="variantset-1-button">Wood</button> </div> <div id="spin-toggle"> <button class="button spin-toggle">↻</button> </div> </div> <div id="variantset-0" class="variantholder"> <button class="button variant-button" id="variant-0-button-0"><img src="https://cfstatic.p3d.in/embed-api/img/Small-ABLENOOK-Unit.png" class="model-image"> <br/><label class="option-label">3 Bay</label> </button> <button class="button variant-button" id="variant-0-button-1"><img src="https://cfstatic.p3d.in/embed-api/img/Large-ABLENOOK-Unit.png" class="model-image"> <br/><label class="option-label">6 Bay</label></button> </div> <div id="variantset-1" class="variantholder"> <button class="button variant-button" id="variant-1-button-0"><img src="https://cfstatic.p3d.in/embed-api/img/Oak-Wood-Texture.png" class="material-image"><br/> <label class="option-label">Oak</label></button> <button class="button variant-button" id="variant-1-button-1"><img src="https://cfstatic.p3d.in/embed-api/img/Hardwood-Texture.png" class="material-image"> <br/><label class="option-label">Hardwood</label></button> <button class="button variant-button" id="variant-1-button-2"><img src="https://cfstatic.p3d.in/embed-api/img/Birch-Wood-Texture.png" class="material-image"> <br/><label class="option-label">Birch</label></button> </div> </div> </div>
.button { color: white; text-align: center; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: auto 0.25em; background-color: rgba(116, 116, 116, 0); border: none; } .variant-button { font-size: 180%; padding: 0.1em; margin: auto 0.1em; background-color: rgba(116, 116, 116, 0); width: 18%; height: 78%; } .variant-button:hover { transform: scale(1.15); transition-duration: 0.2s; } .set-button { font-size: 140%; margin: auto; background-color: rgb(155, 155, 155); width: 100%; height: 100%; min-height: 1.5em; } .set-button:hover, .set-button.active { transform: translate3d(0px, -3px, 0px); background-color: rgb(128, 128, 128); animation-timing-function: ease-out; transition-duration: 0.3s; } .set-button.active { font-weight: bold; } #spin-toggle { margin-left: auto; background-color: rgb(155, 155, 155); transition-duration: 0.25s; } #spin-toggle.active { background-color: rgb(128, 128, 128); }#spin-toggle:hover { background-color: rgb(100, 100, 100); } .spin-toggle { font-size: 200%; font-weight: bold; } .container { position: absolute; width: 98%; height: 98%; margin: auto; } .controls { display: flex; width: 100%; height: 25%; min-height: 2em; background-color: rgb(197, 197, 197); } .controls-label { color: rgb(0, 0, 0); text-align: center; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-size: 140%; padding-left: 0.2em; margin: auto 0.25em; width: auto; height: 50%; } .variant-set { padding-left: 1.5%; height: 75%; margin: auto 0; } .variant-set-container { background-color: lightgray; width: 90%; height: 40%; margin: auto; } .variantholder { display: flex; justify-content: center; justify-items: center; height: 40%; width: 100%; } .option-label { width: 100%; height: 10%; margin: auto -0.25em; color: black; font-size: 65%; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } .model-image { width: auto; height: auto; max-height: 75%; } .material-image { width: auto; height: auto; max-height: 75%; border-radius: 15%; } iframe { display: block; margin: auto; height: 60%; } #loading { position:absolute; left: 0; top:0; width: 100%; height: 100%; background-color: rgb(197, 197, 197); color: white; font-size: xx-large; z-index: 10; visibility: visible; opacity: 1; transition: .5s ease-out } .loading-content { margin: 0; position: absolute; top: 50%; left: 50%; margin-right: -50%; transform: translate(-50%, -50%) } .spinner-dual-ring { margin: auto; width: 80px; height: 80px; } .spinner-dual-ring:after { content: " "; display: block; width: 64px; height: 64px; border-radius: 50%; border: 6px solid #fff; border-color: #fff transparent #fff transparent; animation: spinner-dual-ring 1.2s linear infinite; } @keyframes spinner-dual-ring { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }