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

推薦する

MySQL がテーブルを読み取れないエラー (MySQL 1018 エラー) の解決方法

1. エラーの再現MySQL データベースにはアクセスできますが、データベース テーブルを読み取るこ...

Nodejs と Socket.IO を組み合わせて Websocket の即時通信を実現

目次WebSocketを使用する理由ソケット.ioオープンソースプロジェクト効果プレビューアプリイン...

Keras を使って SQL インジェクション攻撃を判断する (例の説明)

この記事では、ディープラーニングフレームワーク keras を使用して、SQL インジェクションの特...

PHP+nginx サービス 500 502 エラーのトラブルシューティングのアイデアの詳細な説明

概要オンラインサービスへのアクセス中に 500 または 502 エラーが発生した場合、緊急処理とトラ...

HTML タグの表示モード (ブロックレベル タグ、インライン タグ、インライン ブロック タグ) に関する簡単な説明

今日の講義では、HTML におけるタグの表示モードについてお話ししましたが、これはブロックレベルタグ...

MySQL のロードバランサーとして nginx を使用する方法

注意: nginxのバージョンは1.9以上である必要があります。nginxをコンパイルするときに、-...

nginx で同時接続リクエストの数を制限する方法

導入同時接続数を制限するモジュールは http_limit_conn_module です。アドレス:...

Innodb で MySQL の 2T テーブルをすばやく削除する方法の例

序文この記事は主に、MySQL の Innodb で 2T の大きなテーブルをすばやく削除する方法に...

Vue における Vue.use() の原理と基本的な使用法

目次序文1. 例で理解する2. ソースコードを分析する3. まとめ要約する序文他の人のコンポーネント...

MySQL 5.7 で my.ini ファイルが見つからない場合の解決策

my.ini とは何ですか? my.ini は、MySQL データベースで使用される設定ファイルです...

bashコマンドの使い方の詳細な説明

Linux では、基本的に vi エディタのように「.sh」拡張子を持つテキストの処理と実行を記述す...

Linux システムに 3 つ以上の Tomcat をインストールする (詳細な手順)

複数のTomcatをインストールする場合は、システムにJDKがインストールされている必要があり、 T...

WeChatアプレットでグローバル変数を監視する方法

最近、仕事で問題に遭遇しました。グローバル変数 red_heart があります。これは多くの場所で使...

デザイナーと開発者に役立つ 9 つの超実用的な CSS のヒント

Web デザイナーの頭の中には、仕事に関連する多くの知識が詰まっている必要があります。 CSS は、...

Next.js 入門チュートリアル

目次導入Next.jsプロジェクトを作成するNext.js プロジェクトを手動で作成するcreact...