20250702-12
把回复功能完善了 整篇课程也是跟着学了一半了 css写的真痛苦 顺便在gh扒了点代码把博客首页装饰了一下 回复功能的练习代码如下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <style> body { background-color: #00d9ff; } .avatar { flex-shrink: 0; display: block; width: 70px; height: 70px; background-color: pink; border-radius: 50%; overflow: hidden; margin: 0; border: 2px solid #4f4f4f; } .head { display: flex; width: 400px; height: 70px; gap: 10px; } textarea { background-color: rgb(222, 222, 222); font-size: 20px; font-weight: bolder; flex: 1; border: 2px solid #4f4f4f; border-radius: 4px; height: 27px; resize: none; transition: all 0.3s; } .confirm { height: 33px; border-radius: 6px; border: 2px solid #4f4f4f; background-color: pink; transition: all 0.3s; } .tx { color: #4f4f4f; opacity: 0; width: 80px; text-align: right; position: absolute; top: 85px; left: 270px; transition: all 0.3s; } #list { background-color: pink; width: 1350px; border: 3px solid #ffffff; padding: 10px; margin: 35px; border-radius: 20px; } .comment { border: 2px solid#ff6982; border-radius: 20px; background-color: aliceblue; font-size: 30px; max-height: auto; max-width: 1200px; width: auto; padding: 10px; word-wrap: break-word } .body { align-items: start; display: flex; margin-top: 10px; border-radius: 30px; } .name { display: flex; margin: 0; padding: 0; font-size: 20px; font-weight: bolder; gap: 20px; } .bodycontent { display: flex; flex-direction: column; gap: 20px; } .gap { text-align: right; width: 80px; font-size: 20px; font-weight: bolder; } .failed { position: absolute; left: 50%; top: 40%; transform: translate(-50%, -50%); height: 70px; width: 200px; border-radius: 20px; border: 1px solid #4f4f4f; background-color: #ff748b; color: rgb(255, 255, 255); font-size: 20px; font-weight: bolder; display: flex; align-items: center; justify-content: center; opacity: 0; transition: all 0.3s; } </style> <body> <div class="failed" id="none">发布内容不能为空</div> <div class="failed" id="overword">发布字数超过限制</div> <div class="head"> <div class="avatar"></div> <textarea type="text" class="text"></textarea> <button class="confirm">发布</button> <span class="tx">0/200字</span> </div> <div id="list"> <div class="area"> <div class="body"> <div class="avatar"></div> <div class="bodycontent"> <div class="name"> <div class="uname">陈睿</div> </div> <div class="comment">你所热爱的,就是你的生活</div> </div> </div> <div class="body"> <div class="gap">回复:</div> <div class="avatar"></div> <div class="bodycontent"> <div class="name"> <div class="uname">蒙古上单</div> <div>回复:</div> <div>陈睿</div> </div> <div class="comment">柠檬什么时候熟啊</div> </div> </div> </div> <div class="area"> <div class="body"> <div class="avatar"></div> <div class="bodycontent"> <div class="name"> <div class="uname">陈睿</div> </div> <div class="comment">B站可能会倒闭,但永远不会变质</div> </div> </div> <div class="body"> <div class="gap">回复:</div> <div class="avatar"></div> <div class="bodycontent"> <div class="name"> <div class="uname">吓我一跳释放忍术</div> <div>回复:</div> <div>陈睿</div> </div> <div class="comment">小陈,又在上班摸鱼了</div> </div> </div> <div class="body"> <div class="gap">回复:</div> <div class="avatar"></div> <div class="bodycontent"> <div class="name"> <div class="uname">一刀一刀燃烧刀</div> <div>回复:</div> <div>吓我一跳释放忍术</div> </div> <div class="comment">唉,六级号可惜可惜</div> </div> </div> </div> </div> <script> const textarea = document.querySelector('textarea') const tx = document.querySelector('.tx') const button = document.querySelector('.confirm') const list = document.getElementById('list') const none = document.querySelector('#none') const overword = document.querySelector('#overword') let user = '' let area = '' let username = '' textarea.addEventListener('focus', function () { textarea.style.height = '70px' button.style.height = '77px' tx.style.opacity = 1 }) textarea.addEventListener('blur', function () { textarea.style.height = '27px' button.style.height = '' tx.style.opacity = 0 }) textarea.addEventListener('input', function () { tx.innerHTML = `${textarea.value.length}/200字` }) button.addEventListener('mouseenter', function () { button.style.backgroundColor = 'rgb(222, 222, 222)' }) button.addEventListener('mouseleave', function () { button.style.backgroundColor = 'pink' }) textarea.addEventListener('keydown', function (e) { if (e.key === 'Enter') if (username == '') output() else reply() }) button.addEventListener('click', function () { if (username == '') output() else reply() }) document.addEventListener('click', function (e) { if (e.target.className === 'body') { if (user != '') { user.style.backgroundColor = 'pink' } user = e.target user.style.backgroundColor = '#ff6982' area = user.parentElement username = user.querySelector('.name .uname') } else if (e.target.className == 'confirm' || e.target.className == 'text') { } else { username = '' user.style.backgroundColor = 'pink' } console.log(username) }) function output() { let textcontent = textarea.value if (textcontent === '') { none.style.opacity = 1 setTimeout(() => { none.style.opacity = 0 }, 1500); } else if (textcontent.length > 200) { overword.style.opacity = 1 setTimeout(() => { overword.style.opacity = 0 }, 1500); } else { list.insertAdjacentHTML('beforeend', ` <div class="area"> <div class="body"> <div class="avatar"></div> <div class="bodycontent"> <div class="name"><div class="uname">${uname = '用户9527'}</div></div> <div class="comment">${textcontent}</div> </div> </div> </div> `) textarea.value = '' } } function reply() { let textcontent = textarea.value if (textcontent === '') { none.style.opacity = 1 setTimeout(() => { none.style.opacity = 0 }, 1500); } else if (textcontent.length > 200) { overword.style.opacity = 1 setTimeout(() => { overword.style.opacity = 0 }, 1500); } else { area.insertAdjacentHTML('beforeend', ` <div class="body"> <div class="gap">回复:</div> <div class="avatar"></div> <div class="bodycontent"> <div class="name"><div class="uname">${uname = '用户9527'}</div><div>回复:</div><div>${username.innerHTML}</div></div> <div class="comment">${textcontent}</div> </div> </div> `) textarea.value = '' } } </script> </body> </html>

浙公网安备 33010602011771号