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に変換

推薦する

Linux で txt を mysql にインポートする方法

序文昨日、小さなプロジェクトを書いていたときに、txt ドキュメントのデータを mysql データベ...

MySQLで現在の時間間隔の前日のデータをクエリする

1. 背景実際のプロジェクトでは、分散スケジュールされたタスク実行の状況に遭遇することがあります。ス...

フロントエンドは画像を遅延ロードする方法を知っている必要があります(3つの方法)

目次1. 遅延読み込みとは何ですか? 2. 遅延読み込みを実装する🌄: 2.1 最初の方法: 2.2...

FastApi+Vue+LayUIを使用してフロントエンドとバックエンドを分離するサンプルコード

目次序文プロジェクト設計後部フロントエンドプロジェクトを実行する質疑応答序文これまでの API 開発...

ウェブサイトデザインに関するヒント

実は、最近はウェブデザインについてよく耳にするようになりました。インターネット業界は今とても発展して...

複数の古いプレーヤーの埋め込みコード

ウェブページに表示されるプレーヤーは、WMP/RealPlayer/Flash Player に過ぎ...

Mysql 更新マルチテーブル共同更新方法の概要

次に、2 つのテーブルを作成し、一連の SQL 文を実行します。SQL 文の実行後にテーブル内のデー...

Vue3とTypeScriptを組み合わせたプロジェクト開発の実践記録

目次概要1. コンポジションAPI 1. ref と reactive の違いは何ですか? 2. 周...

初心者向けのHTMLタグネストルールの詳細なまとめ

最近、HTML を再度学習しており、これは HTML に対する新たな理解と言えます。これを過小評価し...

MySQL でトランザクションのコミットとロールバックを実装する方法の詳細な例

最近、データベース データのスケジュールされた移行を実行する必要があります。実行プロセス中に何らかの...

MySQLのexecute、executeUpdate、executeQueryの違い

execute、executeUpdate、executeQuery の違い (およびそれらの戻り値...

MYSQL(電話番号、IDカード)データ非感応化の実装

1. データ感度低下の説明日常の開発ニーズでは、データの感度低下が頻繁に発生します。たとえば、ID ...

Linux でタスク用のカスタム システム トレイ インジケーターを作成する

システム トレイ アイコンは、今日でも魔法のような機能です。アイコンを右クリックして目的のアクション...

Vue でコミュニケーションを実装する 8 つの方法

目次1. コンポーネント通信1. Props 親コンポーネント ---> 子コンポーネント通信...