编辑自己的右侧聊天界面(完成,上线)

本主题由 张书记 于 2009-10-16 19:37 解除置顶 麦圆

Twitter @math2gold 惊诧的火星友邦 咪咪是 /math2ogld

1楼 大 中 小 发表于 2009-10-12 21:21 只看该作者

编辑自己的右侧聊天界面(完成,上线)

最新版本将在这里更新:http://code.google.com/p/project41984/w/edit/SelfDefChatUI

(如果无法打開就看本帖)

** 欢迎把设计好自己想要的界面的同学,建新标题为“我的自定义聊天代码”的文章,然后把代码贴到里面去,跟大家分享。 **

由于每人都有自己创意和风格。选美工也不容易,還是把美工的设定交给每个人自己设置吧。希望美工能搞好的人能积极参与自定义设计,然后能把自己的作品供出以给大家挑选出做公共页面的。

如果感觉后面的内容太复杂了,可以看看这两个例子,稍懂javascript和html的兄弟,应该不用看说明就知道如何修改了:

例子一:(如果无法打開,请参照9楼)http://code.google.com/p/project41984/wiki/Ex1

例子二:(如果无法打開,请参照8楼)http://code.google.com/p/project41984/wiki/Ex2

自定义页面

如下是几个可以用用户登录后自定义的页面,每人登录后只看见自己的那个页的。

引用:

https://1984bbs.com/edit_file.php?page=chat_html

https://1984bbs.com/edit_file.php?page=chat_js

https://1984bbs.com/edit_file.php?page=chat_css

要编辑这几个页面可访问如下几个对应的地址

引用:

https://1984bbs.com/edit_file.html?chat_html

https://1984bbs.com/edit_file.html?chat_js

https://1984bbs.com/edit_file.html?chat_css

编辑好点submit就行了。

强烈建议把css放置在 https://1984bbs.com/edit_file.php?page=chat_css , javascript代码放置在

https://1984bbs.com/edit_file.php?page=chat_js

,然后在https://1984bbs.com/edit_file.php?page=chat_html通过代码引入。

初级编辑

为避免直接重新设计整个聊天浏览器客户端而带来麻烦,現在提供一个比较初级的系统,所有人只要引用这个系统,对界面风格做修改即可。

如下是整个代码示例。后面介绍如何修改。

引用:

function runClearChatBox()

{

document.getElementById(‘chat_msg’).value = “”;

}

function sendChatCommentButtonObjct(o)

{

}

function getChatItemWriteString(Id,Sender,Msg,Time,Reply)

{

h=":"+Sender+":"+Time+":"+Msg+"<br />";  
return h;  

}

function getChatItemWriteStart()

{

return “”;

}

function getChatItemWriteEnd()

{

return “</b>”;

}

function getChatListLimit(i)

{

     return i+1;  

}

</script>

<script type=”text/javascript” language=”javascript”

src=”../OnlineChat/port.for1984.OnlineChat.nocache.js”></script>

</head>

<iframe src=”javascript:’’” id=”__gwt_historyFrame” tabIndex=’-1’

style=”position:absolute;width:0;height:0;border:0”></iframe>

</textarea>

</form>


</body>

</html>

以上示例,在html中插入js代码../OnlineChat/port.for1984.OnlineChat.nocache.js

即引入了基础系统。

引用:

<script type=”text/javascript” language=”javascript”

src=”../OnlineChat/port.for1984.OnlineChat.nocache.js”></script>

加入

引用:

function runClearChatBox()

{

document.getElementById(‘chat_msg’).value = “”;

}

function sendChatCommentButtonObjct(o)

{

}

function getChatItemWriteString(Id,Sender,Msg,Time,Reply)

{

h=":"+Sender+":"+Time+":"+Msg+"<br />";  
return h;  

}

function getChatItemWriteStart()

{

return “”;

}

function getChatItemWriteEnd()

{

return “</b>”;

}

function getChatListLimit(i)

{

     return i+1;  

}

</script>

就是引入,javascript部分的接口。除了防止布局和css风格外,主要的界面内容就是通过修改这一块代码来修改的。其含义如下:

初级界面修改

如下函数是打印每一条消息时会被调用,要求返回改消息组织的html代码。

引用:

function getChatItemWriteString(Id,Sender,Msg,Time,Reply)

{

h=":"+Sender+":"+Time+":"+Msg+"<br />";  
return h;  

}

开始输出消息时会被用到,此函数要求返回消息块的头部内容。如下两条示例是把消息内容加粗。

引用:

function getChatItemWriteStart()

{

return “”;

}

结束输出消息时会被用到,此函数要求返回消息块的尾部内容。

引用:

function getChatItemWriteEnd()

{

return “</b>”;

}

深入一点

打印消息内容的循环限制函数,如果是return i+1,则有多少显示多少,如果是return 10,则只显示最新10条消息。

引用:

function getChatListLimit(i)

如下函数负责清除文本框内容,每次消息发送成功后则会被调用:

引用:

function runClearChatBox()

初始化界面的时候会把发送Button的对象传递到这个函数,如果需要把文本框电击的動作和button关联起来,只要通过它获取按钮对象则可:

引用:

function sendChatCommentButtonObjct(send_button)

布局修改

整体html文档的布局上,通过id为chat_msg , chatAutoRefreshBox , chatSubmitBox ,

chatListBox进行设置。

如下代码表示文本消息输入框用textarea表示,实际上可以用input代替,只要是id为chat_msg即可。

引用:

</textarea>

代码是标记放置自动刷新ClickBox的位置。与后面2个一样,不一定要使用span,如div等的其他元素标签亦可。

引用:

代码是标记放置发送按钮的位置。

引用:

代码是标记放置消息列表的位置。

引用:

------------------------

Update: 20091013

新增接口:

1、回调函数setMyChatNickName,系统初始化时会把获得的用户名username传递给函数。通过它可以获取用户名。

引用:

function setMyChatNickName(username)

获取用户名后,可作存储起来,在显示聊天列表时可判断消息是否为自己所发出的。例如:

引用:

var mynickname;

function setMyChatNickName(o)

{

mynickname=o;

}

2、利用getMakeWriteRedefine()设置自定义输出

增加代码:

引用:

function getMakeWriteRedefine()

{

return true;

}

可以把聊天对话输出设置为自定义模式,这样如果不想按照原来的顺序输出,而希望最新的放置在最下面的话,在增加上述代码后,把

getChatItemWriteString修改成如下(增加Str参数):

引用:

function getChatItemWriteString(Id,Sender,Msg,Time,Reply,Str)

{

var h;

if (Sender==mynickname)  
{  
h="me:"+Time+":"+Msg+"<br />";  
}  

else

{

h=":["+Sender+"]:"+Time+":"+Msg+"<br />";  

}

return h+Str;  

}

最后不是return h,而是return h+Str,让显示的顺序反过来。


Terminusbot 整理,讨论请前往 2049bbs.xyz


库存袈裟

@bruceku 想象力比知识更重要。

2楼 大 中 小 发表于 2009-10-12 22:35 只看该作者

真详尽。辛苦了。麦总

麦圆

Twitter @math2gold 惊诧的火星友邦 咪咪是 /math2ogld

3楼 大 中 小 发表于 2009-10-12 22:47 只看该作者

回复 2楼 库存袈裟 的话题

汗个……总字也上了,万一被人盯上,我说这是库总对我的特称哈。谢库总。

stonehoo

this is bullshit

4楼 大 中 小 发表于 2009-10-13 15:04 只看该作者

顶一个 对美工不懂啊

冇二

@bocaidingding欢迎follow

5楼 大 中 小 发表于 2009-10-13 15:27 只看该作者

要是能做成gtalk网页内嵌模式那样就不错了

ps:bbs要是能直接贴图多好~~~

多毛猫

http://www.duomaocat.com/

6楼 大 中 小 发表于 2009-10-13 21:38 只看该作者

麦总、库总,二位老总辛苦了。

绝望的落支撑

10年,文艺复兴 Twitter @luozc

7楼 大 中 小 发表于 2009-10-13 21:45 只看该作者

真不容易啊~

辛苦了!

麦圆

Twitter @math2gold 惊诧的火星友邦 咪咪是 /math2ogld

8楼 大 中 小 发表于 2009-10-14 00:42 只看该作者

自定义聊天界面——例子(2)

打開页面 https://1984bbs.com/edit_file.html?chat_html,输入后面的代码,点击Submit按钮保存。

然后打開页面 https://1984bbs.com/edit_file.php?page=chat_html 进行聊天。

本例子实现:

1、把对话输入框放到最下面

2、自动换行 (通过上网搜索代码略加修改实现)

3、只显示10行

4、把我的聊天内容和别人的聊天内容区分

5、最后面的一条消息是最新消息

引用:

//网上搜索出来的自动换行函数

function AutoLn(sStr,iPerLineLen){

     if(sStr.replace(/[^\x00-\xff]/g,"xx").length <= iPerLineLen){  
         return sStr;  
     }  
     var str="";  
     var l=0;  
     var schar;  
     for(var i=0;schar=sStr.charAt(i);i++){  
         str+=schar;  
         l+=(schar.match(/[^\x00-\xff]/)!=null?2:1);  
         if(l>= iPerLineLen){  
             str+="\n";  
             l=0;  
         }  
     }  
     return str;  

}

var mynickname;

function setMyChatNickName(o)

{

mynickname=o;

}

function runClearChatBox()

{

document.getElementById(‘chat_msg’).value = “”;

}

function sendChatCommentButtonObjct(o)

{

}

function getMakeWriteRedefine()

{

return true;

}

function getChatItemWriteString(Id,Sender,Msg,Time,Reply,Str)

{

var h;

//设置自动换行

var msg=AutoLn(Msg,80);

if (Sender==mynickname)  
{  
//消息是我发出的  
h="我:"+Time+":"+msg+"<br />";  
}  
else  

{

//消息是别人发出的  
h=":["+Sender+"]:"+Time+":"+msg+"<br />";  

}

return h+Str;  

}

function getChatItemWriteStart()

{

return “”;

}

function getChatItemWriteEnd()

{

return “</b>”;

}

function getChatListLimit(i)

{

     //只显示10行  
     return 10;  

}

</script>

<script type=”text/javascript” language=”javascript”

src=”../OnlineChat/port.for1984.OnlineChat.nocache.js”></script>

</head>


<textarea id=’chat_msg’ cols=50 rows=3>

</textarea>

</form>

</body>

</html>

麦圆

Twitter @math2gold 惊诧的火星友邦 咪咪是 /math2ogld

9楼 大 中 小 发表于 2009-10-14 01:00 只看该作者

自定义聊天界面——例子(1)

打開页面 https://1984bbs.com/edit_file.html?chat_html,输入后面的代码,点击Submit按钮保存。

然后打開页面 https://1984bbs.com/edit_file.php?page=chat_html 进行聊天。

本例子是最简化实现自己的聊天界面,在上面的基础上稍作修改就好了。

引用:

function runClearChatBox()

{

//发送后清除输入的聊天内容

document.getElementById(‘chat_msg’).value = “”;

}

function getChatItemWriteStart()

{

return “”;

}

function getChatItemWriteString(Id,Sender,Msg,Time,Reply,Str)

{

return ":["+Sender+"]:"+Time+":"+Msg+"<br />";  

}

function getChatItemWriteEnd()

{

return “”;

}

function getChatListLimit(i)

{

     return i+1;  

}

</script>

<script type=”text/javascript” language=”javascript”

src=”../OnlineChat/port.for1984.OnlineChat.nocache.js”></script>

</head>

<input type=text id=’chat_msg’ size=60 /><!–

自动刷新选项–></span>

</form>


</body>

</html>

CMGS

虚空中的神

10楼 大 中 小 发表于 2009-10-14 09:57 只看该作者

mark下。。。最近找工作ing。。。保佑百度网易金山不刷了咱=。=

sinanjj

11楼 大 中 小 发表于 2009-10-14 14:38 只看该作者

一会仔细看看

一会仔细看看

zhubq

12楼 大 中 小 发表于 2009-10-14 15:30 只看该作者

我们正学,NET呢 晚上仔细研究下