Welcome

首页 / 脚本样式 / Ajax / PPJOKE 0.1 (网页嵌入聊天)提供下载

PPJOKE是一套基于AJAX技术网页嵌入聊天程序,目前提供asp版下载,.Net版本的负载量更高,不过还在调试中,拖了很长时间了,最近一直忙着学习,没有更新,这里先提供下载。
此外最近一直在研究持续连接技术,也就是所谓的推技术,还有jssocket等企业级的类AJAX技术,希望有经验的朋友交流。

屁屁聊天 PPJoke
功能/特点
基于Ajax技术 
运用了成熟稳定的prototype/scriptaculous框架 
数据传送量小 
页面嵌入聊天 
自定义强突出个性化 
支持换肤 
支持表情 
支持拖动 放大
更改颜色 

PPJOKE是根据我以前写的OTALK重写的。演示地址,向右转--> 已经嵌入到了我BLOG中。
http://www.ppjoke.com
PPJOKE整站提供下载。
修改界面颜色
见rar中"ppjoke/ppjoke.css"只要相应修改成网站配色就OK

网页集成说明
将rar中的ppjoke复制到要嵌入页面的目录中,将index.htm中的一下代码复制到网页中向嵌入的div中即可
复制代码 代码如下:
<script type="text/javascript">
document.write("<div id ="load">正在加载....</div>");
var style = document.createElement("link");
style.rel="stylesheet";
style.type="text/css";
style.href="ppjoke/ppjoke.css";
style.title="ppjoke";
var head=document.getElementsByTagName("head")[0];
head.appendChild(style);
</script>

<script language="JavaScript" type="text/javascript" src="ppjoke/lib/prototype.js"></script>

<script type="text/javascript" src="ppjoke/src/scriptaculous.js?load=effects,dragdrop,builder,controls,slider "></script>

<script language="JavaScript" type="text/javascript">

var talktime = 3500;//设置获取内容时间间隔
var talkpath = "ppjoke/ppjoke.asp";
var talkcolor = "blue";
var info_shaping ="请勿刷屏";
var info_talkfail ="发送失败";
var barinf_logining ="正在登录";
var barinf_regging = "正在注册";
var barinf_neterro = "数据传输错误";
var barinf_loginready = "登陆成功";
var barinf_loginerro = "密码错误";
var barinf_blank = "请输入聊天内容";
var barinf_logoutok = "注销成功";
var barinf_logouterro = "注销失败";
var barinf_regerro = "用户名已存在";
var barinf_regok = "注册成功,自动登陆";
var barinf_checkuser = "自动登陆中";
var barinf_checkbad = "非法身份,请自行登陆";
var colorArr = ["red","blue","green","darkorange","black","teal","deeppink","blueviolet","springgreen"];
var Anonymous = "匿名";

var count=0;
var lastworld="";
var lastalk="";
var lastWorldTime=false;
var getMsgTime;
var noMemoTimes = 0;
var cookiename;
var cookiepass;

//Event.observe(window, "load", ppjokeinit, false);

function ppjokeinit(){
    talkcolor = colorArr[Math.round(Math.random()*9)];
    window.setTimeout(getMsg,talktime);
    $("load").style.display="none";
    $("ppjoke_main").style.display="block";
    Event.observe("ppjoke_sendbox", "keydown", keyDownAll, false);
    Field.select("talk");
    new Draggable("ppjoke_main",{handle:"ppjoke_topbar"});
    createFaceList();
    GetCookie();
    logined();
}

var ppjokeWs = {
    letBack:function(){
        $("ppjoke_main").style.left="";
        $("ppjoke_main").style.top="";
        $("ppjoke_main").style.zIndex="";
        $("ppjoke_main").style.width="150px";
        $("ppjoke_msgbox").style.height="200px";
        $("ppjoke_Facediv").style.height = "100px";
    },
    letBig:function(){
        $("ppjoke_main").style.width = "580px";
        $("ppjoke_msgbox").style.height = "400px";
        $("ppjoke_Facediv").style.height = "25px";
    }
}

function keyDownAll(event){
    var e = event || window.event;
    if(e.keyCode==13){sendMsg()}
}

function logined(){
    function loginok(req){
        if(req.responseText=="ok"){
            $("name").value = cookiename;
            $("alogin").style.display="none";
            $("ppjoke_alogout").style.display="inline";
            $("name").blur();
            $("name").disabled = "true";
            Field.select("talk");
        }else{
        }
    }        
    if(cookiename){
        var timestamps =  new Date().getTime()+Math.random();
        creatInfo(barinf_checkuser);
        var sendAjax = new Ajax.Request(talkpath+"?act=login×tamp="+timestamps,{method: "post",parameters:"regname="+cookiename+"®pass="+cookiepass,onComplete:loginok});
    }
}

//获取信息
function getMsg (){
    var timestamps =  new Date().getTime()+Math.random();
    var getAjax = new Ajax.Request(talkpath+"?act=getMsg×tamps="+timestamps,{method: "get",parameters:"",onSuccess:showMsg});

    function showMsg(req){

        window.setTimeout(getMsg,talktime);

        var newMsg=eval("(" + req.responseText + ")");

        function appendtime(){
            $("ppjoke_msgbox").appendChild(Builder.node("p", {id:"thelastTime",style:"background-color:#FFCCFF"},"消息发送时间:"+lastWorldTime));
            appendtimok=true;
        }

        if (noMemoTimes == 5 ){appendtime();noMemoTimes=0}
        noMemoTimes?noMemoTimes++:noMemoTimes=0;

        //处理聊天信息
        newMsg.msg.each(function(data){
            if(noMemoTimes >= 5){Element.remove("thelastTime");}
            noMemoTimes = 1;
                count++;
                var p = document.createElement("p");
                if(count%2==0){
                    Element.addClassName(p,"p1");
                }else{
                    Element.addClassName(p,"p2");
                }
                var userspan = document.createElement("span");
                var usertext = document.createTextNode(data.u+":");
                if(data.v=="True"){
                    userspan.appendChild(usertext);
                }else{
                    userspan.style.color="#CACACA";
                    userspan.appendChild(usertext);
                }
                var msgspan = document.createElement("span");
                msg2face(data.m,msgspan);
                msgspan.style.color=data.c;
                p.appendChild(userspan);
                p.appendChild(msgspan);
                $("ppjoke_msgbox").appendChild(p);
                lastWorldTime=data.t;
            }
        );
        $("ppjoke_msgbox").scrollTop=$("ppjoke_msgbox").scrollHeight;
    }
}

//发送聊天信息,处理本地消息
function sendMsg (){
    if(!Field.present("talk","name","email")){
        creatInfo(barinf_blank);
        return;
    }

    if(lastworld==Form.serialize("talkform")){
        sysinf(info_shaping);
    }else{

        if($("thelastTime")){Element.remove("thelastTime");}

        var timestamps =  new Date().getTime()+Math.random();
        var sendAjax = new Ajax.Request(talkpath+"?act=sendMsg&color="+talkcolor+"×tamp="+timestamps,{method: "post",parameters:Form.serialize("talkform"),onFailure:ajaxErro});
        lastworld=Form.serialize("talkform");
        lastalk=$F("talk");

        count++;
        var p = document.createElement("p");
        if(count%2==0){
            Element.addClassName(p,"p1");
        }else{
            Element.addClassName(p,"p2");
        }
        var userspan = document.createElement("span");
        var usertext = document.createTextNode($F("name")+":");
        if($("name").disabled == true){
            userspan.appendChild(usertext);
        }else{
            userspan.style.color="#CACACA";
            userspan.appendChild(usertext);
        }
        var msgspan = document.createElement("span");
        msg2face($F("talk"),msgspan);
        msgspan.style.color=talkcolor;
        p.appendChild(userspan);
        p.appendChild(msgspan);
        $("ppjoke_msgbox").appendChild(p);
    }
    Field.clear("talk");
    Field.select("talk");
    $("ppjoke_msgbox").scrollTop=$("ppjoke_msgbox").scrollHeight;

    function ajaxErro(){
        sysinf(info_talkfail);
    }
}

//发送登陆信息
function sendLogin (){
    var timestamps =  new Date().getTime()+Math.random();
    creatInfo(barinf_logining);
    var sendAjax = new Ajax.Request(talkpath+"?act=login×tamp="+timestamps,{method: "post",parameters:Form.serialize("logform"),onComplete:sendLoginOk});
    function sendLoginOk(req){
        if(req.responseText=="ok"){
            creatInfo(barinf_loginready);
            $("alogin").style.display="none";
            $("ppjoke_alogout").style.display="inline";
            $("name").value=$F("regname");
            $("name").blur();
            $("name").disabled = "true";
            Effect.SlideUp("ppjoke_logdiv",{duration:1.0});
            Field.select("talk");
            CreactCookie();
        }else{
            creatInfo(barinf_loginerro);
        }
    }
}

//发送注册信息
function sendReg (){
    var timestamps =  new Date().getTime()+Math.random();
    creatInfo(barinf_regging);
    var sendAjax = new Ajax.Request(talkpath+"?act=reg×tamp="+timestamps,{method: "post",parameters:Form.serialize("logform"),onComplete:sendRegOk});
    function sendRegOk(req){
        if(req.responseText=="ok"){
            creatInfo(barinf_regok);
            $("alogin").style.display="none";
            $("ppjoke_alogout").style.display="inline";
            $("name").value=$F("regname");
            $("name").blur();
            $("name").disabled = "true";
            Effect.SlideUp("ppjoke_logdiv",{duration:1.0});
            Field.select("talk");
            CreactCookie();
        }else{
            creatInfo(barinf_regerro);
        }
    }
}

//发送注销信息
function sendLogout (){
    var timestamps =  new Date().getTime()+Math.random();
    var sendAjax = new Ajax.Request(talkpath+"?act=logout×tamp="+timestamps,{method: "get",parameters:"",onComplete:sendLogOutOk});
    function sendLogOutOk(req){
        if(req.responseText=="ok"){
            creatInfo(barinf_logoutok);
            $("ppjoke_logdiv").style.display="none";
            $("alogin").style.display="inline";
            $("ppjoke_alogout").style.display="none";
            $("name").value=Anonymous;
            $("name").blur();
            $("name").disabled = ""
            Field.select("talk");
            clearChat()    ;
        }else{
            creatInfo(barinf_logouterro);
        }
    }
}

function msg2face(msg,element){
    var msgtext=$A(msg.match(/([^[]*)([dd])?/gim));
    if(msgtext[0]){
        msgtext.each(function(word){
            var section = word.match(/([^[]*)[?(dd)?]?/i);
            if(section[1]){
            var msgtext = document.createTextNode(section[1]);
            element.appendChild(msgtext);
            }
            if(section[2]){
                msgimg = document.createElement("img");
                msgimg.setAttribute("src","ppjoke/images/smilies/Face_"+section[2]+".gif");
                element.appendChild(msgimg);
                }
            }
        );
    }else{
        element.appendChild(document.createTextNode(msg));
    }
}

function creatInfo(text){
    $("ppjoke_otherinf").innerHTML=text;
    window.setTimeout(function(){$("ppjoke_otherinf").innerHTML=""},5000);
}

function sysinf(text){
    var p = Builder.node("p",{style:"background-color:yellow"},[Builder.node("span",{style:"color:red"},"系统 "),Builder.node("span",{style:"color:blue"},text)]);
    $("ppjoke_msgbox").appendChild(p);
    $("ppjoke_msgbox").scrollTop=$("ppjoke_msgbox").scrollHeight;
}

Ajax.Responders.register(
    {
        onCreate: function(){
            //creatInfo(noMemoTimes);
            $("ajaxing").show();
        },
        onComplete: function() {
            if(Ajax.activeRequestCount == 0){
                $("ajaxing").hide();
            }
        }
    }
);

function createFaceList(){
    for (i=1;i<=24;i++){
        var j=i
        if(j<10){j="0"+i}
        var a = Builder.node("a", {href:"#"},[Builder.node("img",{src:"ppjoke/images/smilies/Face_"+j+".gif"},[])]);
        a.alt=j;
        a.onclick=function(){$("talk").value=$F("talk")+"["+this.alt+"]";Field.focus("talk");return false;};
        var li = Builder.node("li", {},[a]);    
        $("ppjoke_facelist").appendChild(li);
    }
}

function changeColor(color){
    talkcolor=color;
}

function CreactCookie(){
    var mydate = new Date();
    mydate.setTime(mydate.getTime() + 48*60*60*100);
    document.cookie = "ppjokeusername="+escape($F("regname"))+";expires="+mydate.toGMTString();
    document.cookie = "ppjokepass="+escape($F("regpass"))+";expires="+mydate.toGMTString();
}

function GetCookie(){
    var value = unescape(document.cookie);
    var namepos = value.indexOf("ppjokeusername=");
    if(namepos!=-1){
        var start = namepos + 14;
        var end = value.indexOf(";",start);
        if (end == -1) end = value.length;
        cookiename = value.substring(start,end);
    }
    var passpos = value.indexOf("ppjokepass=");
    if(passpos!=-1){
        var start = passpos + 10;
        var end = value.indexOf(";",start);
        if (end == -1) end = value.length;
        cookiepass = value.substring(start,end);
    }
}

function DelCookie(sName,sValue){
  document.cookie = sName + "=" + escape(sValue) + ";expires=Fri, 31 Dec 1999 23:59:59 GMT;";
}

function clearChat(){
    var ps = $A($("ppjoke_msgbox").getElementsByTagName("p"));
    ps.each(function(p){
        Element.remove(p);
        }
    );
}

</script>

<div id="ppjoke">

<div id="ppjoke_main">
    <div id="ppjoke_topbar"><a href="javascript:void(0)" onclick="ppjokeWs.letBack()">X</a><a href="javascript:void(0)" onclick="ppjokeWs.letBig()">B</a><a href="javascript:void(0)" onclick="void(0)">F</a></div>

    <div id="ppjoke_msgbox"></div>

    <div id="ppjoke_infbox">
            <span id="ppjoke_otherinf"></span>
            <span id="ajaxing"><img src="ppjoke/images/ajaxing.gif" alt="doing" /></span>
    </div>

    <div id="ppjoke_operbox">

        <div id="ppjoke_sendbox">
            <form id="talkform" action="#">
            <input type="text" name="name" class="smallinput"  id = "name" value="匿名" />
            <input type="text" name="email" class="smallinput" id="email" value="email" />
            <input type="text" name="talk" class="longinput" id="talk" />
            </form>
            <a class="aex" href="#" onclick="clearChat(); return false;" >清屏</a>
            <a id="alogin" class="aex" href="#" onclick="Effect.toggle("ppjoke_logdiv","slide"); return false;" >登录</a>
            <a id="ppjoke_alogout" class="aex" href="#" onclick="sendLogout(); return false;" >注销</a>
            <a class="aex" href="#" onclick="Effect.toggle("ppjoke_Facediv","slide"); return false;" >:)</a>
            <a class="aex" href="#" onclick="Effect.toggle("ppjoke_Colordiv","slide"); return false;" >色</a>
        </div>

        <div id="ppjoke_Facediv" style="display:none;">
            <ul id="ppjoke_facelist">
            </ul>
        </div>

        <div id="ppjoke_logdiv" style="display:none;">
            <form id="logform" action="#">
                <input type="text" name="regname" class="smallinput"  id = "regname" value="username" />
                <input type="password" name="regpass" class="smallinput" id="regpass" value="pass" />
                <a href="#" class="aex" onclick="sendLogin();return false;" >确定</a>
                <a href="#" class="aex" onclick="sendReg();return false;" >注册</a>
            </form>
        </div>

        <div id="ppjoke_Colordiv" style="display:none;">
            <ul >
                <li><a style="color:red" href="#" onclick="changeColor("red");return false;">■</a></li>
                <li><a style="color:blue" href="#" onclick="changeColor("blue");return false;">■</a></li>
                <li><a style="color:green" href="#" onclick="changeColor("green");return false;">■</a></li>
                <li><a style="color:darkorange" href="#" onclick="changeColor("darkorange");return false;">■</a></li>
                <li><a style="color:black" href="#" onclick="changeColor("black");return false;">■</a></li>
                <li><a style="color:teal" href="#" onclick="changeColor("teal");return false;">■</a></li>
                <li><a style="color:deeppink" href="#" onclick="changeColor("deeppink");return false;">■</a></li>
                <li><a style="color:blueviolet" href="#" onclick="changeColor("blueviolet");return false;">■</a></li>
                <li><a style="color:springgreen" href="#" onclick="changeColor("springgreen");return false;">■</a></li>
            </ul>
        </div>

        <div id="ppjoke_Exdiv" style="display:none;">
            <ul id="ppjoke_onlinelist">
            </ul>
        </div>

    </div>

</div>
</div>
<script type="text/javascript">
    ppjokeinit();
</script>