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

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

ただいまの
回答率

90.38%

  • JavaScript

    21546questions

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

  • jQuery

    8566questions

    jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

ウィンドウにカーソルが存在することを検知する方法はありますか?

受付中

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 171

massuguda

score 6

実現したいこと

ブラウザの変更を検知したいです。

たとえばタブの変更ならばvisibilitychangeで検知できますよね。

しかし、2つのブラウザで同じサイトが表示中(タブ選択中)なときに、アクティブなブラウザを変更しても、visibilitychangeではそれを検知できませんよね。

もしそれが検知できればベストです。

代替手段として実現したいこと

しかしできなそうなので、代替手段として「ブラウザにカーソルが乗ったとき(スマホなら指が乗ったとき)」というのを検知できればと考えました。

これならば、アクティブなブラウザを変更して、それを操作しようとしたときに検知できるので、まぁ、ぎりぎりかなと。

このような方法はありますでしょうか?

なぜ実現したいのか

ちなみにそもそも目的は、一方のブラウザで変更したデータを、もう一方にも反映させるためです。

そのために下記➁と➄での検知が必要だと考え、質問致しました。

全体の流れとしては、

➀:Chromeを非アクティブにしたら
➁:それを検知してその時間をajaxで登録して
➂:Firefoxをアクティブにして何かデータを更新して
➃:Chromeをアクティブに戻したら
➄:その変更を検知して➀と➂の時間を比べて、
➅:もし➂の時間が後なら(Chromeで更新されてないデータがあるなら)、Chromeでサイトを再読み込みして、最新状態に保つ!

のような機能をイメージしています。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

これという策が思いついていない中ではありますが、
もしかしたらこうやったらできるかも?という可能性のみのヒント回答です。

カーソル位置を把握する方法はあります。

JavaScriptはイベント駆動ですので、「押された」とか「変わった」とか「読み込まれた」とかの何かしらのアクションが必要です。

mousemoveイベントはウィンドウ内にないと拾えません。

ですので、例えばsetInterval()で監視しておき、一定期間「mousemoveイベントが起きていない」のを察知することを以て「今はウィンドウ内にカーソルがない」と判断できるかもしれません。

ただ「ウィンドウ内にあるけど全く動かしていない」のと判別する必要があります(ここが難しそう)

あと、要件によってはdocument.hasFocus()とか使えるかも。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/12 05:32

    カーソル位置からなんとかできるかもしれませんね。ありがとうございます。

    キャンセル

+2

双方向通信ですかね。
ASP.NET なら SignalR で比較的簡単に実現できます。
https://developer.mozilla.org/ja/docs/Web/API/WebSockets_API

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/12 09:47

    サーバー側のデータの更新ですよね?
    再読み込みで最新状態が取れるならそうだと考えましたが

    キャンセル

  • 2019/07/12 19:29

    サーバー側のデータの更新でしたね。失礼しました。で話を戻しまして、本件にどうかかわってくるかについてですが、

    「たとえば双方向通信として有名なcometの場合、PHPをループさせた状態で待機して、サーバーに更新があればループをやめて端末を更新する」という流れになるじゃないですか?

    このようなご説明でもって、仰るASPNETとやらを教えていただけませんでしょうか?お手間とらせてすみませんが。

    キャンセル

  • 2019/07/16 17:26

    自動的に複数の基盤技術が使われるためどれとは言えないです。
    リンク先にもあるし、検索すれば出てくるので調べてみてはどうでしょうか?
    https://qiita.com/mash0510/items/a36f4d341edc50064d90
    いずれにしても ASP.NET でないなら使えないです。

    キャンセル

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

  • ただいまの回答率 90.38%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • JavaScript

    21546questions

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

  • jQuery

    8566questions

    jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。