Mosaic컴포넌트 카탈로그Repository
← 카탈로그
display

Glass Thermometer (Part 2)

#glassmorphism#draggable#gsap#plasma#svg-filter#dark-mode#animation#temperature
의존성
gsap@3.12.2, gsap/Draggable@3.12.2
추가일
2026-06-11
출처
원본 보기 ↗
라이브 미리보기새 탭에서 열기 ↗
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Glass Thermometer | @coding.stella</title>
  <link rel="stylesheet" href="./style.css">
</head>

<body>

  <svg style="position:absolute; width:0; height:0;">
    <defs>
      <filter id="turbulent-displace" colorInterpolationFilters="sRGB" x="-20%" y="-20%" width="140%" height="140%">
        <feTurbulence type="turbulence" baseFrequency="0.02" numOctaves="10" result="noise1" seed="1" />
        <feOffset in="noise1" dx="0" dy="0" result="offsetNoise1">
          <animate attributeName="dy" values="700; 0" dur="6s" repeatCount="indefinite" calcMode="linear" />
        </feOffset>
        <feTurbulence type="turbulence" baseFrequency="0.02" numOctaves="10" result="noise2" seed="1" />
        <feOffset in="noise2" dx="0" dy="0" result="offsetNoise2">
          <animate attributeName="dy" values="0; -700" dur="6s" repeatCount="indefinite" calcMode="linear" />
        </feOffset>
        <feTurbulence type="turbulence" baseFrequency="0.02" numOctaves="10" result="noise3" seed="2" />
        <feOffset in="noise3" dx="0" dy="0" result="offsetNoise3">
          <animate attributeName="dx" values="490; 0" dur="6s" repeatCount="indefinite" calcMode="linear" />
        </feOffset>
        <feTurbulence type="turbulence" baseFrequency="0.02" numOctaves="10" result="noise4" seed="2" />
        <feOffset in="noise4" dx="0" dy="0" result="offsetNoise4">
          <animate attributeName="dx" values="0; -490" dur="6s" repeatCount="indefinite" calcMode="linear" />
        </feOffset>
        <feComposite in="offsetNoise1" in2="offsetNoise2" result="part1" />
        <feComposite in="offsetNoise3" in2="offsetNoise4" result="part2" />
        <feBlend in="part1" in2="part2" mode="color-dodge" result="combinedNoise" />
        <feDisplacementMap in="SourceGraphic" in2="combinedNoise" scale="30" xChannelSelector="R"
          yChannelSelector="B" />
      </filter>
    </defs>
  </svg>

  <div id="app">
    <div class="thermostat glass-panel">
      <div class="blur-circle" id="blurCircle"></div>
      <div class="thermostat-inner">
        <div class="glass-noise"></div>

        <div class="scale-container" id="scaleContainer"></div>

        <div class="track" id="track">
          <div class="mercury" id="mercury"></div>
        </div>
        <div class="knob-zone">
          <div class="knob" id="knob"></div>
        </div>
      </div>
    </div>
  </div>
  <script src='https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js'></script>
  <script src='https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/Draggable.min.js'></script>
  <script src="./script.js"></script>

</body>

</html>