JavaScript はドラッグ可能なモーダルボックスを実装します

JavaScript はドラッグ可能なモーダルボックスを実装します

この記事では、ドラッグ可能なモーダルボックスを実装するためのJavaScriptの具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

コード:

HTMLコード部分:

<スタイル>
        * {
            マージン: 0px;
            パディング: 0px;
        }
        .ログインヘッダー{
            幅: 100%;
            テキスト配置: 中央;
            高さ: 30px;
            フォントサイズ: 24px;
            行の高さ: 30px;
            カーソル: ポインタ;
        }
        。ログイン {
            表示: なし;
            幅: 500ピクセル;
            高さ: 280px;
            位置: 固定;
            境界線: 1px #ebebeb solid;
            左: 50%;
            上位: 50%;
            背景: #fff;
            ボックスシャドウ: 0px 0px 20px #ddd;
            zインデックス: 999;
            変換: translate(-50%,-50%);
        }
        .ログインタイトル{
            幅: 100%;
            マージン: 10px 0px 0px 0px;
            テキスト配置: 中央;
            高さ: 40px;
            行の高さ: 40px;
            フォントサイズ: 10px;
            位置: 相対的;
            カーソル: 移動;
        }
        .ログインタイトルスパン{
            位置: 絶対;
            フォントサイズ: 12px;
            右: -20px;
            上: -30px;
            背景色: #fff;
            境界線: 1px #ebebeb solid;
            幅: 40px;
            高さ: 40px;
            境界線の半径: 20px;
        }
        .ログイン入力コンテンツ{
            上マージン: 20px;
        }
        .ログインボタン{
            幅: 100ピクセル;
            マージン: 30px 自動 0px 自動;
            行の高さ: 40px;
            フォントサイズ: 14px;
            境界線: 1px #ebebeb solid;
            テキスト配置: 中央;
        }
        {
            テキスト装飾: なし;
            色: #000;
        }
        .ログインボタン a {
            表示: ブロック;
        }
        .ログイン入力 入力.リスト入力 {
            フロート: 左;
            行の高さ: 35px;
            高さ: 35px;
            幅: 350ピクセル;
            境界線: 1px #ebebeb solid;
            テキストインデント: 5px;
        }
        .ログイン入力{
            オーバーフロー: 非表示;
            マージン: 0px 0px 20px 0px;
        }
        .ログイン入力ラベル{
            フロート: 左;
            幅: 90ピクセル;
            右パディング: 10px;
            高さ: 35px;
            行の高さ: 35px;
            テキスト配置: 右;
            フォントサイズ: 14px;
        }
        .ログインマスク{
            表示: なし;
            幅: 100%;
            高さ: 100%;
            位置: 固定;
            上: 0px;
            左: 0px;
            背景色: rgba(0, 0, 0, .3);
        }
    </スタイル>
</head>
<本文>
    <div class="login-header">クリックするとログインボックスが表示されます</div>
    <div id="ログイン" class="ログイン">
        <div id="title" class="login-title">メンバーログイン<span><a id="closeBtn" class="close-login" href="javascript:void(0);" >閉じる</a></span></div>
        <div class="ログイン入力コンテンツ">
            <div class="ログイン入力">
                <label>ユーザー名:</label>
                <input type="text" placeholder="ユーザー名を入力してください" id="username" class="list-input">
            </div>
            <div class="ログイン入力">
                <label>ログインパスワード:</label>
                <input type="password" placeholder="ログインパスワードを入力してください" id="password" class="list-input">
            </div>
        </div>
        <div id="loginBtn" class="login-button"><a id="login-button-submit" href="javascript:void(0);" >メンバーログイン</a></div>
    </div>
    <!-- マスクレイヤー-->
<div id="mask" class="ログインマスク"></div>

JS部分:

<スクリプト>
        // 1. 要素を取得する var login = document.querySelector('.login');
        var マスク = document.querySelector('.login-mask');
        var loginHeader = document.querySelector('.login-header');
        var closeBtn = document.querySelector('.close-login');
        var loginTitle = document.querySelector('.login-title');
 
        // 2. ログインプロンプトをクリックしてログインとマスクを表示します。
        loginHeader.addEventListener('click', 関数() {
            login.style.display = 'ブロック';
            mask.style.display = 'ブロック';
        })
        // 3. 閉じるボタンをクリックしてログインとマスクを非表示にします。
        closeBtn.addEventListener('click', 関数() {
            login.style.display = 'なし';
            マスクスタイル表示 = 'なし';
        })
        // 4. ログインボックスをドラッグします // 4.1 マウスを押してボックス内のマウスの座標を取得します loginTitle.addEventListener('mousedown', function(e) {
            var x = e.pageX-login.offsetLeft;
            var y = e.pageY-login.offsetTop;
            // 4.2 マウスが動くと、ページ内のマウスの座標からボックス内のマウスの座標を減算して、ログイン ボックスの左と上の値を取得します。 document.addEventListener('mousemove', move)
            関数move(イベント) {
                login.style.left = event.pageX - x + 'px';
                login.style.top = event.pageY - y + 'px';
            }
            // 4.3 マウスが離されたら、移動イベントを削除します document.addEventListener('mouseup', function() {
                document.removeEventListener('mousemove', 移動)
            })
        })
</スクリプト>

効果のデモンストレーション:

アイデア:

ドラッグ可能な部分にクリック イベントを追加します。トリガーされると、ドラッグ可能な部分でのマウスの座標 (e.pageX - box.offsetLeft) を計算し、xy を取得して、ドキュメントにマウス移動イベントを追加します。これは、マウスがモーダル ボックスをドラッグすると、DOM ウィンドウ全体内で移動するためです。マウスとモーダル ボックスの相対位置は変更しないため、この時点でのモーダル ボックスの位置 (e.pageX - x) を計算し、モーダル ボックスの位置を変更する必要があります。マウスがポップアップしたら、移動イベントをクリアするだけです。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript で判決文をエレガントに記述する例
  • 開発効率の向上に役立つ 56 個の実用的な JavaScript ツール関数
  • ドロップダウンリスト選択ボックスを実装するJavaScript
  • 州と市町村の連携を簡単に実現するJavaScript
  • js タグ構文の使用法の詳細

<<:  設定ファイルを変更した後、操作を再開します

>>:  MySQL 10進数符号なし更新負数を0に変換

推薦する

Vue プロジェクトを使用して複数のプロキシを構成する際の注意事項

Vue プロジェクトの開発プロセスでは、ローカル デバッグの利便性のため、通常、vue.config...

ボリュームを使用してホストと Docker コンテナ間でファイルを転送する方法

以前、Docker コンテナとローカル マシン間のファイル転送に関する記事を書きました。しかし、この...

HTMLを使用してシンプルなメールテンプレートを作成する

今日は、「ローテク」の問題について書きたいと思います。ちなみに、私は JavaScript Week...

iOS スタイルの選択ボックスの開閉機能を実装するための純粋な CSS

1 効果デモアドレス: https://www.albertyy.com/2020/7/check...

node.js が大規模プロジェクトに適さない理由

目次序文1. アプリケーションコンポーネント2. アプリケーションの種類3. アプリケーションサービ...

JS のオブジェクトリテラルの詳細な説明

目次序文1. オブジェクト構築にプロトタイプを設定する1.1 __proto__ の使用における特殊...

MySQL シリーズ 13 MySQL レプリケーション

目次1. MySQLレプリケーション関連の概念2. シンプルな1マスター1スレーブアーキテクチャの実...

CSSカウンター関連属性の学習の詳細な説明

CSS カウンター属性はほぼすべてのブラウザ (IE8 を含む) でサポートされていますが、あまり使...

JavaScript の querySelector メソッドと getElementById メソッドの違いを分析する

目次1. 概要1.1 querySelector() と querySelectorAll() の使...

JavaScript でエラーが発生しやすい演算子操作の概要

目次算術演算子異常状況1: 特殊値リテラルを含む操作異常な状況 2: 他の種類のデータが数学演算に関...

Reactはダブルスライダークロススライドを実装します

この記事では、Reactでダブルスライダークロススライドを実装するための具体的なコードを参考までに共...

Docker swarm を使用して Nebula Graph クラスターを迅速にデプロイする方法のチュートリアル

1. はじめにこの記事では、Docker Swarm を使用して Nebula Graph クラスタ...

HTMLウェブページの基本概念の簡単な分析

ウェブページとは何ですか? HTML ドキュメントがブラウザカーネルによってレンダリングされた後に表...

vue+element テーブルで動的な列フィルタリングを実装するためのサンプルコード

要件: データをリスト形式で表示する場合、表示すべき情報項目が多く、表が横に長くなってしまいます。表...