0
点赞
收藏
分享

微信扫一扫

Ajax案例之聊天机器人

_鱼与渔_ 2022-02-19 阅读 79

在家是否感到空虚寂寞无聊呢🤔

别怕!

今天我就要带来一个带你消遣时光的陪聊

她可以陪你谈天说地,你有什么需要她帮助的话她也会尽自己的能力来帮助你!

目录

案例效果

实现效果操作 

Step1:案例中的代码结构

Step2:在js文件中实现动态效果

总结


 

案例效果

我们所想得到的效果:

  • 当机器人和我们对话,我们回复一句后她能够回复我们
  • 机器人的回复可以用语音给我们读出来
  • 当我们按enter键就能发送
  • 当发送完消息滚动条可以滚到底部

好啦~当我们知道这个效果了~接下来就让我们来实现这些效果吧~(顺便是分割线)~


实现效果操作 

Step1:案例中的代码结构

<body>
    <div class="wrap">
        <!-- 头部 Header 区域 -->
        <div class="header">
            <h3>小思同学</h3>
            <img src="img/person01.png" alt="icon" />
        </div>
        <!-- 中间 聊天内容区域 -->
        <div class="main">
            <ul class="talk_list" style="top: 0px;" id="talk_list">
                <li class="left_word">
                    <img src="img/person01.png" /> <span>hi!我是你的助手siri。有什么我能帮助你的吗?</span>
                </li>
                <!-- <li class="right_word">
                    <img src="img/person02.png" /> <span>你好哦</span>
                </li> -->
            </ul>
            <div class="drag_bar" style="display: none;">
                <div class="drager ui-draggable ui-draggable-handle" style="display: none; height: 412.628px;"></div>
            </div>
        </div>
        <!-- 注意:只要为了audio指定了新的src属性,并且指定了autoplay,那么语音就会自动播放 -->
        <audio src="" id="voice" autoplay style="display:none;"></audio>
        <!-- audio标签让机器人自动播放所出现的文字 -->
        <!-- 底部 消息编辑区域 -->
        <div class="footer">
            <img src="img/person02.png" alt="icon" />
            <input type="text" placeholder="说的什么吧..." class="input_txt" id="ipt" />
            <input type="button" value="发 送" class="input_sub" id="btnSend" />
        </div>
    </div>
    <script type="text/javascript" src="js/scroll.js"></script>
    <script src="js/chat.js"></script>
</body>

Step2:在js文件中实现动态效果

$(function() {
    // 初始化右侧滚动条--当发送一个消息滚动条就能滑倒底端
    // 这个方法定义在scroll.js中

    resetui()

    $("#btnSend").on("click", function() {
        var text = $("#ipt").val().trim();
        if (text.length <= 0) {
            return $("#ipt").val('') //如果输入框的内容为空格/空就清空文本框里面的内容
        } //如果用户输入了内容进去就进行追加
        $("#talk_list").append('<li class="right_word"><img src="img/person02.png" /> <span>' + text + '</span></li>');
        $("#ipt").val('');
        // 重置滚动条的位置
        resetui(); //直接写函数名就即可调用了
        // 发起请求,获取聊天的内容跟
        getMsg(text)
    })

    // 获取聊天机器人发送回来的消息
    function getMsg(text) { //获取到用户输入的text内容
        // 然后发起Ajax请求
        $.ajax({
            method: 'GET',
            url: 'http://www.liulongbin.top:3006/api/robot',
            data: {
                spoken: text
            },
            success: function(res) {
                // console.log(res);
                if (res.message === 'success') {
                    // 接收聊天消息
                    var msg = res.data.info.text; //msg就是机器人渲染到页面的文字
                    // 渲染到页面上
                    $("#talk_list").append('<li class="left_word"><img src="img/person01.png" /> <span>' + msg + '</span></li>');
                    // 重置滚动条
                    resetui();
                    // 调用下面的语音函数--文本转换为语音
                    getVoice(msg);
                }
            }

        })

    }

    // 把文字转换成语音效果
    function getVoice(text) { //text就是想把文本转换成语音的效果
        $.ajax({
            method: 'GET',
            url: 'http://www.liulongbin.top:3006/api/synthesize',
            data: {
                text: text //text就是外界传输进来的文本
            },
            success: function(res) {
                console.log(res);
                if (res.status === 200) {
                    // 播放语音
                    $("#voice").attr('src', res.voiceUrl); //voiceUrl是服务器返回的音频url地址
                }
            }
        })
    }

    // 当用户按下enter键就能发送信息(此时鼠标聚焦在文本框里)
    // 给文本框绑定keyup事件
    $("#ipt").on("keyup", function(e) {
        // console.log(e.keyCode);
        if (e.keyCode === 13) {
            // 当用户按了enter回车键就触发了发送按钮就发送信息了
            $("#btnSend").click()
        }
    })

})

在Step2中主要是:

  • 将用户输入的内容渲染到聊天窗口
  • 发起请求获取聊天消息
  • 将机器人的聊天内容转为语音
  • 通过<audio>播放语音
  • 使用回车键发送消息

总结

这个案例是为了巩固在学习ajax的使用,所以先要打好基础然后就能实现许多好玩的效果!

 ENDING~

举报

相关推荐

0 条评论