本文へスキップ

水面の波紋

クリック/タップした場所から波紋が広がる。複数の波紋が同時に重なり合い、揺らぎのある輪郭と加算合成の光の縁でシェーダーなしでも水面らしさを出す。ドラッグでなぞると航跡状に波紋が連続発生する。

ENGLISH

Water Ripple Effect

  • JS
  • Canvas
約161行動きと演出 / ジェネラティブ演出 の一覧 →

プレビュー

クリック

操作クリック/タップで動きます。

仕様書

向く場面
  • 和風・水をテーマにした LP のヒーロー
  • タップ反応のある待機画面・スプラッシュ
  • WebGL を避けたい環境での水面表現
避ける場面
  • 本文の背景(輪郭が文字に重なる)
  • 操作の結果を伝える必要がある場面
  • 明るい背景の上(lighter 合成の縁が見えない)
構成要素
  • 水面(canvas)
  • 波紋の輪
  • 操作ヒント
持っている状態
  • 通常
キーボード

マウス・タッチ専用(タップ/ドラッグで波紋)。装飾で代替操作は不要

支援技術

canvas は aria-hidden の装飾で情報を持たない。reduce 設定では環境波紋を止め、操作由来の波紋が消えたら描画も止める。visibilitychange で停止

動き

波紋は 90px/s で広がり 2.4s で消える。同心2輪を sin で歪ませ lighter 合成。3.2〜5.8s おきに環境波紋が自動発生

デザインの要点

  • 輪は真円でなく sin(6θ) で 1.6px 歪ませ、歳とともに歪みを減らす。真円の同心円は水面ではなく図形に見える
  • 同心2輪を 12px ずらし内側を半透明にする。1本線だとレーダーの輪になる
  • ドラッグ中は 20px 以上・90ms 以上あいたときだけ足す。毎 move で足すと輪が重なって白く飽和する
  • 波紋は最大 14 個で古いものから捨てる。線分 48×2 本×14 個が毎フレームの描画上限
実装メモ

本物のWebGL水面シェーダーではなく、同心円の輪をsin波でわずかに歪ませてlighter合成する近似描画です。軽量でsrcdoc/iframeのようなWebGL非対応が不安な場所でも確実に動きます。

コード(コピーして使えます)

<div class="wr-wrap">
  <canvas class="wr-canvas" aria-hidden="true"></canvas>
  <p class="wr-hint">タップして波紋を広げる</p>
</div>

タグ

同じカテゴリ「ジェネラティブ演出」のほかのパーツ

関連パーツ