<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    eagle

    學無止境,細節(jié)決定成敗.
    posts - 12, comments - 11, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    webIm中js總結

    Posted on 2009-08-27 14:57 月下孤城 閱讀(2100) 評論(0)  編輯  收藏 所屬分類: javaScript

            最近做一個項目,需要實現(xiàn)web端的im聊天功能。考慮到執(zhí)行效率不能用extjs,最后決定采用jquery+div+css(沒辦法只有重新發(fā)明輪子了^_^)。個人一直比較反感js,感覺這門語言對開發(fā)人員太不人性化,尤其在調試、兼容性等問題,簡直是場災難(呵呵,工作之余發(fā)下牢騷)。項目進行到現(xiàn)在,一般功能實現(xiàn)也差不多了,回過頭來對當初一些問題做個總結,留個名便于以后查詢。該代碼在ie6、ie7、firefox上測試通過。

    一、html編輯器。
    1.表情符插入:
            對于這個功能在使用者看來實現(xiàn)是理所當然的事,但要自己實現(xiàn)卻有2個難度:一是html textarea控件中并
    不支持html代碼,即在textarea中使用<img src='...'>標簽不會顯示圖片;二是在信息輸入框輸入文字的同時要支持表情符的任意插入,即在光標處插入表情。在網(wǎng)上查了很多資料,參考了extjs htmleditor源碼,使用iframe方式總算把這問題搞定,以下是主要實現(xiàn)代碼:

    初始化htmleditor實現(xiàn):

     1 /*初始化htmleditor*/
     2 function initInputHtmleditor(){
     3     var iframeSrc = $.browser.msie? "javascript:false;" : "javascript:;";
     4     var msgIndiv = '<IFRAME name="messageSend" id="messageSend" frameBorder="0" src="'+iframeSrc+'"></IFRAME>';
     5     $('#msgInputDiv').html(msgIndiv);//把iframe加入到頁面顯示div中
     6     
     7     /*通過div id獲取iframe的document對象*/
     8     var doc = getIframeDoc('messageSend');
     9     doc.open();
    10     doc.write(getDocMarkup());
    11     doc.close();
    12     
    13     $(doc).ready(function(){
    14         doc.designMode="on";
    15         //doc.contentEditable = true;
    16     });
    17     
    18     /*加載鍵盤觸發(fā)事件*/
    19     $(doc).bind('keypress',function(event){//添加處理事件
    20         addSendMsg(event);
    21     });
    22 }
    23 
    24 /*獲取iframe document對象*/
    25 function getIframeDoc(iframeId){
    26     var iframeObj = $('#'+iframeId);
    27     var wnd = getIframeWnd(iframeId);
    28     var doc = $.browser.msie ? wnd.document : (iframeObj.contentDocument || wnd.document);
    29     return doc;
    30 }
    31 
    32 /*獲取iframe document window 對象*/
    33 function getIframeWnd(iframeId){
    34     return $.browser.msie ? document.frames(iframeId) : window.frames[iframeId];
    35 }
    36 
    37 /*
    38  * 返回html document標志字符串
    39 該方法中p元素的css margin和padding屬性一定要設為0,否則ie下處理回車事件時行距會很大,因為ie在iframe下對回車是按<p></p>處理的*/
    40 function getDocMarkup(){
    41     return '<html><head><style type="text/css">+
    42             'body{border:0;margin:0px;padding:0px;height:98%;cursor:text;' +
    43             'word-break:break-all;}' +//字體自動換行
    44             'p{margin:0px;padding:0px;}' +
    45            '</style></head><body></body></html>';
    46 }

    插入表情代碼:
     1 /*
     2  * 在文檔光標處插入文本
     3  * 插入示例:
     4  * var img = "<img src='"+basePath+"face/01.gif' ></img>";
     5  * var doc = getIframeDoc('messageSend');//取iframe document對象
     6  * insertAtCursor(doc,img,'messageSend');
     7  * */
     8 function insertAtCursor(doc,value,focusElId){
     9     if($.browser.msie){//ie
    10         var wnd = getIframeWnd(focusElId);//聚焦元素id
    11         wnd.focus();
    12         var r = doc.selection.createRange();
    13         if(r){
    14             r.collapse(true);
    15             r.pasteHTML(value);
    16         }
    17     }else if($.browser.mozilla || $.browser.opera){//firefox ,opera
    18         var wnd = getIframeWnd(focusElId);//聚焦元素id
    19         wnd.focus();
    20         doc.execCommand("InsertHTML"false, value === undefined ? null : value);
    21     }else if($.browser.safari){//safari
    22         doc.execCommand("InsertText"false, value === undefined ? null : value);
    23     }
    24 }

    2.發(fā)送消息Ctrl+enter事件捕獲
     1 //鍵盤按起之后的響應事件,可能為回車,可能為刪除,可能為正常輸入
     2 function addSendMsg(e)
     3 {
     4     var evt = window.event ? window.event : e;
     5     var isSend =false//是否出發(fā)Ctrl+enter鍵
     6     if($.browser.msie){
     7         isSend = evt.keyCode==10;
     8     }else{
     9         isSend = evt.ctrlKey && evt.keyCode==13;
    10     }
    11     if(isSend)//ctrl+回車鍵
    12     {
    13         var msg = getInputMessage();
    14         if(msg == '' || msg == '<br>'){
    15             alert("對不起,您不能發(fā)送空消息!!!");
    16             setInputMsgFocus();
    17             return;
    18         }
    19         /*發(fā)送消息*/
    20         sendChatMsg(msg);
    21     }
    22 }



    ---------------------
    月下孤城
    mail:eagle_daiqiang@sina.com

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲精品美女久久久久99| 国产三级免费电影| 亚洲avav天堂av在线不卡| 又黄又大的激情视频在线观看免费视频社区在线 | 亚洲免费视频观看| 91成人免费观看网站| 亚洲乱码中文论理电影| 台湾一级毛片永久免费| 亚洲综合偷自成人网第页色| 免费无码黄十八禁网站在线观看 | 中文字幕精品亚洲无线码一区应用| 永久免费观看黄网站| 最新欧洲大片免费在线| 亚洲综合免费视频| 精品久久久久成人码免费动漫| 亚洲国产成人99精品激情在线| 91视频国产免费| 亚洲AV日韩AV永久无码色欲| 一区国严二区亚洲三区| 抽搐一进一出gif免费视频| 亚洲精品制服丝袜四区| 91青青青国产在观免费影视| 在线aⅴ亚洲中文字幕| 九月婷婷亚洲综合在线| 中文字幕视频在线免费观看| 亚洲AV无码成人精品区天堂| 波多野结衣中文字幕免费视频| 亚洲AV成人无码久久WWW| 久久精品国产亚洲AV不卡| 少妇人妻偷人精品免费视频| 456亚洲人成在线播放网站| 国产男女猛烈无遮挡免费视频| a一级毛片免费高清在线| 久久亚洲精品AB无码播放| 日本精品人妻无码免费大全| 日本精品久久久久久久久免费| 亚洲av永久无码精品网站| 最新仑乱免费视频| 91国内免费在线视频| 国产.亚洲.欧洲在线| 在线观看亚洲精品国产|