1. 程式人生 > 程式設計 >一篇文章告訴你如何用事件委託實現JavaScript留言板功能

一篇文章告訴你如何用事件委託實現JavaScript留言板功能

用事件委託實現留言板功能。

在這裡插入圖片描述

在這裡插入圖片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        body {
            width: 100%;
            height: 100%;
            background: rgb(65,65,63);
        }
        .bacground {
            width: 700px;
            height: 100%;
            background: white;
            margin: auto;
            margin-top: 20px;
        }
        .head,.pop-head {
            height: 50px;
            font-size: 20px;
            text-align: center;
            line-height: 50px;
        }
        .name {
            width: 640px;
            height: 40px;
            font-size: 20px;
            margin: 10px 28px;
            line-height: 50px;
            border-radius: 8px;
            border: 2px solid rgb(139,137,137);
            outline: none;
        }
        .content,.pop-reply {
            width: 640px;
            height: 150px;
            font-size: 22px;
            margin: 10px 28px;
            border: 2px solid rgb(139,137);
            outline: none;
            bwww.cppcns.com
order-radius: 8px; resize: none; } .btn,.pop-btn { float: right; height: 30px; margin-right: 28px; border-radius: 6px; outline: none; font-size: 20px; padding: 0 20px; background: rgb(169,238,255); } h3 { font-size: 20px; color: rgb(102,102,102); background: rgb(205,221,248); margin-top: 50px; line-height: 50px; text-indent: 30px; font-weight: 545; } li { list-style: none; width: 640px; font-size: 22px; margin: 15px 30px; } .message-head { display: flex; } .message-head .photo { width: 70px; height: 70px; background: rgb(6,109,134); display: inline-block; border-radius: 50%; text-align: center; line-height: 70px; overflow: hidden; } .message-head .time { margin-left: 12px; } .liuyan,.reply p { width: 560px; /* height: 76px; */ line-height: 50px; display: block; background: rgb(205,248); font-size: 20px; margin-left: 80px; border-radius: 8px; text-indent: 15px; } .delete { width: 60px; height: 30px; display: block; www.cppcns.com
line-height: 30px; margin-left: 580px; /* margin-bottom: 0px; */ border-radius: 6px; outline: none; font-size: 15px; background: rgb(169,255); } .answer { width: 60px; height: 30px; display: block; line-height: 30px; margin-top: -29px; margin-left: 515px; border-radius: 6px; outline: none; font-
size: 15px; background: rgb(169,255); } .popup { width: 100vw; height: 100vh; position: fixed; background: rgba(0,.3); left: 0; top: 0; z-index: 10; display: flex; align-items: center; justify-content: center; display: none; } .pop-content { width: 700px; background: #fff; border-radius: 10px; overflow: hidden; padding-bottom: 20px; } .reply p { margin-top: 10px; background: rgba(100,100,.1); } </style> </head> <body> <div class="bacground"> <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="message-head"> <span class="photo">系統</span> <p class="time">2019-9-27 0:47:38</p> </div> <p class="liuyan">測試留言</p> <div class="reply"> <p>測試回覆</p> </div> <button class="delete">Delete</button> <button class="answer">Answer</button>NfDpcm; </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> <script> //在事件委託中,每一個if都相當於一個獨立的函式,因為每一次點選都會重新觸發事件處理函式 var oAns ; //分析:事件委託給誰? --- 共同的父元素 document.onclick = function (e) { //事件處理物件,相容IE8及以下版本的瀏覽器 e = e || event ; // target目標 --- 具體是由哪個標籤觸發的 var target = e.target ; //留言 if(target.className === 'btn'){ //獲取物件 var nickname = $('.name').value ; var content = $('.content').value ; //判斷輸入是否為空 if(nickname && content){ //建立一個標籤 var oLi = document.createElement('li') ; //插入新內容 oLi.innerHTML = ` <div class="message-head"> <span class="photo">${nickname}</span> <p class="time">2019-9-27 0:47:38</p> </div> <p class="liuyan">${content}</p> <div class="reply"> </div> <button class="delete">Delete</button> <button class="answer">Answer</button> ` //將最新的留言插入到最上面 $('.text').insertBefore(oLi,$('.text').firstChild) ; //倒計時 clock(target,3) ; //留言完後清空留言板內容 $('.content').value = '' ; }else{ alert('輸入不能為空!') } return } //刪除 if(target.className === 'delete'){ //刪除留言 NfDpcmtarget.parentNode.remove() ; return } //回覆 if(target.className === 'answer'){ //顯示彈窗 $('.popup').style.display = 'flex' ; //找到回覆留言的地方 oAns = target.previousElementSibling.previousElementSibling ; return } //確認回覆 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' ; return } //取消回覆 if(target.className === 'pop-btn quXiao'){ $('.popup').style.display = 'none' ; return } } //倒計時 function clock(ele,time){ if(!ele.disabled){ ele.disabled = true ; ele.innerHTML = time + 's後可再次留言' ; var t = setInterval(function () { time-- ; ele.innerHTML = time + 's後可再次留言' ; if(time <= 0){ clearInterval(t) ; ele.disabled = false ; ele.innerHTML = '留言' ; } },1000) } } //獲取物件 function $(selector){ return document.querySelector(selector) ; } </script> </body> </html>

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注我們的更多內容!