Tin tức

Décor chia sẽ những kiến thức sâu rộng, trong từng vấn đề công việc, chia sẽ quá trình thực hiện thi công, chia sẽ chuyên sâu những công việc thực hiện tới khách hàng.

DÉCOR YOUR REFLECTION

Bếp Indochine và không gian sống

Bếp Indochine và không gian sống Bếp là không gian quan trọng nhất trong ngôi...

Phòng ngủ hiện đại sang trọng – 9 mẫu đang thịnh hành năm 2023

Phòng ngủ hiện đại sang trọng – Xu hướng thiết kế nội thất 2023 Phòng...

7 điều cần lưu ý khi thiết kế nội thất

7 điều cần lưu ý khi thiết kế nội thất 7 điều lưu ý khi...

Thiết kế Classic – Vẻ đẹp cổ điển

Thiết kế Classic hiện nay: Sự giao hưởng giữa cổ điển và hiện đại Thiết...

Các loại da hiện nay – Ứng dụng trong trang trí nội thất

Các loại da hiện nay và cách chọn da phù hợp cho nội thất Da...

Thiết kế nội thất mang lại không gian sống tốt hơn hiện nay

Thiết kế nội thất nhà đẹp không gian sống mới Thiết kế nội thất nhà...

Giấy dán tường trong nội thất

Giấy dán tường trong nội thất hiện nay Giấy dán tường trong nội thất là...

Thiết kế phòng khách căn hộ hiện đại

Thiết kế phòng khách căn hộ chung cư hiện đại – Xu hướng và lựa...

Nội thất đồng quê

Nội thất đồng quê: Phong cách thiết kế mang hơi thở của thiên nhiên Bạn...

Cách phối màu sắc cho nội thất

Cách phối màu nội thất Màu sắc là một yếu tố quan trọng trong thiết...

Xu hướng thiết kế nội thất 2023

Xu hướng trong thiết kế nội thất năm 2023 Nội thất là một phần quan...

Rèm vải hiện đại và mẹo lựa chọn phù hợp

Rèm vải hiện đại Rèm vải là một trong những phụ kiện không thể thiếu...

(function () { function initDecorFloatingToc() { const holder = document.getElementById("decorFloatingToc"); const panel = document.getElementById("decorFloatingTocPanel"); const inner = document.getElementById("decorFloatingTocInner"); const fill = document.getElementById("decorFloatingTocFill"); const thumb = document.getElementById("decorFloatingTocThumb"); const article = document.getElementById("decorArticleMain"); const links = Array.from(document.querySelectorAll(".decor-floating-toc__item")); if (!holder || !panel || !inner || !fill || !thumb || !article || !links.length) return; const items = links.map(link => { const href = link.getAttribute("href"); const target = href ? document.querySelector(href) : null; return { link, target }; }).filter(item => item.target); if (!items.length) return; function syncHolderHeight() { if (window.innerWidth <= 991) { holder.style.minHeight = "0px"; return; } holder.style.minHeight = Math.max(article.offsetHeight, panel.offsetHeight) + "px"; } function moveIndicator(link) { const innerRect = inner.getBoundingClientRect(); const linkRect = link.getBoundingClientRect(); const center = (linkRect.top - innerRect.top) + (linkRect.height / 2); thumb.style.top = center + "px"; fill.style.height = center + "px"; } function setActive(item) { links.forEach(link => link.classList.remove("active")); item.link.classList.add("active"); moveIndicator(item.link); } function getCurrentItem() { const triggerY = window.innerHeight * 0.42; let current = items[0]; for (const item of items) { const rect = item.target.getBoundingClientRect(); if (rect.top <= triggerY) { current = item; } else { break; } } return current; } function updateFloatingPosition() { if (window.innerWidth <= 991) { panel.style.position = "relative"; panel.style.top = "auto"; panel.style.left = "auto"; panel.style.width = "100%"; return; } const holderRect = holder.getBoundingClientRect(); const holderTopDoc = window.scrollY + holderRect.top; const holderBottomDoc = holderTopDoc + holder.offsetHeight; const panelHeight = panel.offsetHeight; const viewportPadding = 28; const preferredTop = (window.innerHeight - panelHeight) / 2; const fixedTop = Math.max( viewportPadding, Math.min(preferredTop, window.innerHeight - panelHeight - viewportPadding) ); const desiredTopDoc = window.scrollY + fixedTop; const maxTopDoc = holderBottomDoc - panelHeight; if (desiredTopDoc <= holderTopDoc) { panel.style.position = "absolute"; panel.style.top = "0px"; panel.style.left = "0px"; panel.style.width = "100%"; } else if (desiredTopDoc >= maxTopDoc) { panel.style.position = "absolute"; panel.style.top = Math.max(0, holder.offsetHeight - panelHeight) + "px"; panel.style.left = "0px"; panel.style.width = "100%"; } else { panel.style.position = "fixed"; panel.style.top = fixedTop + "px"; panel.style.left = holderRect.left + "px"; panel.style.width = holderRect.width + "px"; } } let ticking = false; function updateAll() { syncHolderHeight(); updateFloatingPosition(); setActive(getCurrentItem()); ticking = false; } function requestUpdate() { if (!ticking) { window.requestAnimationFrame(updateAll); ticking = true; } } if (!holder.dataset.decorInit) { window.addEventListener("scroll", requestUpdate, { passive: true }); window.addEventListener("resize", requestUpdate); window.addEventListener("load", requestUpdate); links.forEach(link => { link.addEventListener("click", function () { setTimeout(requestUpdate, 180); }); }); if (document.fonts && document.fonts.ready) { document.fonts.ready.then(requestUpdate); } holder.dataset.decorInit = "true"; } requestUpdate(); } document.addEventListener("DOMContentLoaded", initDecorFloatingToc); document.body.addEventListener("experimental-flatsome-pjax-request-done", initDecorFloatingToc); })();