JavaScript实现简易聊天对话框(加滚动条)

yizhihongxing

下面是JavaScript实现简易聊天对话框(加滚动条)的完整攻略。

简介

这个项目的目标是实现一个简易的聊天对话框,用户可以在对话框内输入消息,同时页面支持滚动条。

准备工作

首先,我们需要准备一个HTML模板和CSS文件,用于布局和样式调整。模板如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>简易聊天对话框</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <div class="chat-container">

        <div class="messages">
            <!-- 消息显示区域 -->
        </div>

        <div class="input-box">
            <textarea id="input-message" placeholder="请输入消息"></textarea>
            <button id="send-btn">发送消息</button>
        </div>

    </div>

    <script src="js/main.js"></script>
</body>
</html>

其中,class="chat-container"是整个聊天界面的容器,class="messages"是消息显示区域的容器,其中我们将在JavaScript中动态添加消息内容。

接下来,我们需要在CSS文件中定义样式,使整个聊天界面看起来更美观。

.chat-container {
    width: 500px;
    margin: 50px auto;
    border: 1px solid #ccc;
    border-radius: 10px;
    background-color: #fff;
    box-shadow: 0 1px 5px rgba(0, 0, 0, 0.2);
}

.messages {
    height: 300px;
    overflow-y: auto;
    padding: 10px;
}

.input-box {
    padding: 10px;
}

#input-message {
    width: 80%;
    height: 60px;
    padding: 10px;
    border-radius: 5px;
    border: 1px solid #ccc;
    resize: none;
    outline: none;
}

#send-btn {
    display: inline-block;
    width: 18%;
    height: 60px;
    margin-left: 2%;
    border-radius: 5px;
    background-color: #36c;
    color: #fff;
    font-size: 16px;
    border: none;
    outline: none;
}

实现过程

添加消息

首先,我们需要在输入框中监听用户的输入,获取到用户输入的内容,并在“发送”按钮被点击时,将输入内容添加到消息显示区域中。

var sendBtn = document.getElementById('send-btn');
var messageInput = document.getElementById('input-message');
var messagesContainer = document.querySelector('.messages');

// 发送消息事件处理函数
function sendMessage() {
    var message = document.createElement('div');
    message.classList.add('message');
    message.innerText = messageInput.value;
    messagesContainer.appendChild(message);
    messageInput.value = '';
}

sendBtn.addEventListener('click', sendMessage);

在这段代码中,我们首先获取“发送”按钮、消息输入框、以及消息显示区域的DOM元素。然后,我们定义了一个名为sendMessage的函数,该函数会在用户点击“发送”按钮时被调用。在函数内部,我们创建了一个<div>元素,并将其添加到消息显示区域中。这里使用createElement函数创建<div>元素,然后使用innerText属性将用户输入的内容赋值给创建的<div>元素的文本部分。最后,我们清空了用户输入的内容,使得下一条消息可以顺利发送。

添加滚动条

接下来,我们需要实现消息显示区域的滚动条功能。我们希望当消息数量超出一定限制时,消息区域会自动出现滚动条,并将滚动条位置固定在最新的一条消息上。

// 自动滚动函数
function autoScroll() {
    var messages = document.querySelectorAll('.messages .message');
    var lastMessage = messages[messages.length - 1];
    var lastMessageTop = lastMessage.offsetTop;

    messagesContainer.scrollTop = lastMessageTop - messagesContainer.offsetHeight + lastMessage.offsetHeight;
}

// 监听消息变化
var observer = new MutationObserver(function(mutations) {
    autoScroll();
});

observer.observe(messagesContainer, { childList: true });

在这段代码中,我们定义了一个名为autoScroll的函数,该函数负责计算滚动条的位置,然后将其固定在最新的消息上。该函数首先获取了所有的消息元素,并从中取出最后一条消息。然后,我们使用offsetTop属性计算出最后一条消息相对于消息显示区域顶部的距离。接下来,我们使用scrollTop属性调整消息显示区域的滚动位置,使得最后一条消息可以完整地显示在消息区域中。

接下来,我们使用MutationObserver函数监听消息显示区域的变化,当子元素改变时,即有新消息添加到消息显示区域时,就会触发autoScroll函数,自动调整滚动条的位置。

示例

示例一

假设我们希望将消息显示区域的消息数量限制为10条,当超过10条时,就会开始显示滚动条。在创建消息元素时,我们可以判断消息数量是否超过10条,在超过限制时,删除最早的一条消息,然后再添加新的一条消息。

// 发送消息事件处理函数
function sendMessage() {
    var messageCount = document.querySelectorAll('.messages .message').length;

    if (messageCount >= 10) {
        messagesContainer.firstElementChild.remove();
    }

    var message = document.createElement('div');
    message.classList.add('message');
    message.innerText = messageInput.value;
    messagesContainer.appendChild(message);
    messageInput.value = '';
}

sendBtn.addEventListener('click', sendMessage);

示例二

假设我们希望能够在后端数据库中保存聊天记录。在每次用户发送消息时,我们不仅将消息添加到消息显示区域中,还可以使用Ajax技术将消息发送到后端保存。

// 发送消息事件处理函数
function sendMessage() {
    var messageCount = document.querySelectorAll('.messages .message').length;

    if (messageCount >= 10) {
        messagesContainer.firstElementChild.remove();
    }

    var message = document.createElement('div');
    message.classList.add('message');
    message.innerText = messageInput.value;
    messagesContainer.appendChild(message);
    messageInput.value = '';

    // 发送消息到后端
    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/api/sendMessage');
    xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
    xhr.send(JSON.stringify({
        message: messageInput.value
    }));
}

sendBtn.addEventListener('click', sendMessage);

在这段代码中,我们使用了XMLHttpRequest对象向后端发送了一个POST请求,并将用户发送的消息作为JSON对象的属性值发送到后端。后端可以接受到该请求,将消息保存到数据库中。这样,即使用户关闭了聊天界面,也不会丢失聊天记录。

总结

由此可见,实现简易聊天对话框(加滚动条)的过程中,关键在于添加消息和实现滚动条。我们可以通过监听消息数量,实现消息数量的限制。同时,使用MutationObserver函数,可以在新消息添加到消息显示区域时,自动调整滚动条位置。此外,我们还可以通过Ajax技术将消息发送到后端进行保存,从而实现聊天记录的保存。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现简易聊天对话框(加滚动条) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 将文本输入框内容加入表中的js代码

    让我来为你详细讲解如何将文本输入框中的内容加入表中的 JS 代码步骤: 步骤一:HTML 表单 首先,需要在 HTML 页面中添加表单来获取用户输入的数据,例如: <form> <label for="username">用户名:</label> <input type="text&qu…

    css 2023年6月10日
    00
  • CSS3使用border-radius属性制作圆角

    CSS3使用border-radius属性制作圆角 简介 border-radius属性用于设置元素的圆角半径。 通常,我们使用border-radius来创建圆形或椭圆形的形状,但它也可以用于创建自定义的非对称形状。 语法 具体的语法格式为: border-radius: <top-left-radius> <top-right-radi…

    css 2023年6月10日
    00
  • CSS文本阴影 text-shadow 悬停效果详解

    CSS文本阴影 text-shadow 悬停效果详解 文本阴影是在字体背后添加投影效果,让字体看起来有立体和浮动的效果。 text-shadow 属性可以添加阴影效果,以逐步增加各种文字的 3D 效果,文本阴影可以用于各种文本或标题。 语法 text-shadow: h-shadow v-shadow blur-radius color; 参数 h-shad…

    css 2023年6月10日
    00
  • css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单

    为了实现可折叠导航菜单,需要使用CSS3和jQuery。下面是实现可折叠导航菜单的完整攻略。 使用HTML结构元素和CSS样式创建可折叠的导航菜单 使用HTML结构元素创建一个列表,其中每个列表项代表一个导航菜单条目。例如: <ul> <li><a href="#">Home</a><…

    css 2023年6月10日
    00
  • CSS教程:行高line-height属性(2)

    当我们在网页设计中设置文本的行高时,可以使用CSS属性line-height来实现。这篇文章是CSS教程系列的第二部分,继续详细介绍line-height属性的使用方法。 什么是行高? 行高实际上是一个相对于字体大小的值,它被用于控制文字行与行之间的距离。当我们没有设置行高时,浏览器将会使用默认的行高,通常是字体大小的1.2倍。 如何使用line-heigh…

    css 2023年6月9日
    00
  • css之使table也能overflow:hidden

    要让 table 具有 overflow:hidden 的效果,可通过将 table 放置在一个具有固定宽度和 height 的容器 div 中,并设置 div 的 overflow:hidden 属性,从而实现 table 的滚动效果。具体的过程如下: 首先,需要创建一个包含table的容器 div,并设置 div 的宽度和 height,以及 overf…

    css 2023年6月10日
    00
  • jquery属性过滤选择器使用示例

    当我们使用 jQuery 选取元素时,可以使用属性选择器来选择具有指定属性的元素。属性过滤选择器是基于这种思路工作的。 属性过滤选择器 属性过滤选择器使用属性名称和可选匹配规则来匹配一个或多个元素。下面是一些常用的属性过滤选择器: [attribute]:选择具有指定属性的元素。 [attribute=value]:选择具有指定属性且属性值等于指定值的元素。…

    css 2023年6月10日
    00
  • 滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码

    以下是详细讲解“滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码”的攻略: 滚动条变色 首先,使用CSS的::-webkit-scrollbar伪类可以选择滚动条,进而改变滚动条的样式。比如,为滚动条添加渐变颜色,可以使用以下代码: ::-webkit-scrollbar { width: 10px; } ::-webkit-scrollbar-thumb …

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部