「@」功能—用Appcan的API實現—衆學

1、窗口與浮動窗口的機制html

  當前項目下,打開的界面實際上分紅兩部分:   窗口(head)和浮動窗口(普通的界面)android

    進入初始頁面(每一個模塊下的index.html)後,點擊相應的功能,好比在im下的index.html頁面,點擊羣組消息,此時的調用線路:jump(types,conversionId)-->openwin(types, head, '2')lua

function openwin(winName,url,anim){
   * uexWindow.open(winName, "0", url, anim, "", "", "4", "275");
}

帶星號的方法爲AppCan的API,其中url爲地址,winName爲打開的窗口的名稱,此名稱需惟一。一個頁面能夠屢次被調用,而且顯示不一樣的內容,都是由於帶入的窗口名稱不一樣。如系統消息,私聊和羣聊都是公用同一個head,可是因爲傳入的winName不一樣,因此顯示的效果也不一樣。url

窗口打開後,一樣經過載入時候的方法打開浮動窗口spa

   

 zy_con('content', types + '.html', 0, $$('header').offsetHeight, $$('footer').offsetHeight);
 
 -->function zy_con(id,url,x,y){
   
    var s=window.getComputedStyle($$(id),null);
    var scale=getScale(id);   
    if(localStorage['device']=='android'){
        var b=0;
        if(arguments.length==5){
            b+=int(arguments[4]);
        }
        uexWindow.openPopover(id,"0",url,"",int(x)*scale,int(y)*scale,int(s.width)*scale,"",int(s.fontSize)*scale,"4",b);
    }else{
        uexWindow.openPopover(id,"0",url,"",int(x)*scale,int(y)*scale,int(s.width)*scale,int(s.height)*scale,int(s.fontSize)*scale,"4","0");
    }
}

 uexWindow.openPopover方法中的id也能夠是惟一,若是不惟一則打開其它的浮動窗口便會把當前的浮動窗口覆蓋,因爲真實項目中手機只會打開一個浮動窗口,因此當前項目下就將id設置爲content,打開其它窗口時就將原窗口覆蓋。code

打開的位置和窗口大小則在被封裝的方法:
htm

function zy_resize(id,x,y)
{
    var s=window.getComputedStyle($$(id),null);
    var scale=getScale(id);  
    uexWindow.setPopoverFrame(id,int(x)*scale,int(y)*scale,int(s.width)*scale,int(s.height)*scale);
}

進行設定(具體問網頁美工)ip

---------------------------------------------------------------------------------------------------------------------------
get

2、「@」功能的實現input

    因爲「@」功能只在羣組消息下使用,在私聊狀況下不會出現,因此在打開羣組消息,也就是head和group_message後,在uexOnload功能下加入:

if(types == "group_message"){
                $("#text-input").on("keyup", function() {
                    var txt = $("#text-input").text();
                    var last_txt = txt.charAt(txt.length - 1);
                    if (last_txt == "@") {
                        jump("group_user");
                    }
                })
                }

定位到文本框,獲取其中的文本,而後進行掃描檢查,若是發現前一個字母是「@」,就跳轉。具體的jump方法看當前head下的設定。

在跳轉的頁面下,點擊相應的用戶後:

function group_user_info(group_id,user_id,user_nick_name){
        if(source != "group_message"){
           params.current_user_id = user_id;                   
          jump("group_user_info", "羣名片");
          }else{
          uescript(source,"call_friend_back('"+user_nick_name+"')");           1
          uescript('', 'closewin()');                                          2
          }
    }

判斷source(由params攜帶),若是是group_message,就會調用另外一個窗口下的浮動窗口中的方法,將當前用戶的暱稱傳入,而後再調用當前窗口的closewin()方法,將窗口關閉,完成「@」功能;

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

3、注意

function uescript(wn, scr){
    uexWindow.evaluateScript(wn,'0',scr);
}

uexWindow.evaluateScript是調用窗口中的方法,wn就是窗口的名稱,默認爲當前的窗口,scr是方法名

function ueppscript(wn, pn, scr){
    uexWindow.evaluatePopoverScript(wn,pn,scr);
}

uexWindow.evaluatePopoverScript是打開浮動窗口的方法,wn是窗口的名稱,pn是浮動窗口的名稱,scr是被調用的方法。

相關文章
相關標籤/搜索