JavaScriptを使用して要素の外側のクリックを検出する方法
JavaScriptを使用して要素の外側のクリックを検出する方法を学ぶことは、多くの状況で使用できる強力なスキルです。メニューやモーダルウィンドウを非表示にします。数分で、その方法がわかります。
基本的なJavaScriptの外部要素の検出
HTMLでボックス要素を作成します:
<div class="box">
If you click anywhere outside of me, I’m gone faster than you can snap your
fingers.
</div>
CSSを使用してボックスのスタイルを設定し、要素の非表示ユーティリティクラスを作成しましょう:
.box {
margin: 1rem auto 1rem auto;
max-width: 300px;
border: 1px solid #555;
border-radius: 4px;
padding: 1rem 1.5rem;
font-size: 1.5rem;
}
.js-is-hidden {
display: none;
}
そしてJavaScriptクリック検出スクリプト:
// Select element with box class, assign to box variable
const box = document.querySelector(".box")
// Detect all clicks on the document
document.addEventListener("click", function(event) {
// If user clicks inside the element, do nothing
if (event.target.closest(".box")) return
// If user clicks outside the element, hide it!
box.classList.add("js-is-hidden")
})
これがすべてのコードを含むCodePenです。
JavaScriptコードの仕組み:
- 最初に、
querySelector()
を使用してbox要素を見つけます。 それをbox
という変数に割り当てます - 次に、
addEventListener()
を添付します ドキュメントにアクセスして、(ページ全体で)ドキュメントのクリックをリッスンするように指示します。 - ユーザーがドキュメントをクリックすると、
function()
コードブロック内で条件ステートメントを開始します{ .. }
: - ユーザーがボックス要素内をクリックした場合(
event.target.closest
)、その後は何もしません(return;
一部)。 - ただし、ボックス要素の外側をクリックした場合は、
classList.add
を使用して非表示にします。.js-is-hidden
を追加するメソッド CSSクラス(display: none
を使用) プロパティ)以前に作成しました。
これで、要素の外側のクリックを検出する方法がわかりました!
まとめ
今後のチュートリアルでは、実際のプロジェクトで使用できる実用的なWebコンポーネントをまとめることで、クリック検出についてさらに詳しく説明します。クリック検出をポップアップモーダルウィンドウに統合することも、スライドイン、スライドアウトメニューに統合することもできますか?
-
JavaScriptでアラートボックスを作成する方法
アラートボックスとは何ですか? アラートボックスは、ある種のユーザーインタラクション(クリック、スクロール、入力など)への応答としてポップアップする小さなウィンドウです。アラートボックスは主に、問題についてユーザーに警告するために使用されます ただし、単にエンドユーザーに通知するためにも使用されます。 警告ボックスを使用する一般的な例は、ユーザーがフォームの送信ボタンをクリックしたが、必須フィールドに入力するのを忘れた場合です。アラートボックスには、問題をユーザーに説明するメッセージが表示されます。 アラートボックスの作成方法 上のスクリーンショットから正確なアラートボックスを複製しま
-
要素がJavaScriptで非表示になっているかどうかを確認するにはどうすればよいですか?
JavaScriptで要素が非表示になっているかどうかを確認するには、コードは次のとおりです- 例 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1" /> <style> body { font-family: "Segoe UI", Tahoma, Geneva,