JQuery实现聊天对话框

本文介绍了一个简单的聊天记录模拟页面的实现方法,通过HTML、CSS和JavaScript(使用jQuery库)完成。该页面允许用户选择说话角色并输入对话内容,点击发送后,对话将按指定样式显示在聊天区内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图如下:

HTML代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style type="text/css">
        .talk_con{
            width:600px;
            height:500px;
            border:1px solid #666;
            margin:50px auto 0;
            background:#f9f9f9;
        }
        .talk_show{
            width:580px;
            height:420px;
            border:1px solid #666;
            background:#fff;
            margin:10px auto 0;
            overflow:auto;
        }
        .talk_input{
            width:580px;
            margin:10px auto 0;
        }
        .whotalk{
            width:80px;
            height:30px;
            float:left;
            outline:none;
        }
        .talk_word{
            width:420px;
            height:26px;
            padding:0px;
            float:left;
            margin-left:10px;
            outline:none;
            text-indent:10px;
        }        
        .talk_sub{
            width:56px;
            height:30px;
            float:left;
            margin-left:10px;
        }
        .atalk{
           margin:10px; 
        }
        .atalk span{
            display:inline-block;
            background:#0181cc;
            border-radius:10px;
            color:#fff;
            padding:5px 10px;
        }
        .btalk{
            margin:10px;
            text-align:right;
        }
        .btalk span{
            display:inline-block;
            background:#ef8201;
            border-radius:10px;
            color:#fff;
            padding:5px 10px;
        }
    </style>
    <script src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">      
    // 写出对应功能代码  
    $(function(){
        // 发送按钮单击,获取用户输入的数据,显示到上面的区域
        var $talksub = $('#talksub')
        var $words = $('#words')
        $talksub.click(function(){
            var vals = $('#talkwords').val()
            alert(vals)
            // 如果是a说 value==0,就显示a的样式的文字
            var whoVal = $('#who').val()
            var str = ''
            if(vals == '')
            {
                alert('请输入内容')
                return
            }



            if(whoVal ==0)
            {
                str = '<div class="atalk"><span>A说:'+vals+'</span></div>'
            }
            else
            {
                str = '<div class="btalk"><span>B说:'+vals+'</span></div>'
            }
            // 原有内容的基础上加上 str
            $words.html( $words.html() + str )
        })
    })
    </script>
</head>
<body>
    <div class="talk_con">
        <div class="talk_show" id="words">
            <div class="atalk"><span>A说:吃饭了吗?</span></div>
            <div class="btalk"><span>B说:还没呢,你呢?</span></div>
        </div>
        <div class="talk_input">
            <select class="whotalk" id="who">
                <option value="0">A说:</option>
                <option value="1">B说:</option>
            </select>
            <input type="text" class="talk_word" id="talkwords">
            <input type="button" value="发送" class="talk_sub" id="talksub">
        </div>
    </div>
</body>
</html>

  

转载于:https://www.cnblogs.com/wf-skylark/p/9157519.html

### Vue2 实现 AI 聊天对话框 #### 创建基本结构 为了构建一个简单的AI聊天对话框,在HTML文件中定义了一个容器来容纳所有的消息。每一条消息及其对应头像被放置在一个`div`内,并且此`div`应用了特定样式类以便于布局控制[^1]。 ```html <div id="app"> <div class="message-container" v-scroll> <div v-for="(msg, index) in messages" :key="index" :class="[msg.isMe ? 'right_layout_myselfChat' : 'left_layout_otherChat']"> <img :src="msg.avatarUrl" alt="User Avatar" class="user_img"/> <p>{{ msg.text }}</p> </div> </div> <!-- 输入区域 --> <input type="text" v-model="newMessage" @keyup.enter="sendMessage" placeholder="Type a message..." /> </div> ``` #### 添加CSS样式 对于上述提到的消息项,通过`.user_img`类名设置了头像的尺寸和其他属性;而对于整个消息列表,则利用了自定义滚动行为确保新消息能够立即进入视野范围[^2]。 ```css .message-container { max-height: 400px; overflow-y: auto; } .right_layout_myselfChat, .left_layout_otherChat { display: flex; align-items: center; margin-bottom: 8px; } .user_img { width: 40px; height: 40px; border-radius: 50%; } ``` #### 定义Vue实例与逻辑处理 接下来初始化Vue实例并配置数据绑定以及事件监听器。这里还实现了发送消息的功能——每当用户按下回车键时触发相应函数向数组追加新的对象表示的新消息记录。此外,也包含了模拟接收来自服务器响应的过程[^3]。 ```javascript // 自定义指令用于自动滚动到最新消息位置 Vue.directive('scroll', { inserted(el) { el.scrollIntoView({ behavior: "smooth", block: "end", inline: "nearest" }); } }); new Vue({ el: '#app', data() { return { newMessage: '', messages: [ // 初始化一些测试数据... ] }; }, methods: { sendMessage() { if (!this.newMessage.trim()) return; const myMsg = this.createMessage(this.newMessage, true); this.messages.push(myMsg); this.newMessage = ''; // 模拟异步获取回复 setTimeout(() => { const botReply = `You said "${myMsg.text}"`; this.messages.push(this.createMessage(botReply)); }, 1000); }, createMessage(text, isMe=false) { return { text, avatarUrl: isMe ? '/path/to/my-avatar.png' : '/path/to/bot-avatar.png', isMe }; } } }); ``` #### 实现逐字显示效果 为了让用户体验更加生动有趣,可以在接收到机器人的回应之后采用逐步显现的方式呈现文字内容而不是一次性全部加载出来。这可以通过JavaScript中的定时器机制轻松完成,类似于jQuery的做法但在Vue环境中可以直接操作组件内部的状态变量而不需要依赖DOM查询选择器[^4]。 ```javascript methods: { ..., simulateTypingEffect(messageIndex) { let currentText = ''; const fullText = this.messages[messageIndex].text; function updateDisplay() { currentText += fullText[currentText.length]; Vue.set( app.messages[messageIndex], 'text', currentText ); if (currentText !== fullText) { setTimeout(updateDisplay, Math.random() * (70 - 30) + 30); } } updateDisplay(); } }, watch: { messages(newVal) { newVal.forEach((_, idx) => { if (_ === newVal.length - 1 && !_.isMe) { nextTick().then(() => this.simulateTypingEffect(idx)); } }); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值