1521549829 javascriptについてです。


添付画像はchromeのデベロッパーツールを使っているときの画面の一部ですが、
右上の四角のアイコンをクリックし、カーソルをページ内の要素上に合わせると、
要素の上に、要素と同サイズの半透明の要素?を表示し、
要素のサイズやclassなどをツールチップで表示します。

これと同じ事をjavascriptでしたいのですが、
参考になるサイトはありませんでしょうか。

できれば、jqueryを使わないタイプが良いのですが、
無ければ、jqueryを使うタイプでも構いません。

宜しくお願い致します。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2018/03/27 21:45:06
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:Cherenkov No.1

回答回数1504ベストアンサー獲得回数493

tooltipというキーワードでライブラリを検索すればいろいろ見つかります。
jqueryに依存しないのはこれとか
Tippy.js - Vanilla JS Tooltip and Popover Library https://atomiks.github.io/tippyjs/

【JavaScript】ツールチップを表示させる超軽量ライブラリ[Tippy.js]の使い方 - ONZE http://on-ze.com/archives/7310

id:worldtravel

ありがとうございます。
ただ、あらかじめ設定した部分にツールチップを表示したいだけではないのです。
ページ内の全ての要素でマウスオーバーすると表示する方法を知りたいのです。

2018/03/21 09:49:23
id:worldtravel

わかりにくくて申し訳ありません。

添付画像の場合ですと、「メール」の上にカーソルを合わせていますが、

そのとき、

「メール」の上に、透過された青いオーバーレイが表示され、

「メール」の要素のタグ名、サイズなどがツールチップで表示されます。

もちろん、最初にidなどを付けておき、

そこにマウスオーバーしたときだけに表示したいわけではありません。

chromeの機能拡張にに組み込む予定で、

どのページでもどの要素でも機能するようにすることが目的です。

  • id:worldtravel
    自力で何とかやりたいことが出来そうになってきたので終了します。
    ありがとうございました。
  • id:a-kuma3
    ぼくも、Firefox のアドオンで似たようなことをやってるので、雰囲気だけ。

    ・document の onmousemove にリスナーを登録
    ・リスナーで、イベントの clientX/Y から document.elementFromPoint でカーソル位置にある要素を取得
    ・その要素から
     ・欲しい情報を抜き出して表示
     ・同じ位置に、半透明の要素をかぶせる

    ページやブラウザのバージョンによって document.documentElement.scrollTop が常に 0 を返す場合があるので、document.scrollingElement を使うと吉。

    iframe 内の要素に追従するのが難しい。
    document が変わるし、位置も足さなきゃいけない。
    三重、四重とか考えたくない。

    iframe は良いんだけど、frame の対応が大変。

    ::after とかの疑似要素を取得するには、なんかスペシャルな方法が要るはず(知らない)。
  • id:worldtravel
    a-kuma3さん、ありがとうございます。

    私は、document.getElementsByTagName('*') で取得した全てに
    mouseover でツールチップとオーバーレイを表示するようにしました。
    表示内容は mouseout で削除しています。

    かなり、効率悪いですかね、、、苦笑

    親の要素まで同時に動いてしまうので、困っていたのですが、
    event.stopPropagation(); という存在を見つけて解決しました。

    要素のサイズは、offsetWidth、offsetHeightで取得し、
    位置は、offsetTop、offsetLeftで取得しました。
    今のところ、問題なさそうです。

    iframe、frameは、現時点での自分の目的には必要ではないので考えておりませんでした。
    必要なときが来ましたら、ご相談させて頂きます。

    まだまだ改善しなければならない点があり、もう少し頑張ってみます。

    ありがとうございました。
  • id:a-kuma3
    >要素のサイズは、offsetWidth、offsetHeightで取得し、
    >位置は、offsetTop、offsetLeftで取得しました。
    親の要素に position: relative とかが指定されているときとか、offsetParent が document.body じゃないときには、位置は上に向かって足し算していかなきゃならないです。
    border とか box-sizing の考慮も必要です。
    なので、Element.getBoundingClientRect() を使うのが簡単です。
    つい最近も、はまりました :-)
    → http://a-kuma3.hatenablog.com/entry/trap_of_offsetLeft
  • id:worldtravel
    ありがとうございます。
    ツールチップやオーバーレイは、最初該当する要素の子要素として生成していたのですが、
    imgやinputなど思い通りにするのが大変で悩んでいたのですが、
    body直下に生成し、常にページ左上からの位置で表示するようにし、思い通りになりました。

    現在は色々なページで試しており、これから不具合が出るかもしれませんが、、、

    表示する位置は、教えて頂いた Element.getBoundingClientRect() の値と、
    window.pageXOffset、window.pageYOffset を足した値を使用してます。

    カーソルが外れた時点でツールチップなどは消しているので、
    特に問題なさそうな気はするのですが、、、

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません