ホームページ ウェブフロントエンド jsチュートリアル JavaScriptのフォーカスイベント、マウスイベント、スクロールホイールイベントの使い方の詳しい説明_JavaScriptスキル

JavaScriptのフォーカスイベント、マウスイベント、スクロールホイールイベントの使い方の詳しい説明_JavaScriptスキル

May 16, 2016 pm 03:19 PM
javascript フォーカスイベント マウスイベント

フォーカスイベント

通常、これらのイベントは document.hasFocus() メソッドおよび document.activeElement プロパティと組み合わせて使用​​されます。主に以下が含まれます:

ぼかし: 要素はフォーカスを失い、バブルしません。 DOMFocusIn: HTML イベント フォーカスと同じですが、DOM3 では放棄され、
を使用します。 DOMFocusOut: HTML イベント ブラーと同じですが、DOM3 では廃止され、focusout
を使用します。 focus: 要素はフォーカスを取得しますが、バブルバックしません。 focusin: フォーカスを取得します。HTML イベントのフォーカスと同等ですが、バブルします。 focusout: フォーカスを失い、HTML イベントブラー
に相当します。 例:


フォーカスがページ上のある要素から別の要素に移動すると、次のイベントがトリガーされます:
window.onfocus = function () {
  console.log('focus'); //focus
  console.log(document.hasFocus()); //True
}
window.onblur = function () {
  console.log('blur'); //blur
  console.log(document.hasFocus()); //False
}
ログイン後にコピー
フォーカスアウト --> フォーカスイン --> DOMFocusOut --> DOMFocusIn

マウスイベント

9 個のマウス イベントが DOM レベル 3 イベントで定義されています:

例:
click
dblclick
mousedown:用户按下任意鼠标按钮时触发,不能通过键盘触发这个事件;
mouseup:用户释放鼠标按钮时触发,不能通过键盘触发这个事件;
mousemove:不能通过键盘触发这个事件;
mouseenter:不冒泡,且光标移动到后代元素上不会触发;
mouseleave:不冒泡,且光标移动到后代元素上不会触发;
mouseover:光标移动到后代元素上会触发;
mouseout:光标移动到后代元素上会触发;
ログイン後にコピー

同じ要素上でマウスダウン イベントとマウスアップ イベントが連続して分割された場合にのみ、クリック イベントがトリガーされます。クリック イベントが 2 回トリガーされた場合にのみ、dblclick イベントが順番にトリガーされます。
div.onmouseover = function() {
  console.log('mouseover'); //在子元素上会触发
}
div.onmouseout = function() {
  console.log('mouseout'); //在子元素上会触发
}
div.onmouseenter = function() {
  console.log('mouseenter'); //在子元素上不会触发
}
div.onmouseleave = function() {
  console.log('mouseleave'); //在子元素上不会触发
}
ログイン後にコピー
順序は次のとおりです:

マウスダウン --> マウスダウン --> dblclick

IE8 より前のバージョンでは、ダブルクリック イベントで 2 回目のマウスダウン イベントとクリック イベントがスキップされます。

ホイールイベント

クライアント領域の座標位置 clientX および clientY 属性

例:

ページ座標の位置 pageX と pageY

window.onmousemove = function() {
    clickX = event.clientX;
    clickY = event.clientY;
    var div = document.createElement("img");
    div.src = "hhh.gif"
    div.style.position = "absolute";
    div.style.width = '100px';
    div.style.left = clickX + "px";
    div.style.top = clickY + "px";
    document.body.appendChild(div);
};
ログイン後にコピー

このページの座標位置は、IE8 以前のバージョンではサポートされていません。混合モードの document.body および標準モードの document.documentElement のscrollLeft属性とscrollTop属性を使用して計算できます。

window.onclick = function() {
    clickX = event.pageX;
    clickY = event.pageY;
    var div = document.createElement("img");
    div.src = "ppp.png"
    div.style.position = "absolute";
    div.style.width = '100px';
    div.style.left = clickX + "px";
    div.style.top = clickY + "px";
    document.body.appendChild(div);
};
ログイン後にコピー

スクリーン座標位置 screenX と screenY;

この属性を通じて、画面を基準とした座標を取得できます。
if (clickX === undefined) {
  clickX = event.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);
};
if (clickY === undefined) {
  clickY = event.clientY + (document.body.scrollTop || document.documentElement.scrollTop);
};
ログイン後にコピー

修飾キー

修飾キーには Shift、Ctrl、Alt、Meta が含まれます (Windows では Windows キー、Mac では Cmd キー)。これらの属性にはブール値が含まれます。対応するキーが押された場合は false、それ以外の場合は false。例:

関連要素
var array = [];
var timing = setTimeout(showArray, 100);

window.onclick = function() {
  if (event.shiftKey) {
    array.push("shift");
  };
  if (event.ctrlKey) {
    array.push("ctrl");
  };
  if (event.altKey) {
    array.push("alt");
  };
  if (event.metaKey) {
    array.push("meta");
  };
};

function showArray() {
  var str = array.toString();
  var newP = document.createElement("p");
  newP.appendChild(document.createTextNode(str));
  document.body.appendChild(newP);
  timing = setTimeout(showArray, 1000);
}

ログイン後にコピー

event.popularTarget およびevent.target; relationTarget 属性は、関連する要素に関する情報を提供します。この属性には、mouseover イベントと Mouseout イベントの値のみが含まれます。他のイベントの値は null です。IE8 より前のバージョンでは、mouseover イベントがトリガーされると、関連する要素が IE の fromElement 属性に保存されます。 ; Mouseout イベントがトリガーされると、関連する要素が IE の toElement 属性に格納されます。

例:

例:

var dot = document.getElementById("dot");
dot.onmouseout = function (){
  console.log("mouse out from" + event.target.tagName + "to" + event.relatedTarget.tagName);
};
ログイン後にコピー
マウス ボタン

ボタン属性
function getRelatedTarget() {
  if (event.ralatedTarget) {
    return event.relatedTarget;
  } else if (event.toElement) {
    return event.toElement;
  } else if (event.fromElement) {
    return event.fromElement;
  } else {
    return null;
  }
}
ログイン後にコピー
DOM のevent.button 属性には 3 つの値があります: 0 は主マウス ボタン、1 はマウスの中ボタン、2 は副マウス ボタンです。通常の設定では、主マウス ボタンはマウスの左ボタンであり、副マウス ボタンはマウスの右ボタンです。

IE8 およびそれ以前のバージョンでもボタン属性が提供されていますが、この属性の値は DOM ボタン属性とは大きく異なります。

0: マウスボタンが押されていません。

1: メインマウスボタン ​​

2: 二次マウス ボタン

3: マウスの主ボタンと副ボタンを同時に押します。

4: マウスの中ボタン

5: マウスのメイン ボタンとマウスの中ボタンを同時に押します。

6: マウスの 2 番目のボタンと中央のボタンを同時に押します。

7: 3 つのマウス ボタンを同時に押します


互換性のあるバージョン:




さらに、マウスの右ボタンをブロックしたい場合は、次を使用する必要があります:

function getButton() {
  if (document.implementation.hasFeature("MouseEvents", "2.0")) {
    return event.button;
  } else {
    switch (event.button) {
      case 0:
      case 1:
      case 3:
      case 5:
      case 7:
        return 0;
      case 2:
      case 6:
        return 2;
      case 4:
        return 1;
    }
  }
}
ログイン後にコピー
このイベントは HTML5 で定義されており、後で説明します

イベント情報をもっと見る
document.oncontextmenu = function(event) {
  // if (window.event) {
  //   event = window.event;
  // }
  // try {
  //   var the = event.srcElement;
  //   if (!((the.tagName == "INPUT" && the.type.toLowerCase() == "text") || the.tagName == "TEXTAREA")) {
  //     return false;
  //   }
  //   return true;
  // } catch (e) {
  //   return false;
  // }
  return false;
}
ログイン後にコピー

詳細属性

マウス イベントの場合、詳細には、特定の位置で発生したクリック数 (マウスダウン 1 回とマウスアップ 1 回) を示す値が含まれます。数値は 1 から数え始めます。マウスダウンとマウスアップの間で位置が移動した場合、詳細はリセットされます。クリック間隔が長すぎる場合も0にリセットされます。

マウスホイールイベント

マウスホイールイベントとwheelDelta属性

ユーザーがページを垂直にスクロールすると、イベント オブジェクトの WheelDelta 属性がトリガーされ、ユーザーがホイールを前方に回転させると、wheelDelta は 120 の倍数になります。 WheelDelta は -120 の倍数です。例:

另外,在Opera 9.5之前的版本中,wheelDelta值的正负号是颠倒的。

此外,Firefox支持一个名为DOMMouseScroll的类似事件,也是在鼠标滚动滚轮时除法。有关鼠标滚轮的信息保存在detail属性中。向前滚动这个属性的值为-3的倍数,向后滚动,这个属性的值是3的倍数。

通用版:

function getWheelDelta() {
  if (event.wheelDelta) {
    return (client.engine.opera && client.engine.opera < 9.5 &#63; -event.wheelDelta : event.wheelDelta);
  } else {
    return -event.detail * 40;
  };
}
ログイン後にコピー

触摸设备

iOS和Android设备中:

不支持dblclick;
轻击可单击元素会触发mousemove;如果此操作会导致内容变化,将不再有其他事件发声;如果屏幕没有发生变化,那么依次发生mousedown、mouseup和click事件;
mousemove事件也会触发mouseover和mouseout事件;
两个手指操作会触发mousewheel和scroll;

无障碍性问题

使用click事件执行代码;

不要使用onmouseover向用户显示新的信息;
不要使用dblclick执行重要的操作;

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 Dec 17, 2023 am 08:41 AM

JavaScript は Web 開発で広く使用されているプログラミング言語であり、WebSocket はリアルタイム通信に使用されるネットワーク プロトコルです。 2 つの強力な機能を組み合わせることで、効率的なリアルタイム画像処理システムを構築できます。この記事では、JavaScript と WebSocket を使用してこのシステムを実装する方法と、具体的なコード例を紹介します。まず、リアルタイム画像処理システムの要件と目標を明確にする必要があります。リアルタイムの画像データを収集できるカメラ デバイスがあるとします。

See all articles