//显示每个在线人的名字 document.writeln("<a href="javascript:parent.cs('"+list[i]+"')" titl e='"+list[i]+"'>"+list[i]+"</a><br>"); } } this.r.document.writeln('</font><hr>'); 3、改变聊天对象 function cs(name) { if(this.d.document==null)return; if(name=='所有人') { this.d.add('所有人'); this.d.document.inputform.talkto.value='所有人'; //改变焦点 this.d.document.inputform.msg.focus(); return; } for(var i=0;i<list.length;i=i+1) { if(list[i]==name) { //更改发送的谈话对象 this.d.document.inputform.talkto.value=list[i]; this.d.document.inputform.msg.focus(); return; } } //错误 alert('此用户已离线或已改了昵称。'); } 4、删除一个用户 function del(str) { for(var i=0;i<list.length;i=i+1) if(list[i]==str) { delete list[i]; count--; } } 5、增加一个用户 function add(str1,str2) { var l=list.length; for(var i=0;i<list.length;i=i+1) //如果已经在数组里面则返回 if(list[i]==str1) return; //增加一个用户 list[l]=str1; count++; } 6、更新聊天人数的方法,定时器的使用 var timerID=null; var timerRunning=false; function stop() { //停止 if(timerRunning)clearTimeout(timerID); timerRunning=false; } function start() { stop(); //调用更新在线人数的程序 write1(); } function write1() { ... ... ... ... //设定更新时间, timerID=setTimeout("start()",30000); timerRunning=true; } 这种方法比较简单的实现了在线人数的显示,当然也可以使用读入在线人文件的方法显示在线人数,不过在改变聊天对象是会比较麻烦. 显示 现在的www聊天室基本全部采用框架方式,可以用frame也可以用iframe看个人喜欢了,我的采用frame的传统方式 print("<frameset rows="*,110,0,0,0" border=0>n"); print("<frameset cols="660,118" rows="*">n"); //主显示屏幕,负责显示聊天内容 print("<frame name=u src=http://www.jb51.net/article/about:blank frameborder="NO" noresize>n"); //在线人数屏幕 print("<frame name=r src="http://www.jb51.net/article/about:blank" frameborder="NO">"); print("</frameset>n");
//发送信息的屏幕,信息指挥中心,所有指令都要由这里发出 print("<frame name=d src=http://www.jb51.net/article/send.php?name=$name&&pass=$pass scrolling='no ' frameborder="NO" noresize>n"); //被动更新屏幕,处理发送的信息 print("<frame src="http://www.jb51.net/article/about:blank">n"); /主动更新屏幕,显示自己和其他聊友的聊天信息 print("<frame src="http://www.jb51.net/article/about:blank">n"); //检测是否在线的屏幕,对于异常离开,如死机,掉线等的处理 print("<frame src="http://www.jb51.net/article/about:blank">n"); print("</frameset>n"); 因为各个页面之间的程序有联系,所以显示顺序很重要,可以看到,我这里只有发送页面不是about:blank,其他页面的显示都要先通过发送页面的调用才能开始. 指挥中心
这里是聊天室的指挥中心,所有的指令都要在这里发出 1、下面是基本的发送表单代码 <form name=inputform action='messagesend.php' target='bl' onsubmit='return(checksay());' method=POST> <? //下面的2个参数用于验证信息的正确性 print("<input type='hidden' value='$name'>n"); print("<input type='hidden' value='$pass'>n"); ?> //聊天对象,注意加上 readonly 属性 <input type="text" size="10" maxlength="20" readonly value="所有人"> //上次聊天的发送内容 <input type='hidden' value=''> //发送的表单文本框 <input type="text" maxlength="120" size="34"> <input type="submit" value="发送"> </form> 2 检查发送内容的js var dx =''; function checksay( ) { //不允许发送空的发言 if(document.inputform.msg.value=='') { document.inputform.msg.focus(); return false; } //不允许重复发言,内容相同,对象相同 if ((document.inputform.msg.value==document.inputform.message.value) &&(document.inputform.talkto.value==dx)) { alert('发言不能重复'); document.inputform.msg.focus(); return false; } //两次发言内容的间隔不能小于1秒,或者发言字数大于间隔*3 t2=(new Date()).getTime()/1000; if(((t2-t1)<1)||((t2-t1)*3<document.inputform.msg.value.length)) { document.inputform.msg.focus(); return false; } //更新时间 t1=t2; document.inputform.showsign.value=1; //保存上次发言内容 document.inputform.message.value =document.inputform.msg.value; //清空发言内容 document.inputform.msg.value =''; //保存发言对象 dx=document.inputform.talkto.value; //定位焦点 document.inputform.msg.focus(); //返回 return(true); } 3、调用信息发送程序,发布聊天者已经进入的信息 <script> parent.bl.document.open(); parent.bl.document.write("<meta http-equiv='refresh' content='0;url=messagesend.php?name=<? print($name); ?>&&action=enter&&pass=<? print($pass); ?>'>") parent.bl.document.close(); </script> 发言由messagesend.php处理完成,注意输出对象为bl,也就是处理发言的框架名称,这样保证发言框架的页面内容的完整 表情和动作 表情和动作极大的丰富了聊天的乐趣,一般的聊天室主要通过2种方法发送 (1) 按钮菜单的方法 通过在一个固定的下拉菜单里面进行选择,找到自己满意的表情,然后选中,按发送按钮发出 (2) 通过手工输入代号 比如网易的以手工输入 //hello 代表欢迎的一段动作,以 //bye 代表再见的一段动作表情 我们这里介绍菜单的具体实现方法,手工输入的不用介绍了吧! 哈哈!除非你记不住那些... 1 下拉菜单选择表情动作的实现 为了扩充方便,我们制作了表情动作的数据文件,这样在以后扩充时将会非常方便. 表情动作文件的格式如下($split代表分割符): //1234$split“1234567,我的朋友在哪里1234!!!!!” //?$split很疑惑的看着对象... //??$split抓呀抓,把头皮都抓破了,也没有想出个所以然来。 //???$split怎么回事?这到底是怎么回事 前面的//1234代表表情动作代码,分隔符后面的代表显示的表情动作注意其中的 对象 两个字将会在显示时替换成为发言对象的名字 这段代码用于把菜单选择的对应的表情动作代码写到发送栏里面 <script> function changemote($newemote) { document.inputform.msg.value = $newemote } </script> 这段代码生成动态下来菜单 (编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|