この記事では、イベント委任を使用してJavaScriptメッセージボード機能を実装する方法について説明します。

この記事では、イベント委任を使用してJavaScriptメッセージボード機能を実装する方法について説明します。

イベント委任を使用してメッセージ ボード機能を実装します。

ここに画像の説明を挿入

ここに画像の説明を挿入

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta http-equiv="X-UA-compatible" content="IE=edge">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>ドキュメント</title>
    <スタイル>
        * {
            パディング: 0;
            マージン: 0;
        }
        体 {
            幅: 100%;
            高さ: 100%;
            背景: rgb(65, 65, 63);
        }
        。背景 {
            幅: 700ピクセル;
            高さ: 100%;
            背景: 白;
            マージン: 自動;
            上マージン: 20px;
        }
        。頭、
        .ポップヘッド{
            高さ: 50px;
            フォントサイズ: 20px;
            テキスト配置: 中央;
            行の高さ: 50px;
        }
        。名前 {
            幅: 640ピクセル;
            高さ: 40px;
            フォントサイズ: 20px;
            マージン: 10px 28px;
            行の高さ: 50px;
            境界線の半径: 8px;
            境界線: 2px実線rgb(139, 137, 137);
            アウトライン: なし;
        }
        。コンテンツ、
        .ポップ返信{
            幅: 640ピクセル;
            高さ: 150px;
            フォントサイズ: 22px;
            マージン: 10px 28px;
            境界線: 2px実線rgb(139, 137, 137);
            アウトライン: なし;
            境界線の半径: 8px;
            サイズ変更: なし;
        }
        .btn、
        .pop-btn {
            フロート: 右;
            高さ: 30px;
            右マージン: 28px;
            境界線の半径: 6px;
            アウトライン: なし;
            フォントサイズ: 20px;
            パディング: 0 20px;
            背景: rgb(169, 238, 255);
        }
        h3 {
            フォントサイズ: 20px;
            色: rgb(102, 102, 102);
            背景: rgb(205, 221, 248);
            上マージン: 50px;
            行の高さ: 50px;
            テキストインデント: 30px;
            フォントの太さ: 545;
        }
        li {
            リストスタイル: なし;
            幅: 640ピクセル;
            フォントサイズ: 22px;
            マージン: 15px 30px;
        }
        .メッセージヘッド{
            ディスプレイ: フレックス;
        }
        .メッセージヘッド .写真 {
            幅: 70ピクセル;
            高さ: 70px;
            背景: rgb(6, 109, 134);
            表示: インラインブロック;
            境界線の半径: 50%;
            テキスト配置: 中央;
            行の高さ: 70px;
            オーバーフロー: 非表示;
        }
        .メッセージヘッド.時間{
            左マージン: 12px;
        }
        .liuyan、
        .返信p{
            幅: 560ピクセル;
            /* 高さ: 76px; */
            行の高さ: 50px;
            表示: ブロック;
            背景: rgb(205, 221, 248);
            フォントサイズ: 20px;
            左マージン: 80px;
            境界線の半径: 8px;
            テキストインデント: 15px;
        }
        。消去 {
            幅: 60ピクセル;
            高さ: 30px;
            表示: ブロック;
            行の高さ: 30px;
            左マージン: 580px;
            /* 下マージン: 0px; */
            境界線の半径: 6px;
            アウトライン: なし;
            フォントサイズ: 15px;
            背景: rgb(169, 238, 255);
        }
        。答え {
            幅: 60ピクセル;
            高さ: 30px;
            表示: ブロック;
            行の高さ: 30px;
            上マージン: -29px;
            左マージン: 515px;
            境界線の半径: 6px;
            アウトライン: なし;
            フォントサイズ: 15px;
            背景: rgb(169, 238, 255);
        }
        。ポップアップ {
            幅:100vw;
            高さ:100vh;
            位置: 固定;
            背景: rgba(0, 0, 0, .3);
            左: 0;
            上: 0;
            zインデックス: 10;
            ディスプレイ: フレックス;
            アイテムの位置を中央揃えにします。
            コンテンツの中央揃え: 中央;
            表示: なし;
        }
        .pop-content {
            幅: 700ピクセル;
            背景: #fff;
            境界線の半径: 10px;
            オーバーフロー: 非表示;
            パディング下部: 20px;
        }
        .返信p{
            上マージン: 10px;
            背景: rgba(100, 100, 100, .1);
        }
    </スタイル>
</head>
<本文>
    <div class="背景">
        <div class="head">メッセージボード</div>
        <input class="name" type="text" placeholder="ニックネームを入力してください">
        <textarea class="content" placeholder="礼儀正しい発言を心がけてください..."></textarea>
        <button class="btn">メッセージを残す</button>
        <h3>人々が言っ​​ていること</h3>
        <ul class="text">
            <!-- <li>
			<div class="メッセージヘッド">
			<span class="photo">システム</span>
			<p class="time">2019-9-27 0:47:38</p>
			</div>
			<p class="liuyan">テストメッセージ</p>
			<div class="返信">
			<p>テスト返信</p>
			</div>
			<button class="delete">削除</button>
			<button class="answer">回答</button>
		</li> -->
        </ul>
    </div>
    <div class="popup">
        <div class="pop-content">
            <div class="pop-head">返信掲示板</div>
            <textarea class="pop-reply" placeholder="礼儀正しい発言を心がけてください..."></textarea>
            <button class="pop-btn huiFu">返信</button>
            <button class="pop-btn quXiao">キャンセル</button>
        </div>
    </div>
    <スクリプト>
        //イベント委任では、各クリックによってイベント処理関数 var oAns が再トリガーされるため、各 if は独立した関数と同等になります。
        //分析: イベントは誰に委任されますか? --- 共通の親要素 document.onclick = function (e) {
            //イベント処理オブジェクト。IE8 以下のブラウザと互換性があります。e = e || event;
            // ターゲット target --- どのタグがそれをトリガーするか var target = e.target;

            //メッセージを残す if(target.className === 'btn'){
                //オブジェクトを取得します var nickname = $('.name').value;
                var コンテンツ = $('.content').値;
                //入力が空かどうかを判断します if(nickname && content){
                    //タグを作成する var oLi = document.createElement('li');
                    //新しいコンテンツを挿入 oLi.innerHTML = `
                    <div class="メッセージヘッド">
                        <span class="photo">${ニックネーム}</span>
                        <p class="time">2019-9-27 0:47:38</p>
                    </div>
                    <p class="liuyan">${コンテンツ}</p>
                    <div class="返信">
                    </div>
                    <button class="delete">削除</button>
                    <button class="answer">回答</button>
                    `  
                    //最新のメッセージを先頭に挿入します $('.text').insertBefore(oLi , $('.text').firstChild);
                    //カウントダウンクロック(ターゲット、3);
                    // メッセージを残した後、メッセージボードのコンテンツをクリアします $('.content').value = '';
                }それ以外{
                    alert('入力は空にできません!')
                }
                戻る
            }
            //deleteif(target.className === 'delete'){
                //メッセージを削除しますtarget.parentNode.remove();
                戻る
            }
            //返信 if(target.className === 'answer'){
                //ポップアップウィンドウを表示します$('.popup').style.display = 'flex';
                //メッセージに返信する場所を検索します oAns = target.previousElementSibling.previousElementSibling;
                戻る 
            }
            //返信を確認する if(target.className === 'pop-btn huiFu'){
                //返信コンテンツを取得します。var huiFuContent = $('.pop-reply').value;
                if(huiFuContent){
                    //タグを作成する var oP = document.createElement('p');
                    //タグにコンテンツを挿入します oP.innerHTML = huiFuContent;
                    //メッセージ場所に返信を挿入します oAns.appendChild(oP);
                }
                //ポップアップウィンドウを閉じます$('.popup').style.display = 'none';
                戻る
            }
            //返信をキャンセルif(target.className === 'pop-btn quXiao'){
                $('.popup').style.display = 'なし';
                戻る
            }
        }
        //カウントダウン関数 clock(ele, time){
            if(!ele.disabled){
                ele.disabled = true ;
                ele.innerHTML = time + 's 後に再度メッセージを残すことができます';
                var t = setInterval(関数() {
                    時間 -  ;
                    ele.innerHTML = time + 's 後に再度メッセージを残すことができます';
                    時間 <= 0 の場合
                        クリア間隔(t) ;
                        ele.disabled = false ;
                        ele.innerHTML = 'メッセージ';
                    }
                },1000)
            }
        }
        //オブジェクト関数 $(selector){ を取得する
            document.querySelector(セレクタ) を返します。
        }
    </スクリプト>
</本文>
</html>

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript イベント委任の原則
  • jsイベント委譲の詳細な説明
  • JS でのイベント委譲例の簡単な分析
  • ウェブメッセージボード機能を実現するjs
  • Web メッセージボード機能を実装する JavaScript
  • メッセージボードのネイティブJS実装

<<:  実務経験7年のフロントエンドスーパーバイザーによる経験共有

>>:  HTML の 5 種類のスペースの意味

推薦する

MySQL 5.7.29 + Win64 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

公式サイトをダウンロード自分に合ったバージョンを選択してダウンロードしてください。 ダウンロードをク...

IDEA2020.1.2 Webプロジェクトの作成とTomcatの設定に関する詳細なチュートリアル

この記事は、IDEA で Web プロジェクトを作成し、Tomcat を構成する方法についての統合記...

React プロジェクトで eslint の Baidu スタイルを使用する詳細な説明

1. Baidu Eslint Ruleプラグインをインストールする npm i -D eslint...

Centos8 で Apache httpd2.4.37 を使用して Web サーバーをインストールする詳細な手順

ステップ 1: yum install httpd -y #httpd サービスをインストールします...

JavaScript における型の必須および暗黙的な変換の詳細な説明

目次1. 暗黙的な変換二重等号での変換ブール型変換「+」と「-」 2. 強制型変換' ...

Nginx gzip設定について

nginx がリソース圧縮を実現する原理は、ngx_http_gzip_module モジュールを介...

デザイン理論: コンテンツプレゼンテーションのための 10 のヒント

<br /> テキスト、記号、リンクの3つの側面に焦点を当て、主に中国語で、個人的な執筆...

RoughViz を使用して Vue.js でスケッチされたチャートを視覚化する方法

導入チャートは、データ セットを読みやすくし、その各部分を区別しやすくするために使用されるデータのグ...

知っておくべき JS 配列削減の高度な使い方 25 選

序文Reduce は ES5 で追加された新しい従来の配列メソッドの 1 つです。forEach、f...

HTMLを圧縮しない理由はいくつかある

理由は簡単です。 HTML ドキュメントでは、複数の空白文字は 1 つの空白文字と同等です。つまり、...

MySQL 8.0 ディクショナリテーブル拡張の詳細な説明

MySQL のデータ ディクショナリは、データベースの重要なコンポーネントの 1 つです。INFOR...

Linux で JDK 環境を構成する方法

1. 公式ウェブサイトにアクセスして、jdk-8u162-linux-x64.tar.gzなどのLi...

Windows に WSL をインストールして構成する方法

WSLとはBaidu 百科事典からの一節を引用します。 Windows Subsystem for ...

MySQL での Truncate の使用法の詳細な説明

序文:テーブルをクリアしたいときは、truncate ステートメントをよく使用します。ほとんどの場合...

ウェブデザインにおけるテキスト入力ボックスのパラメータの説明

<br />一般的なゲストブック、フォーラムなどでは、テキスト入力ボックスが使われていま...