发布新话题与讨论建议及审查说明
欢迎发布有讨论和阅读价值的话题;不欢迎嘲弄宗教、种族、地缘、性取向等话题。
推崇布拉格公民论坛《对话守则》:对话的目的是寻求真理,不是为了斗争;不做人身攻击;保持主题;辩论时要用证据;要分清对话与只准自己讲话的区别;尽量理解对方。
遵循《世界人权宣言》第十九条不对用户已发表言论进行删除处理;用户有权限删除本人已发表言论;编辑会合并重复话题。
发新话题
收藏 订阅 推荐 打印

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

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

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

最新版本将在这里更新: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

自定义页面

如下是几个可以用用户登录后自定义的页面,每人登录后只看见自己的那个页的。要编辑这几个页面可访问如下几个对应的地址编辑好点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通过代码引入。

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

如下是整个代码示例。后面介绍如何修改。
引用:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<script type="text/javascript" language="javascript">

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 "<b>";
}

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>
<body>
<iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
<form>
<textarea id='chat_msg'>
</textarea>
</form>
<span id='chatAutoRefreshBox'></span>
<span id='chatSubmitBox'></span>

<hr />
<span id='chatListBox'></span>
</body>
</html>
以上示例,在html中插入js代码../OnlineChat/port.for1984.OnlineChat.nocache.js
即引入了基础系统。
引用:
<script type="text/javascript" language="javascript" src="../OnlineChat/port.for1984.OnlineChat.nocache.js"></script>
加入
引用:
<script type="text/javascript" language="javascript">

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 "<b>";
}

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 "<b>";
}
结束输出消息时会被用到,此函数要求返回消息块的尾部内容。
引用:
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 id='chat_msg'>
</textarea>
代码是标记放置自动刷新ClickBox的位置。与后面2个一样,不一定要使用span,如div等的其他元素标签亦可。
引用:
<span id='chatAutoRefreshBox'></span>
代码是标记放置发送按钮的位置。
引用:
<span id='chatSubmitBox'></span>
代码是标记放置消息列表的位置。
引用:
<span id='chatListBox'></span>
------------------------
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,让显示的顺序反过来。
真详尽。辛苦了。麦总

回复 2楼 库存袈裟 的话题

汗个……总字也上了,万一被人盯上,我说这是库总对我的特称哈。谢库总。
顶一个 对美工不懂啊
要是能做成gtalk网页内嵌模式那样就不错了
ps:bbs要是能直接贴图多好~~~
麦总、库总,二位老总辛苦了。
真不容易啊~

辛苦了!

自定义聊天界面——例子(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、最后面的一条消息是最新消息
引用:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<script type="text/javascript" language="javascript">

//网上搜索出来的自动换行函数
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 "<b>";
}

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>
<body>
<span id='chatListBox'></span>
<hr />
<form>
<textarea id='chat_msg' cols=50 rows=3>
</textarea>
</form>
<span id='chatAutoRefreshBox'></span>
<span id='chatSubmitBox'></span>
</body>
</html>

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

打開页面 https://1984bbs.com/edit_file.html?chat_html,输入后面的代码,点击Submit按钮保存。
然后打開页面 https://1984bbs.com/edit_file.php?page=chat_html 进行聊天。

本例子是最简化实现自己的聊天界面,在上面的基础上稍作修改就好了。
引用:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<script type="text/javascript" language="javascript">

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>
<!-- html 部分-->
<body>
<form>
<input type=text id='chat_msg' size=60 /><span id='chatAutoRefreshBox'><!--自动刷新选项--></span><span id='chatSubmitBox'><!--发送按钮--></span>
</form>
<br />

<span id='chatListBox'><!--内容列表--></span>
</body>

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

一会仔细看看

一会仔细看看
我们正学,NET呢   晚上仔细研究下
发新话题

快速回复主题

 

[完成后可按 Ctrl+Enter 发布]  预览话题  恢复数据  清空内容

顾问:莫之许、北风、不锈钢老鼠、温克坚、艾未未、冉云飞、安替、崔卫平、闾丘露薇、章立凡 形象代言:宋石男 法律顾问:浦志强
编辑
:张书记、上肛上腺、抑扬、musicool、王祖贤、alix001、核子力量、四夕亚日、炽鸢侯、木火
技术:库存袈裟、麦圆、散光