HTML+CSS+JavaScript:实现B站评论发布效果

这篇具有很好参考价值的文章主要介绍了HTML+CSS+JavaScript:实现B站评论发布效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、需求

1、用户输入内容,输入框右下角实时显示输入字数

HTML+CSS+JavaScript:实现B站评论发布效果,html,css,javascript

 2、为避免用户输入时在内容左右两端误按多余的空格,在发送评论时,检测用户输入的内容左右两端是否带有空格,若有空格,发布时自动取消左右两端的空格

3、若用户发布的内容为空,则自动取消该条评论的发送,并弹出提示框:请勿发送空白评论!

4、当页面中已经填装多条评论时,发送的新评论自动追加到最末尾

5、 发布的评论最下方显示发布时间

HTML+CSS+JavaScript:实现B站评论发布效果,html,css,javascript

二、代码素材

以下是缺失JS部分的代码,感兴趣的小伙伴可以先自己试着写一写

<!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>评论回车发布</title>
    <style>
        .wrapper {
            min-width: 400px;
            max-width: 800px;
            display: flex;
            justify-content: flex-end;
        }

        .avatar {
            width: 48px;
            height: 48px;
            border-radius: 50%;
            overflow: hidden;
            /* 不允许超出大盒子 */
            background: url(./images/avatar.jpg) no-repeat center / cover;
            /* 大部分情况下,图片样式都是这样设置的 */
            margin-right: 20px;
        }

        /* 
        outline:outline(轮廓)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。
        注释:轮廓线不会占据空间,也不一定是矩形。
    */

        /* 
        transition:设置过度属性
        与.wrapper textarea:focus {
            border-color: #e4e4e4;
            background: #fff;
            height: 50px;
        }配合使用,表示光标在文本域中时,所有样式(属性值all)在2s内向
            border-color:#e4e4e4;
            background: #fff;
            height: 50px;
        平滑过渡
    */

        .wrapper textarea {
            outline: none;
            /* 这行代码可省略 */

            border-color: transparent;
            /* 边框颜色为透明 */

            resize: none;
            /* 用户无法自行调元素的尺寸,常用于文本域 */

            background: #f5f5f5;
            border-radius: 4px;
            flex: 1;
            padding: 10px;

            /* 这行代码与下面.wrapper textarea:focus的那几行代码配合,可以让相关样式在获取焦点事件的时候平滑过渡 */
            transition: all 0.5s;

            height: 30px;
        }

        /*用法类似于 选择器:hover */
        .wrapper textarea:focus {
            border-color: #e4e4e4;
            background: #fff;
            height: 50px;
        }

        .wrapper button {
            background: #00aeec;
            color: #fff;
            border: none;
            border-radius: 4px;
            margin-left: 10px;
            width: 70px;
            cursor: pointer;
        }

        .wrapper .total {
            margin-right: 80px;
            color: #999;
            margin-top: 5px;
            opacity: 0;
            /* 
                opacity设置透明度,0是完全透明,1是完全不透明
                opacity从0变成1时,元素会平滑显现
            */
            transition: all 0.5s;
        }

        .list {
            min-width: 400px;
            max-width: 800px;
        }

        .list .item {
            width: 100%;
            display: flex;
        }

        .list .item .info {
            flex: 1;
            border-bottom: 1px dashed #e4e4e4;
            padding-bottom: 10px;
        }

        .list .item p {
            margin: 0;
        }

        .list .item .name {
            color: #FB7299;
            font-size: 14px;
            font-weight: bold;
            line-height: 2em;
        }

        .list .item .text {
            color: #333;
            padding: 10px 0;
        }

        .list .item .time {
            color: #999;
            font-size: 12px;
        }
    </style>
</head>

<body>
    <div class="wrapper">
        <i class="avatar"></i> <!-- 需用可在一行排列且可设置宽高的行内块元素 -->
        <textarea id="tx" placeholder="发一条友善的评论" rows="2" maxlength="200"></textarea>
        <button>发布</button>
    </div>
    <div class="wrapper">
        <span class="total">0/200字</span>
    </div>
    <div class="list">
        <!-- <div class="item">
            <i class="avatar"></i>
            <div class="info">
                <p class="name">早八睡不醒午觉睡不够的程序员</p>
                <p class="text">大家都辛苦啦,感谢各位大大的努力,能圆满完成真是太好了[笑哭][支持]</p>
                <p class="time">2022-10-10 20:29:21</p>
            </div>
        </div> -->
    </div>
    <script>
        
    </script>

</body>

</html>

三、完整代码

因为今天这个案例的算法思路实在不方便直接用语言描述,所以我就直接放代码了

不过我在代码上添加了详细的注释,大家结合代码和注释一定能够理解的文章来源地址https://www.toymoban.com/news/detail-623337.html

<!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>评论回车发布</title>
    <style>
        .wrapper {
            min-width: 400px;
            max-width: 800px;
            display: flex;
            justify-content: flex-end;
        }

        .avatar {
            width: 48px;
            height: 48px;
            border-radius: 50%;
            overflow: hidden;
            /* 不允许超出大盒子 */
            background: url(./images/avatar.jpg) no-repeat center / cover;
            /* 大部分情况下,图片样式都是这样设置的 */
            margin-right: 20px;
        }

        /* 
        outline:outline(轮廓)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。
        注释:轮廓线不会占据空间,也不一定是矩形。
    */

        /* 
        transition:设置过度属性
        与.wrapper textarea:focus {
            border-color: #e4e4e4;
            background: #fff;
            height: 50px;
        }配合使用,表示光标在文本域中时,所有样式(属性值all)在2s内向
            border-color:#e4e4e4;
            background: #fff;
            height: 50px;
        平滑过渡
    */

        .wrapper textarea {
            outline: none;
            /* 这行代码可省略 */

            border-color: transparent;
            /* 边框颜色为透明 */

            resize: none;
            /* 用户无法自行调元素的尺寸,常用于文本域 */

            background: #f5f5f5;
            border-radius: 4px;
            flex: 1;
            padding: 10px;

            /* 这行代码与下面.wrapper textarea:focus的那几行代码配合,可以让相关样式在获取焦点事件的时候平滑过渡 */
            transition: all 0.5s;

            height: 30px;
        }

        /*用法类似于 选择器:hover */
        .wrapper textarea:focus {
            border-color: #e4e4e4;
            background: #fff;
            height: 50px;
        }

        .wrapper button {
            background: #00aeec;
            color: #fff;
            border: none;
            border-radius: 4px;
            margin-left: 10px;
            width: 70px;
            cursor: pointer;
        }

        .wrapper .total {
            margin-right: 80px;
            color: #999;
            margin-top: 5px;
            opacity: 0;
            /* 
                opacity设置透明度,0是完全透明,1是完全不透明
                opacity从0变成1时,元素会平滑显现
            */
            transition: all 0.5s;
        }

        .list {
            min-width: 400px;
            max-width: 800px;
        }

        .list .item {
            width: 100%;
            display: flex;
        }

        .list .item .info {
            flex: 1;
            border-bottom: 1px dashed #e4e4e4;
            padding-bottom: 10px;
        }

        .list .item p {
            margin: 0;
        }

        .list .item .name {
            color: #FB7299;
            font-size: 14px;
            font-weight: bold;
            line-height: 2em;
        }

        .list .item .text {
            color: #333;
            padding: 10px 0;
        }

        .list .item .time {
            color: #999;
            font-size: 12px;
        }
    </style>
</head>

<body>
    <div class="wrapper">
        <i class="avatar"></i> <!-- 需用可在一行排列且可设置宽高的行内块元素 -->
        <textarea id="tx" placeholder="发一条友善的评论" rows="2" maxlength="200"></textarea>
        <button>发布</button>
    </div>
    <div class="wrapper">
        <span class="total">0/200字</span>
    </div>
    <div class="list">
        <!-- <div class="item">
            <i class="avatar"></i>
            <div class="info">
                <p class="name">早八睡不醒午觉睡不够的程序员</p>
                <p class="text">大家都辛苦啦,感谢各位大大的努力,能圆满完成真是太好了[笑哭][支持]</p>
                <p class="time">2022-10-10 20:29:21</p>
            </div>
        </div> -->
    </div>
    <script>
        //获取元素
        const tx = document.querySelector('#tx')
        const button = document.querySelector('.wrapper button')
        const text = document.querySelector('.text')
        const time = document.querySelector('.time')
        const list = document.querySelector('.list')
        const total = document.querySelector('.total')

        //函数功能:发布评论
        function fabu() {
            //检测用户输入的内容左右两端是否带有空格,若有空格,发布时自动取消左右两端的空格
            //若用户发布的内容为空,则自动取消该条评论的发送,并弹出提示框:请勿发送空白评论!
            if (tx.value.trim() === '') {
                tx.value = ''
                total.innerHTML = '0/200字'
                alert('请勿发送空白评论!')
                return
            }

            //创建新的元素节点
            const div = document.createElement('div')

            //修改元素节点的内容
            div.className = 'item'
            div.innerHTML = `
            <i class="avatar"></i>
            <div class="info">
                <p class="name">早八睡不醒午觉睡不够的程序员</p>
                <p class="text">${tx.value}</p>
                <p class="time">${new Date().toLocaleString()}</p>
            </div>
            `

            //清空用户输入的内容
            tx.value = ''
            total.innerHTML = `${tx.value.length}/200字`

            //将用户输入的内容追加到评论区里
            list.append(div)
        }

        //鼠标点击发布,调用发布函数
        button.addEventListener('click', () => {
            fabu()
        })

        // 键盘按下Enter,调用发布函数
        tx.addEventListener('keyup', e => {
            if (e.key === 'Enter') fabu()
        })

        //输入框获得焦点,右下角自动显示字数
        tx.addEventListener('focus', function () {
            total.style.opacity = 1
        })

        //输入框失去焦点,右下角字数显示自动消失
        tx.addEventListener('blur', function () {
            total.style.opacity = 0
        })

        //用户输入时,实时显示输入字数
        tx.addEventListener('input', () => {
            total.innerHTML = `${tx.value.length}/200字`
        })

    </script>

</body>

</html>

到了这里,关于HTML+CSS+JavaScript:实现B站评论发布效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ❤️创意网页:制作一个绚丽的烟花效果(HTML、CSS和JavaScript实现)

    ✨ 博主: 命运之光 🌸 专栏: Python星辰秘典 🐳 专栏: web开发(简单好用又好看) ❤️ 专栏: Java经典程序设计 ☀️ 博主的其他文章: 点击进入博主的主页 前言: 欢迎踏入我的Web项目专栏,一段神奇而令人陶醉的数字世界! 🌌 在这里,我将带您穿越时空,揭开属于

    2024年02月17日
    浏览(82)
  • 用HTML、CSS和JavaScript实现鼠标可交互的3D太阳和月亮切换效果

    部分数据来源: ChatGPT  引言         太阳和月亮对于我们来说是一种常见的对比,这篇文章将介绍一个使用HTML、CSS和JavaScript创建的网页场景,能够把太阳和月亮切换展示给用户。这个场景能够让用户使用鼠标和滚轮与场景互动,带来更多的趣味和体验。 这里展示了HT

    2024年02月07日
    浏览(75)
  • HTML/CSS实现3D翻转页面效果

    下面是一个基本的例子,展示了如何使用CSS和HTML实现一个3D页面翻转效果: HTML部分: CSS部分: 在这个例子中,我们使用一个包含两个面(正面和背面)的容器div。通过CSS的 transform 属性和 rotateY 函数,我们实现了容器在鼠标悬停时的旋转效果。 你可以根据自己的需求调整容

    2024年01月24日
    浏览(46)
  • 前端:运用HTML+CSS+JavaScript实现拼图游戏

    前一段时间突然来了一个想法,就是运用前端知识实现一个拼图游戏,但是不知道具体怎样实现。今天,想到既然实现不了现实中我们看到的那种拼块,那么就用正方形来代替吧! 效果如下: 想到就是当小的图片块放到合适的位置上时,表示拼图完成。 1. 前端布局 运用cs

    2024年02月08日
    浏览(62)
  • HTML+CSS+JavaScript实现网络购物车

    1 页面布局 购物车由一个table标签和一个div标签构成。案例在Chrome浏览器运行效果,如图所示。 table标签共有5行6列,第1行是表头,第2-5行的每一行都代表一个商品,依次用td标签存放商品的勾选框、商品缩略图及名称、商品单价、商品增减操作按钮以及小计、删除按钮等。

    2024年02月05日
    浏览(48)
  • HTML5+CSS实现图片3D旋转效果,附音乐

    利用程序呈现图片,可以俘获一众女生的心,增加音乐可以实现图片变化的同时也带上了想要得到效果,如此一程序实乃众人之喜。 先看看程序呈现的效果,还是特别吸引人的。 先在网上爬取想要呈现的美女照片,存放在文件夹img-one,与程序路径一致。 图片像素需进行调整

    2024年02月13日
    浏览(50)
  • HTML 和 CSS 来实现毛玻璃效果(Glassmorphism)

            它的主要特征就是半透明的背景,以及阴影和边框。 同时还要为背景加上模糊效果,使得背景之后的元素根据自身内容产生漂亮的“变形”效果,示例: 首先,创建一个 HTML 文件,写入如下内容: 为  body  标签添加一些样式,并使用鲜艳的颜色和渐变作为背景

    2024年02月11日
    浏览(42)
  • HTML、CSS和JavaScript实现简单天气预报

    使用 HTML、CSS和JavaScript实现简单天气预报 的步骤: 首先需要获取天气API的数据,可以通过向第三方天气数据服务商发送HTTP请求来获取数据。例如,可以使用Yahoo Weather API或OpenWeatherMap API等。这里以OpenWeatherMap API为例,获取当前城市的天气情况。 接着,将获取到的天气数据动

    2024年02月04日
    浏览(54)
  • CSS样式前端HTML页面常用CSS效果实现及其相关配置信息------前端入门基础教程

    !DOCTYPE html !-- 这是HTML的注释 -- html lang=\\\"en\\\" id=\\\"myHtml\\\"     head         !-- 这里不是设置了编码,而是告诉浏览器,用什么编码方式打开文件避免乱码 --         meta charset=\\\"UTF-8\\\"         meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\"         titleHtmlAll/title         

    2024年02月05日
    浏览(59)
  • html+css实现二级导航栏效果,简单易看懂噢!

    这应该是这几天以来看到的最简单易懂的有二级菜单栏的导航栏效果实现了 使用html+css实现,看了好几天导航栏的实现方式,要么是太复杂的需要JS或者框架的,要么是太简单仅仅使用div和超链接的, 再要么就是只有简单的一级导航,没有二级菜单栏的,心情复杂 就想找一个

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包