"use client"; import { useEffect, useRef } from "react"; export default function GreywaterExampleSection() { const rootRef = useRef(null); useEffect(() => { const root = rootRef.current; if (!root) return; const cleanups: Array<() => void> = []; const sliders = Array.from(root.querySelectorAll(".image-slider")); sliders.forEach((sliderElement) => { const slider = sliderElement as HTMLElement; const viewport = slider.querySelector( ".image-slider-viewport", ) as HTMLElement | null; const track = slider.querySelector(".image-slider-track") as HTMLElement | null; const dotsWrap = slider.querySelector( ".image-slider-dots", ) as HTMLElement | null; const pages = Array.from( slider.querySelectorAll(".image-slider-page"), ) as HTMLElement[]; if (!viewport || !track || !dotsWrap || pages.length === 0) return; let page = 0; let dragging = false; let isHover = false; let startX = 0; let deltaX = 0; let timer: number | null = null; const autoPlayMs = Number(slider.dataset.autoplay ?? "4500"); const canSlide = pages.length > 1; if (!canSlide) { dotsWrap.style.display = "none"; } else { dotsWrap.style.display = ""; } const render = () => { track.style.transform = `translateX(-${page * 100}%)`; Array.from(dotsWrap.querySelectorAll("button")).forEach((dot, index) => { dot.classList.toggle("is-active", index === page); }); }; const goTo = (nextPage: number) => { if (!canSlide) return; if (nextPage < 0) page = pages.length - 1; else if (nextPage >= pages.length) page = 0; else page = nextPage; render(); }; const stopTimer = () => { if (timer !== null) { window.clearInterval(timer); timer = null; } }; const startTimer = () => { stopTimer(); if (!canSlide || dragging || isHover) return; timer = window.setInterval(() => { page = page + 1 >= pages.length ? 0 : page + 1; render(); }, autoPlayMs); }; const dotButtons = pages.map((_, index) => { const button = document.createElement("button"); button.type = "button"; button.className = "image-slider-dot"; const onClick = () => { goTo(index); startTimer(); }; button.addEventListener("click", onClick); dotsWrap.appendChild(button); cleanups.push(() => { button.removeEventListener("click", onClick); }); return button; }); const onMouseEnter = () => { isHover = true; stopTimer(); }; const onMouseLeave = () => { isHover = false; startTimer(); }; const onPointerDown = (event: PointerEvent) => { if (!canSlide) return; dragging = true; startX = event.clientX; deltaX = 0; viewport.setPointerCapture(event.pointerId); }; const onPointerMove = (event: PointerEvent) => { if (!dragging) return; deltaX = event.clientX - startX; }; const onPointerUp = () => { if (!dragging) return; dragging = false; if (deltaX > 50) goTo(page - 1); if (deltaX < -50) goTo(page + 1); deltaX = 0; startTimer(); }; viewport.addEventListener("mouseenter", onMouseEnter); viewport.addEventListener("mouseleave", onMouseLeave); viewport.addEventListener("pointerdown", onPointerDown); viewport.addEventListener("pointermove", onPointerMove); viewport.addEventListener("pointerup", onPointerUp); viewport.addEventListener("pointercancel", onPointerUp); cleanups.push(() => { stopTimer(); viewport.removeEventListener("mouseenter", onMouseEnter); viewport.removeEventListener("mouseleave", onMouseLeave); viewport.removeEventListener("pointerdown", onPointerDown); viewport.removeEventListener("pointermove", onPointerMove); viewport.removeEventListener("pointerup", onPointerUp); viewport.removeEventListener("pointercancel", onPointerUp); dotButtons.forEach((button) => button.remove()); }); render(); startTimer(); }); return () => { cleanups.forEach((cleanup) => cleanup()); }; }, []); const contentsHtml = `

중수도 사례  

 

경기도 안산시

   

사업명

  • 안산시 중수도 설치사업
   

사업목적

  • 수자원을 효율적으로 활용하여 지속가능성 도모 및 물 절약 실현
   

사업 주요 내용

  • 총사업비 : 81억원
  • 처리공법 : MBLM공법
   

사업량

시설명 이용용도 공급량(㎥)
경기테크노파크청소·화장실용수40㎥/일
올림픽수영장청소·화장실/세척·살수용수35㎥/일
와스타디움청소·화장실/조경용수90㎥/일
호수실내수영장청소·화장실/조경/세척·살수용수50㎥/일
한양대학교 에리카캠퍼스청소·화장실용수370㎥/일
 

경기도 용인시

   

사업명

  • 용인시 중수도 설치사업
   

사업목적

  • 물 부족 등의 비상상황에 대한 대비, 하수라도 사용할 집결 등 수자원의 효율적 활용
   

사업 주요 내용

  • 총사업비 : 40억원
  • 처리공법 : MBLM공법
   

사업량

시설명 이용용도 공급량(㎥)
여성회관청소·화장실용수35㎥/일
수지아르피아청소·화장실용수35㎥/일
지상작전사령부청소·화장실/조경/세척·살수용수53㎥/일
 

경기도 평택시

   

사업명

  • 평택시 중수도 설치사업
   

사업목적

  • 수자원을 효율적으로 활용하여 지속가능성 도모 및 물 절약 실현
   

사업 주요 내용

  • 총사업비 : 21억원
  • 처리공법 : MBLM공법
   

사업량

시설명 이용용도 공급량(㎥)
평택대학교청소·화장실용수50㎥/일
`; return (
); }