zoukankan      html  css  js  c++  java
  • chat.php

    <!DOCTYPE html>
    <html>
    <meta charset="UTF-8">
    <title>web chat</title>
    <link href="static/chat.css" rel='stylesheet' type='text/css' />
    <script src="static/jquery-1.7.2.js"></script>
    </head>
    <body>

    <div id="chat">
    <div class="sidebar">
    <div class="m-card">
    <footer>
    <input class="search" placeholder="查找好友">
    </footer>
    </div>
    <div class="m-list" style="overflow-y: scroll;height: calc(100% - 10pc);">
    <ul>
    </ul>
    </div>
    </div>
    <div class="main">
    <h3 align='center' class="to-user" username=""></h3>
    <div class="m-message">
    <ul>

    </ul>
    </div>
    <!--send-->
    <div class="m-text">
    <textarea placeholder="按 Ctrl + Enter 发送" class="input"></textarea>
    </div>
    </div>
    </div>
    </body>
    <script type="text/javascript">
    $(function(){
    if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){
    alert('暂不支持移动端访问,请移步PC端!');
    return false;
    }
    var synckey = '';
    var mname = '';
    var mnickname = '';
    var myheadimg = '';
    //微信初始化
    $.ajax({
    url : "index.php?act=init",
    datatype : 'json',
    type : 'post',
    async : false,
    data : {},
    success : function(data){
    var res = JSON.parse(data);

    //将synckey存入本地缓存,后续步骤需要
    synckey = JSON.stringify(res.SyncKey);//json 串形式存入
    sessionStorage.synckey = synckey;
    muname = res.User.UserName;
    sessionStorage.username = muname;
    mnickname = res.User.NickName;
    sessionStorage.nickname = mnickname;
    myheadimg = 'index.php?act=avatar&uri=' + escape(res.User.HeadImgUrl);
    //登陆用户信息
    var ustr = '<header>'
    +'<img class="avatar" width="40" height="40" alt="Coffce" src="'+ myheadimg +'">'
    +'<p class="name">'+ res.User.NickName +'</p>'
    +'</header>';
    $(".m-card").prepend(ustr);
    //遍历初始化返回的好友和公众号
    var userlist = res.ContactList;
    var str = '';
    for (var key in userlist) {
    var img = 'index.php?act=avatar&uri=' + escape(userlist[key].HeadImgUrl);
    str += '<li class="active" username="'+ userlist[key].UserName +'">'
    +'<img class="avatar" width="30" height="30" src="'+ img +'" />'
    +'<p class="name">'+ userlist[key].NickName +'</p>'
    +'</li>';
    }
    $(".m-list ul").append(str);
    //滚动到底部
    $(".m-message").scrollTop($('.m-message ul')[0].scrollHeight);
    },
    error : function(data){
    console.log(data);
    }
    });
    //初始化 结束

    //获取所有好友列表
    $.ajax({
    url : "index.php?act=users",
    datatype : 'json',
    type : 'post',
    data : {},
    success : function(data){
    var res = JSON.parse(data);
    console.log(res);
    var users = {};//存储username =》 nickname
    //遍历初始化返回的好友和公众号
    var userlist = res.MemberList;
    var str = '';
    for (var key in userlist) {
    var img = 'index.php?act=avatar&uri=' + escape(userlist[key].HeadImgUrl);
    var uname = userlist[key].UserName;
    var nickname = userlist[key].NickName;
    str += '<li class="active" username="'+ uname +'">'
    +'<img class="avatar" width="30" height="30" src="'+img+'" />'
    +'<p class="name">'+ nickname +'</p>'
    +'</li>';
    users[uname] = nickname;
    }
    //把登陆用户的信息也附加上
    users[muname] = mnickname;

    sessionStorage.users = JSON.stringify(users);
    $(".m-list ul").append(str);
    //滚动到底部
    //$(".m-message").scrollTop($('.m-message ul')[0].scrollHeight);
    },
    error : function(data){
    console.log(data);
    }
    });
    //获取好友列表结束


    //var sync = setInterval("syncWx()",1000);
    sync();
    function sync(){
    //syncWx = function (){
    //同步服务器信息,轮训查询是否有新消息等
    if(!synckey){
    synckey = sessionStorage.synckey;
    }

    $.ajax({
    url : "index.php?act=sync",
    datatype : 'json',
    type : 'post',
    data : {synckey: synckey},
    success : function(data){
    var res = JSON.parse(data);
    //与服务器同步一次synckey就可能 不相同一次,所以每次同步完都将更新key
    //将synckey存入本地缓存,后续步骤需要
    synckey = JSON.stringify(res.SyncKey);//json 串形式存入
    //sessionStorage.synckey = synckey;
    if(res.BaseResponse.Ret != 0){
    alert('与微信服务器通讯出错,请重新扫码登陆!');
    window.location.href='index.php';
    }else if (res.AddMsgCount) {
    console.log(res);

    var str = '';
    var messagelist = res.AddMsgList;
    var users = JSON.parse(sessionStorage.users);
    for (var key in messagelist) {
    //StatusNotifyCode=2 为通知消息
    if (messagelist[key].StatusNotifyCode == 0){
    var fname = messagelist[key].FromUserName;
    var uri = "/cgi-bin/mmwebwx-bin/webwxgeticon?seq=620940058&username="+ fname +"&skey=";
    var userHeadimg = 'index.php?act=avatar&uri=' + escape(uri);
    str += '<li>'
    +'<p class="time"><span></span></p>'
    +'<div class="main">'
    +'<img class="avatar" width="30" height="30" src="'+ userHeadimg +'">'
    +'<div class="nick">'+ users[fname] +'</div>'
    +'<div class="text">'+ messagelist[key].Content +'</div>'
    +'</div>'
    +'</li>';

    //机器人自动回复,不需要注释掉即可
    $.post('index.php?act=tuling',{content:messagelist[key].Content,toUsername:messagelist[key].FromUserName},function(data){
    if(data.status == 0){return ;}
    if(data.BaseResponse.Ret == 0){
    var str = '<li>'
    +'<p class="time"><span></span></p>'
    +'<div class="main self">'
    +'<img class="avatar" width="30" height="30" src="http://lorempixel.com/30/30/">'
    +'<div class="nick">机器人</div>'
    +'<div class="text">'+ data.tlc +'</div>'
    +'</div>'
    +'</li>';
    $(".m-message ul").append(str);
    //滚动到底部
    $(".m-message").scrollTop($('.m-message ul')[0].scrollHeight);
    }
    },'json')
    //机器人回复结束
    }
    }
    //for end
    $(".m-message ul").append(str);
    //滚动到底部
    $(".m-message").scrollTop($('.m-message ul')[0].scrollHeight);

    }
    //通讯成功再轮询
    if (res.BaseResponse.Ret == 0){
    sync();
    }
    },
    error : function(data){
    alert('服务器出错,请重新扫码登陆!');
    window.location.href='index.php';
    }
    })

    //}
    }

    //好友列表点击事件
    $(".m-list ul").on('click','li',function(){
    var username = $(this).attr('username');
    var nickname = $(this).children('p.name').text();
    $('.to-user').attr('username',username);
    $('.to-user').text(nickname);
    })
    //好友列表点击事件end

    //发送消息
    //发送消息
    $(".input").keypress(function(e) {
    //firefox enter code=13 ; chrome = 10
    if (e.ctrlKey && (e.which == 13 || e.which == 10)){
    var text = $(".input").val();
    var toUsername = $('.to-user').attr('username');
    if(text == ''){
    alert('不能发送空内容!');
    return;
    }
    if(toUsername == ''){
    alert('点击左侧头像,选择聊天对象!');
    return;
    }

    $.ajax({
    url : "index.php?act=send",
    datatype : 'json',
    type : 'post',
    data : {
    toUsername:toUsername,
    content:text
    },
    success : function(data){
    var res = JSON.parse(data);

    if(res.BaseResponse.Ret == 0){
    var str = '<li>'
    +'<p class="time"><span></span></p>'
    +'<div class="main self">'
    +'<img class="avatar" width="30" height="30" src="'+ myheadimg +'">'
    +'<div class="nick">'+ sessionStorage.nickname +'</div>'
    +'<div class="text">'+ text +'</div>'
    +'</div>'
    +'</li>';
    $(".m-message ul").append(str);
    //滚动到底部
    $(".m-message").scrollTop($('.m-message ul')[0].scrollHeight);
    }

    },
    error : function(data){
    console.log(data);
    }
    });
    //ws.send(content);
    $(".input").val('').focus();
    }
    });

    });

    </script>
    </html>

  • 相关阅读:
    C#之泛型
    etcd 使用: golang 例子
    九卷读书:《高效能人士的7个习惯》脑图
    Go package(2) strings 用法
    技术管理:技术管理者的多维度能力及成长路径
    gin框架教程:代码系列demo地址
    五大常见的MySQL高可用方案
    gin框架教程三:JWT的使用
    九卷读书:商业模式画布
    Go package(1) time 用法
  • 原文地址:https://www.cnblogs.com/wangxiaozhuo/p/10488334.html
Copyright © 2011-2022 走看看