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

Xu hướng nội thất 2024- Không gian chữa lành

Xu hướng nội thất 2024 – Không gian chữa lành Xu hướng nội thất năm...

Xu hướng thiết kế nội thất năm 2024: Đón Đầu Xu Thế Tương Lai

Xu Hướng Thiết Kế Nội Thất Năm 2024: Đón Đầu Xu Thế Tương Lai Năm...

Cải tạo nhà đẹp – Những lưu ý khi cải tạo lại nhà cũ

Cải tạo nhà đẹp Cải tạo nhà đẹp mang lại không gian sống mới tiện...

Nhà vệ sinh hiện đại và cách hoàn thiện

Nhà vệ sinh hiện đại Nhà vệ sinh hiện đại đang là xu thế thiết...

Kinh nghiệm lựa chọn vật liệu nội thất cho không gian sống (P2)

Kinh nghiệm lựa chọn vật liệu nội thất Kinh nghiệm lựa chọn vật liệu nội...

Vật liệu chống thấm – Cách sử dụng ( P2)

Vật liệu chống thấm – Cách sử dụng Ngày nay với sự phát triển của...

Màu sắc năm 2024 Pentone công bố: Peach Fuzz

Màu sắc năm 2024 Pantone công bố: Peach Fuzz Màu sắc năm 2024 Peach Fuzz...

Vật liệu chống thấm – Cách sử dụng (P1)

VẬT LIỆU CHỐNG THẤM TRONG XÂY DỰNG Vật liệu chống thấm trong xây dựng là...

VẬT LIỆU HOÀN THIỆN NỘI THẤT: NHỮNG ĐIỀU CẦN BIẾT (P1)

Vật liệu hoàn thiện nội thất Vật liệu hoàn thiện nội thất là một trong...

Ánh sáng trong trang trí nội thất

Ánh sáng trong trang trí nội thất Ánh sáng là một trong những yếu tố...

Đại sảnh villa – Không gian mở đầu

Đại sảnh trong thiết kế nội thất villa – Không gian đầu tiên gây ấn...

Nội thất phòng ngủ – Không gian nghỉ ngơi và thư giãn của bạn

Nội thất phòng ngủ – Không gian nghỉ ngơi và thư giãn của bạn Phòng...

(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); })();