0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ぷよクエをたのしく!アプリをつくってみよう!(UI操作編)

0
Last updated at Posted at 2026-05-05

UIを移動したい

ここまでHTML/CSS/DOMのAPIを使うと画面(UI)が作れることがわかった。
作ったUIは同じ位置に居座っていて、スマホのアプリのように全画面を利用するなら問題にならないけど、別のUIを作ったとたんに「移動したい」と思い始める。

UIの移動に必要な要件を考えてみる

たとえば、こんなUIを考えてみる。

■UIイメージ
image.png
※全て、HTML/CSS/DOM APIで作っています。

「UIを移動する」というのは、「表示開始座標」を「なんとかして更新」できたらいいことになる。
ここでは、
・UIイメージの「*」を「つかんで」
・つかんでいる間
・表示開始座標を更新
を実装することを考えてみる。

タグの構成

操作対象のタグを「BUTTON」タグとして用意する。こんな感じ。

<!--ダイアログコンテナ-->
<div id="charListArea" class="charListArea">

  <!--移動するときの操作対象タグ-->
  <div class="char-dlg-dlg-title-00">
    <button class="char-dlg-dlg-tool-b0" id="char-dlg-dlg-tool-b0" title="DragMove">[*]</button>
  </div>

  <!--ダイアログ-->
  <dialog id="char-dlg" class="char-dlg">
    <!--ダイアログ内容-->
    <div class="char-dlg-content" id="char-dlg-content">
    ...
    </div>
  </dialog>
</div>

この例では「char-dlg-dlg-tool-b0」を「タップ(クリック)」したときに、UIを移動することにする。

UI移動の実装

実は、Geminiに「UIを移動したい」と質問をなげると簡単に教えてくれる。

イベントハンドラの利用

以下のイベントハンドラを利用する。

ハンドラ イベント発生要因
onpointerdown タップ(クリック)したときに通知
onpointermove タグの内部をポインタが移動しているとき通知
onpointerup タップ(クリック)を終了したときに通知

※タップ(クリック)を終了したとき・・・手動操作を終了したとき。

それぞれのタイミングにおいて、適切な処理を実装する。

イベントハンドラでの処理

各イベントハンドラで、移動開始・移動中・移動終了、の処理を実装する。

ハンドラ イベント処理
onpointerdown elem.setPointerCapture(e.pointerId)
onpointermove 移動量を計算し、UIの表示位置を更新
onpointerup elem.releasePointerCapture(e.pointerId)

※elem:タップ(クリック)したタグのElement
※e.pointerId:イベントに通知される値
※setPointerCapture:移動系イベントを指定Elementのみに通知するようにする。
※releasePointerCapture:setPointerCaptureを解除。

次回は、UI座標の保存と復帰

せっかく、UI移動できるようなったけど、ブラウザを開くたびに初期状態にもどってしまうのは、orz。
ブラウザ内に値を保存するしくみを聞いてみると、いろいろあるらしいけど、JsStoreというパッケージをつかってみることした。

つづく。
https://qiita.com/puyon/items/314d4e968b035166fa58

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?