質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

意見交換

クローズ

2回答

645閲覧

Webアプリ上で特殊なUIを実現したい

Kerryswap

総合スコア2

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2023/02/12 09:52

0

1

趣味でプログラミングをしている高校生です。初めてteratailを利用させていただきます。

テーマ、知りたいこと

HTML,JavaScript,CSSでフロントエンドが構成され、PC・スマホ両方で使えるようなWebアプリの制作を考えています。そのアプリの主要画面を以下のようなUIにしたいです。

  • 図形の円を、画面の座標平面上に複数描画する
  • その座標平面をスクロールやピンチインアウトでぬるぬる動かして見渡せる
  • 画面上の円をタップ・ダブルタップしたりドラッグアンドドロップすることで円のサイズや座標平面上の位置を変更したり、その円に関連付けられたオブジェクトの情報を変更したりできる

イメージとしては、Obsidianというノートアプリ(?)のグラフビューや下のGIF画像が近いです(それぞれの円同士を連結させる必要はない)。
イメージ画像

背景、状況

今のところ、私の知識内だとVueやReact等のフレームワークで対応できる気がせず、素のHTML,JavaScript で書いています。標準のHTML要素の組み合わせでは実現できなさそうなので、HTML5のCanvasを描画エンジン的に使って、JavascriptでtouchEventやmouseEventを捌きながら、requestAnimationFrameで処理することを考えていました。
しかし以下のような問題点があります。

  • touchEventやmouseEventを捌くのが大変。具体的には↓

  • シングルタップorダブルタップ、スクロールorピンチインアウトの判別

  • どの円(オブジェクト)をタップしたかはtouchEventの座標で判断するしかない(「このオブジェクトがタップされた時にこの関数を実行する」みたいなイベント駆動(であってますかね?)にしたい)

  • ブラウザの画面サイズを取得してそのサイズのCanvas要素をJavaScript で生成してるのですが、スマホ(試したのはiPhone SE 2)でCanvas上に文字を描画すると荒く見える。

  • requestAnimationFrameで毎フレーム処理するのは重くならないか

このまま現状の方法で突き進んでいいのか自信が持てないでいます。
もしこのような用途に使えそうなライブラリがあり、ご存知の方がいたら教えていただきたいです。そのようなライブラリが無いようであれば、今私が取ろうとしている実装方法の改善点をご教授いただきたいです。
例えば、、、

  • CanvasではなくWebGL(あまりよく分かっていません)を使った方がいいよ
  • そもそもこういうUIはWebアプリに適してない、〇〇というライブラリを使ってネイティブアプリで作ると良い
  • touchEvent,mouseEventはこう捌くと楽だよ

いつもは調べて解決できることが多いのですが、今回は何と検索したら良いかさえ分からなかったので初めてTeratailで質問させていただきます。見当違いなことを書いていたり伝わりづらかったりと至らない点が多いと思いますが、ご回答いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答2

#1

cx20

総合スコア4633

投稿2023/02/12 13:27

答えになっているか分かりませんが、D3.js というライブラリを調べてみると良いかもしれません。
技術的には Canvas ではなく SVG を用いたビジュアル表現が行えるライブラリになります。

■ D3.js - Data-Driven Documents
https://d3js.org/

以下のような表現が可能です。

■ Force-Directed Graph / D3
https://observablehq.com/@d3/force-directed-graph

■ Force-Directed Graph, Disjoint / D3
https://observablehq.com/@d3/disjoint-force-directed-graph

手前味噌ですが、d3.js を使ったサンプルを発掘したので、貼っておきます。

■ d3.js を使って作品を並べてみるテスト
https://cx20.github.io/jsdo.it-archives/cx20/1000/

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

Kerryswap

総合スコア2

投稿2023/03/04 14:28

#1
大変返信が遅くなり申し訳ありません!!
D3.js初めて知りました。このような表現ができるライブラリがあるのですね。探していたものピッタリではないのですが、参考にさせていただきます。ありがとうございます
作品集も拝見させていただきました。こういったグラフの形で作品を公開するのは斬新ですごく良いですね

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問