홀드

Holds

동작 중간에 일부러 완전히 멈춰서 그 포즈나 상태를 눈에 각인시키는 기법. 쉬지 않고 계속 움직이기만 하면 오히려 아무것도 눈에 안 남습니다.

다른 이름: Hold (animation)Held frame
···
html
<div class="rows">
  <div class="row">
    <span class="tag">No hold</span>
    <div class="track"><i class="ball nohold"></i></div>
  </div>
  <div class="row">
    <span class="tag">Hold</span>
    <div class="track"><i class="ball hold"><i class="ring"></i></i></div>
  </div>
</div>
css
.rows{position:absolute;inset:14% 6%;display:flex;flex-direction:column;justify-content:space-around}
.row{display:flex;flex-direction:column;gap:8px}
.tag{font:700 10px/1 ui-monospace,monospace;color:var(--muted)}
.track{position:relative;height:26px}
.track::before{content:'';position:absolute;top:50%;left:0;right:0;height:2px;margin-top:-1px;background:var(--line)}
.ball{position:absolute;top:50%;width:22px;height:22px;margin-top:-11px;border-radius:50%;background:var(--accent)}
.nohold{animation:noHold 2.2s ease-in-out infinite}
.hold{background:var(--accent-3);animation:withHold 2.2s ease-in-out infinite}
.ring{position:absolute;inset:-6px;border:2px solid var(--accent-2);border-radius:50%;opacity:0;animation:ringPulse 2.2s steps(1) infinite}
@keyframes noHold{0%{left:6%}50%{left:calc(94% - 22px)}100%{left:6%}}
@keyframes withHold{
  0%{left:6%}
  18%{left:calc(46% - 11px)}
  42%{left:calc(46% - 11px)}
  60%{left:calc(94% - 22px)}
  84%{left:calc(94% - 22px)}
  100%{left:6%}
}
@keyframes ringPulse{
  0%,18%{opacity:0}
  18.1%,42%{opacity:1}
  42.1%,60%{opacity:0}
  60.1%,84%{opacity:1}
  84.1%,100%{opacity:0}
}

쉬지 않고 계속 움직이는 애니메이션은 정신없고 산만하게 느껴집니다. 애니메이터는 중요한 포즈나 표정에서 일부러 여러 프레임을 완전히 정지시켜 관객의 눈이 그 순간을 따라잡고 의미를 이해할 시간을 줍니다 — 코미디의 "타이밍"도 결국 이 홀드에서 나옵니다.

UI에서는 상태 변화 직후의 짧은 정지가 홀드입니다. 토글이 켜졌을 때, 저장이 완료됐을 때 곧바로 다음 애니메이션으로 넘어가지 않고 몇백 ms 멈춰서 "이 변화가 일어났다"는 걸 각인시킵니다.

데모 위쪽 레인은 홀드 없이 계속 왕복만 합니다 — 쉴 새 없이 바빠서 어디에 주목해야 할지 알기 어렵습니다. 아래쪽 레인은 이동 후 두 지점에서 분명히 멈추고, 멈춘 동안 테두리 링이 반짝여 "지금 정지 중"임을 알려줍니다.

언제 쓰나

저장 완료, 토글 전환처럼 사용자가 방금 일으킨 변화를 확인시켜야 할 때 씁니다. 홀드가 너무 길면 반응이 느린 UI처럼 느껴지니 200~500ms 정도로 짧게.