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

推薦する

H5レイアウト実装手順における天井と底部の吸引を解決するための純粋なCSS

どのような製品について言及したいですか?最近、ユーザーがマーケティングの変化をよりよく観察できるよう...

MySQLの共通関数の概要

序文: MySQL データベースは、よく使用される集計関数、日付および文字列処理関数など、幅広い関数...

XHTMLタグは適切に使用する必要があります

<br />123WORDPRESS.COM の以前のチュートリアルでは、Web ページ...

iframe 適応サイズ実装コード

ページドメインの関係:メインページ a.html はドメイン A: www.jb51.net に属し...

Linux で FastDFS ファイル サーバーを構築するための実装手順

目次1. ソフトウェアパッケージ2. gccをインストールする3. libfastcommonをイン...

MySQL スケジュール バックアップ ソリューション (Linux crontab を使用)

序文この世の愛には値段のつくものもありますが、データには値段のつけられないものがあります。将来、誤っ...

Linuxファイルを表示するコマンドの詳細な説明

Linuxファイルを表示する方法ファイルの内容を表示するコマンド: catは最初の行からコンテンツを...

Linuxの読み取りコマンドの使用

1. コマンドの紹介read コマンドは、シェルの組み込みコマンドで、標準入力または -u オプショ...

Mysql クラシック高レベル/コマンドライン操作 (クイック) (推奨)

サーバーとデータベースの構築方法を学ぶ必要があるため、最近は SQL 言語を独学で学び始めました。デ...

Vue プロジェクトはファイルダウンロードの進行状況バー機能を実装します

日常業務でファイルをダウンロードする一般的な方法は 2 つあります。 1 つ目は、サーバーのファイル...

CSSは高度に適応したフルスクリーンを実現します

独自のデモを作成するときに、display:flex を使用して垂直方向の中央揃えを実現したいと思い...

Vue ミックスインの使い方の詳しい説明

目次Vue ミックスインの使用ミックスインでのデータアクセスミックスイン/index.jsホーム.v...

jQuery エディタ プラグイン tinyMCE の使い方

簡略化されたファイル サイズを変更し、サンプルをダウンロードします。ファイルをローカル コンピュータ...

JavaScriptを使用してSMS認証コード間隔を送信する機能を実装する

多くのアプリやウェブサイトでは、ログインやアカウント登録の際にSMS認証コード1を送信する場所があり...

VMware Workstation 15 Pro インストール ガイド (初心者向け)

01. VMware Workstation Pro 15 のダウンロードダウンロード: VMwa...