zoukankan      html  css  js  c++  java
  • ajax-聊天机器人-jquery-get()-post()

    聊天机器人案例

    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" />
      <link rel="stylesheet" href="css/reset.css" />
      <link rel="stylesheet" href="css/main.css" />
      <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
      <script type="text/javascript" src="js/jquery-ui.min.js"></script>
      <script type="text/javascript" src="js/jquery.mousewheel.js"></script>
      <title>聊天机器人</title>
    </head>
    
    <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>嗨,最近想我没有?</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>
        <!-- 底部 消息编辑区域 -->
        <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>
      <!-- 注意:只要为 audio 指定了新的 src 属性,而且指定了 autoplay,那么,语音就会自动播放 -->
      <audio src="" id="voice" autoplay style="display: none;"></audio>
      <script type="text/javascript" src="js/scroll.js"></script>
      <script src="./js/chat.js"></script>
    </body>
    
    </html>

     reset.css

    body,ul,h1,h2,h3,h4,h5,h6{
        margin: 0;
        padding: 0;
    }
    h1,h2,h3,h4,h5,h6{
        font-size:100%;
        font-weight:normal;
    }
    a{
        text-decoration:none;
    }
    ul{
        list-style:none;
    }
    img{
        border:0px;
    }
    
    /* 清除浮动,解决margin-top塌陷 */
    .clearfix:before,.clearfix:after{
        content:'';
        display:table;    
    }
    .clearfix:after{
        clear:both;
    }
    .clearfix{
        zoom:1;
    }
    
    .fl{
        float:left;
    }
    .fr{
        float:right;
    }

    main.css

    body {
        font-family: 'Microsoft YaHei';
    }
    .wrap {
        position: fixed;
        width: 450px;
        left: 50%;
        margin-left: -225px;
        top: 20px;
        bottom: 20px;
        border: 1px solid #ebebeb;
        background-color: #fff;
        border-radius: 10px;
        box-shadow: 0 0 30px rgba(0, 0, 0, 0.1);
        overflow: hidden;
    }
    .header {
        height: 55px;
        background: linear-gradient(90deg, rgba(246, 60, 47, 0.6), rgba(128, 58, 242, 0.6));
        overflow: hidden;
    }
    .header h3 {
        color: #faf3fc;
        line-height: 55px;
        font-weight: normal;
        float: left;
        letter-spacing: 2px;
        margin-left: 25px;
        font-size: 18px;
        text-shadow: 0px 0px 5px #944846;
    }
    .header img {
        float: right;
        margin: 7px 25px 0 0;
        border-radius: 20px;
        box-shadow: 0 0 5px #f7f2fe;
    }
    .main {
        position: absolute;
        left: 0;
        right: 0;
        top: 55px;
        bottom: 55px;
        background-color: #f4f3f3;
        box-sizing: border-box;
        padding: 10px 0;
        overflow:hidden;
    }
    .talk_list{
        position: absolute;
        width:100%;
        left:0px;
        top:0px;
    }
    .talk_list li {
        overflow: hidden;
        margin: 20px 0px 30px;
    }
    .talk_list .left_word img {
        float: left;
        margin-left: 20px;
    }
    .talk_list .left_word span {
        float: left;
        background-color: #fe9697;
        padding: 10px 15px;
        max-width: 290px;
        border-radius: 12px;
        font-size: 16px;
        color: #fff;
        margin-left: 13px;
        position: relative;
        line-height: 24px;
    }
    .talk_list .left_word span:before {
        content: '';
        position: absolute;
        left: -8px;
        top: 3px;
        width: 13px;
        height: 12px;
        background: url('../img/corner01.png') no-repeat;
    }
    .talk_list .right_word img {
        float: right;
        margin-right: 20px;
    }
    .talk_list .right_word span {
        float: right;
        background-color: #fff;
        padding: 10px 15px;
        max-width: 290px;
        border-radius: 12px;
        font-size: 16px;
        color: #000;
        margin-right: 13px;
        position: relative;
        line-height: 24px;
    }
    .talk_list .right_word span:before {
        content: '';
        position: absolute;
        right: -8px;
        top: 3px;
        width: 13px;
        height: 12px;
        background: url('../img/corner02.png') no-repeat;
    }
    .drag_bar{
        position:absolute;
        right:0px;
        top:0px;
        background-color: #fff;
        height:100%;
        width:6px;
        box-sizing:border-box;
        border-bottom:1px solid #f4f3f3;
    }
    .drager{
        position:absolute;
        left:0px;
        top:0px;
        background-color: #cdcdcd;
        height:100px;
        width:6px;
        border-radius:3px;
        cursor: pointer;
    }
    
    .footer{
        width:100%;
        height: 55px;
        left:0px;
        bottom:0px;
        background-color:#fff;
        position: absolute;
    }
    
    .footer img{
        float: left;
        margin:8px 0 0 20px;
    }
    
    .input_txt{
        float: left;
        width:270px;
        height:37px;
        border:0px;
        background-color: #f4f3f3;
        margin:9px 0 0 20px;
        border-radius:8px;
        padding:0px;
        outline:none;
        text-indent:15px;
    }
    .input_sub{
        float: left;
        width:70px;
        height:37px;
        border:0px;
        background-color: #fe9697;
        margin:9px 0 0 15px;
        border-radius:8px;
        padding:0px;
        outline:none;
        color:#fff;
        cursor: pointer;    
    }

     chat.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) {
            $.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
                        $('#talk_list').append('<li class="left_word"><img src="img/person01.png" /> <span>' + msg + '</span></li>')
                            // 重置滚动条的位置
                        resetui()
                            // 调用 getVoice 函数,把文本转化为语音
                        getVoice(msg)
                    }
                }
            })
        }
    
        // 把文字转化为语音进行播放
        function getVoice(text) {
            $.ajax({
                method: 'GET',
                url: ' http://www.liulongbin.top:3006/api/synthesize',
                data: {
                    text: text
                },
                success: function(res) {
                    // console.log(res)
                    if (res.status === 200) {
                        // 播放语音
                        $('#voice').attr('src', res.voiceUrl)
                    }
                }
            })
        }
    
        // 为文本框绑定 keyup 事件
        $('#ipt').on('keyup', function(e) {
            // console.log(e.keyCode)
            if (e.keyCode === 13) {
                // console.log('用户弹起了回车键')
                $('#btnSend').click()
            }
        })
    })

    scroll.js

    $(function() {
        var $main = $('.main'); //获取主体部分
        var $list = $('.talk_list'); //获取留言列表
        var $drager = $('.drager'); //获取滚动条
        var $mainh = $main.outerHeight(false); //获取主体外部高度
        var $listh = $list.outerHeight(false); //获取列表外部高度
    
        var $rate = $mainh / $listh; //主体外部高度与列表外部高度的比率
        var $dragh = $mainh * $rate; //拖动的高度等于主体高度乘以比率
        var $top = 0;
        $drager.css({ 'height': $dragh });
    
        $drager.draggable({
            containment: "parent",
            drag: function(ev, ui) {
                $top = ui.position.top;
                $list.css({ 'top': -$top / $rate });
            }
        });
    
        $(window).resize(function() {
            resetui();
        });
    
        //var timer = null;
        var flag = false;
    
        $main.mousewheel(function(ev, delta) {
            //console.log(delta);
            //clearTimeout(timer);
            //timer = setTimeout(function(){
            // 向上滚动正值,向下滚动负值
            if (flag) {
                return;
            }
    
            flag = true;
    
            setTimeout(function() {
                flag = false;
            }, 300);
    
            if ($listh <= $mainh) {
                return;
            } else {
                if (delta > 0) {
                    $top = $top - 60;
                    if ($top < 0) {
                        $top = 0;
                    }
                    $drager.animate({ 'top': $top }, 200);
                    $list.animate({ 'top': -$top / $rate }, 200);
                } else {
                    $top = $top + 60;
                    if ($top > ($mainh - $dragh)) {
                        $top = parseInt($mainh - $dragh);
                    }
                    $drager.animate({ 'top': $top }, 200);
                    $list.animate({ 'top': -parseInt($top / $rate) }, 200);
                }
            }
    
            //},300);        
        });
        if ($listh <= $mainh) {
            $('.drag_bar').hide();
            $('.drager').hide();
        }
    
        function resetui() {
            $mainh = $main.outerHeight(false);
            $listh = $list.outerHeight(false);
            $rate = $mainh / $listh;
            $dragh = $mainh * $rate;
            $drager.css({ 'height': $dragh });
    
            if ($listh <= $mainh) {
                $('.drag_bar').hide();
                $drager.hide();
                $list.css({ 'top': 0 });
            } else {
                $('.drag_bar').show();
                $drager.show();
                $drager.css({ 'top': $mainh - $dragh });
                $list.css({ 'top': -($listh - $mainh) });
            }
        }
    
        window.resetui = resetui;
    })
  • 相关阅读:
    计算机基础知识
    测试用例设计
    Windows MySql增量备份、完整备份采坑之路
    GOF 的23种JAVA常用设计模式总结 02 UML中的类图与类图之间的关系
    GOF 的23种JAVA常用设计模式总结 01 设计模式的概念分类和功能
    Springboot 整合ApachShiro完成登录验证和权限管理
    玩转Spring全家桶笔记 04 Spring的事务抽象、事务传播特性、编程式事务、申明式事务
    玩转Spring全家桶笔记 03 Spring的JDBC操作以及SQL批处理的实现
    玩转Spring全家桶笔记 02 那些好用的连接池HikariCP
    Springboot token令牌验证解决方案 在SpringBoot实现基于Token的用户身份验证
  • 原文地址:https://www.cnblogs.com/shangsi/p/14831385.html
Copyright © 2011-2022 走看看