ntv.js框架源碼解讀 - 3key.js

3key.js源代碼:html

ntv.key類,遙控器鍵值和系統消息的監聽代理接口及遙控器鍵值的綁定。瀏覽器

 ntv.key = function(){};
 ntv.key.init = function(){
     this.listener_keyevent();     // 鍵值事件監聽,監聽遙控器鍵值動做(物理觸發)。
     this.listener_systemevent();  // 系統事件監聽,監聽系統發出的消息(系統虛擬觸發)。
     this.keycode_set();           // 鍵值碼綁定。
 };


1. 鍵值事件監聽,主要函數說明:app

ntv.key.keypress() 函數就是監聽鍵值事件的函數。其中對一些鍵值進行了處理,例如將上/下/左/右 肯定/刷新/返回 等系統控制類(操做類)事件轉發到了ntv.navigation類的move()函數進行處理。一樣也將全部鍵值事件透傳到了ntv.key.keypress_handle()函數,你能夠經過重寫ntv.key.keypress_handle()函數來對鍵值事件進行處理。框架

ntv.key.keypress = function(event){
    var key_event = event ? event : window.Event;
    var key_code = key_event.which ? key_event.which : key_event.keyCode;
    
    ntv.log.console("ntv.key.keypress, keycode: " + key_code);
    
    ntv.navigation.move(key_code, event); // 用來處理 上/下/左/右/肯定/刷新/返回 等常規鍵值
    ntv.key.keypress_handle(key_code); // 用來自定義處理鍵值的函數
};

  代碼示例:自定義處理紅色鍵。函數

var set_listen_red_key = function(){
    ntv.key.keypress_handle = set_listen_handle;
};

var set_listen_handle = function(event_code){
    if(event_code == ntv.key.keycode.KEY_RED)
        set_red_key_action();
};

var set_red_key_action = function(){
    // 按紅色鍵觸發的代碼寫在這裏
    ntv.log.console("$PAGE, app.sale.set_red_key_action(), 紅色鍵被觸發!");
};


(function(){
    set_listen_red_key();
})();


   關於手動控制返回鍵頁面地址的方法說明。默認狀況下瀏覽器系統默認處理返回鍵,可是有些業務狀況下咱們想要瀏覽器返回到指定的頁面地址,這個時候就須要禁用瀏覽器對返回鍵的處理。測試

  /*
  * 用於手動控制返回頁面路徑的鍵值處理函數, 因爲各瀏覽器廠商對返回事件處理不一致.
  * 說明: 經過禁止系統處理返回事件來達到手動控制返回操做. 代碼經測試, 必須寫在此處.
  * 使用:經過調用以下代碼來手動控制返回操做
  *       ntv.stb.key.enable_manual_control_back_event();
  *       ntv.stb.key.move_back_url = "返回頁面地址"; 
  */
 ntv.key.keypress_for_manual_control_back_event = function(event){
 	var key_event = event ? event : window.Event;
	var key_code = key_event.which ? key_event.which : key_event.keyCode;

	ntv.log.console("ntv.key.keypress, keycode: " + key_code);

	// 禁用系統返回鍵動做,如下代碼必須放置在此
	var browser = ntv.profile.browser;
	if(browser == "NGB-H" && key_code == ntv.key.keycode_stb_ngb_h.KEY_BACK)
	{
		event.preventDefault();
		ntv.navigation.move_back();
	}
	else if(browser == "iPanel" && key_code == ntv.key.keycode_stb_ipanel.KEY_BACK)
	{
		ntv.navigation.move_back();
		return 0;
	}
	else if(browser == "SHDV" && key_code == ntv.key.keycode_stb_shdv.KEY_BACK)
	{
		ntv.navigation.move_back();
	}
	else if(browser == "PCBrowser" && key_code == ntv.key.keycode_pc.KEY_BACK)
	{
		event.preventDefault();
		ntv.navigation.move_back();
	}else
	{
		ntv.navigation.move(key_code, event); // 用來處理 上/下/左/右/肯定/刷新/返回 等常規鍵值
		ntv.key.keypress_handle(key_code); // 用來自定義處理鍵值的函數
	}
	
 };

   代碼示例:指定當前頁面的返回頁面爲 http://192.168.1.163/example/home.html。this

(function(){
    ntv.stb.key.enable_manual_control_back_event();
    ntv.stb.key.move_back_url = "http://192.168.1.163/example/home.html";
})();


2. 系統事件監聽,主要函數說明:url

   ntv.key.systemevent() 函數就是監聽系統事件的函數。系統事件主要是媒體播放模塊與應用層交互的消息定義,各廠商中間件的事件代碼定義也不一致。ntv.js框架已經對這些系統事件進行了處理,通常應用不須要開發者來處理這些系統事件。一樣全部的系統事件都透傳給了ntv.key.systemevent_handle() 函數,在其餘框架模塊中也是經過重寫ntv.key.systemevent_handle() 函數來處理系統事件的。spa

ntv.key.systemevent = function(event){
 	// SHDV回傳對象需從新構造
 	if(ntv.profile.browser == "SHDV")
 	{
 		// 重構透傳參數
		var shdv_system_event = {
			type: event.type,
			which: event.msg,
			modifiers: event.info
		};
		event = shdv_system_event;
 	}

 	var system_event = event ? event : window.Event;
	var event_code = system_event.which ? system_event.which : system_event.keyCode;

	ntv.log.console("ntv.key.systemevent(), event_code: " + event_code);
	ntv.key.systemevent_handle(event_code);
 };


3. 鍵值碼綁定,主要函數說明:.net

   因爲各廠商對遙控器的鍵值碼定義不統一,因此框架經過獲取當前運行的瀏覽器,而後將當前瀏覽器的鍵值碼對象賦值給了ntv.key.keycode對象。因此對於開發者來講,鍵值碼對象爲 ntv.key.keycode。

   目前框架並未定義全部鍵值碼,由於目前應用還未使用到更多的鍵值。對於各廠商中間件的鍵值碼定義參考ntv.js框架(第一章) - 機頂盒中間件規範中的《東方有線NGB信息服務內容解析規範》。

 ntv.key.keycode_pc = {
    	KEY_OK : 13,
    	KEY_UP : 38,
    	KEY_DOWN : 40,
        KEY_LEFT : 37,
        KEY_RIGHT : 39,
        KEY_REFRESH : 116,
        KEY_BACK : 32,
        
        KEY_RED: 192 // ~鍵(tab上方)
 };

 ntv.key.keycode_stb_ipanel = {
	KEY_OK : 13,
	KEY_UP : 1,
	KEY_DOWN : 2,
        KEY_LEFT : 3,
        KEY_RIGHT : 4,
        KEY_REFRESH : 338,
        KEY_BACK : 340,
    
        KEY_RED: 832
 };

 ntv.key.keycode_stb_shdv = {
	KEY_OK : 13,
	KEY_UP : 38,
	KEY_DOWN : 40,
        KEY_LEFT : 37,
        KEY_RIGHT : 39,
        KEY_REFRESH : 338,
        KEY_BACK : 70,
    
        KEY_RED: 66
 };

 ntv.key.keycode_stb_ngb_h= {
	KEY_OK : 4097,
	KEY_UP : 38,
	KEY_DOWN : 40,
        KEY_LEFT : 37,
        KEY_RIGHT : 39,
        KEY_REFRESH : 4226,
        KEY_BACK : 4096,
    
        KEY_RED: 2305
 }; 

 ntv.key.keycode = ntv.key.keycode_pc;

 ntv.key.keycode_set = function(){
	if(ntv.profile.browser == "iPanel")
		this.keycode = this.keycode_stb_ipanel;
	else if(ntv.profile.browser == "SHDV")
		this.keycode = this.keycode_stb_shdv;
	else if(ntv.profile.browser == "NGB-H")
		this.keycode = this.keycode_stb_ngb_h;
 };

  代碼示例:自定義處理鍵值。

 var set_listen_handle = function(keycode){
 	switch(keycode)
 	{
 		case ntv.key.keycode.KEY_UP:
 			// to do
 			break;
 		case ntv.key.keycode.KEY_DOWN:
 			// to do
 			break;
 		case ntv.key.keycode.KEY_LEFT:
 			// to do
 			break;
 		case ntv.key.keycode.KEY_RIGHT:
 			// to do
 			break;
 		case ntv.key.keycode.KEY_REFRESH:
 			// to do
 			break;
 		case ntv.key.keycode.KEY_OK:
 			// to do
 			break;
 	}
 };
 
 (function(){
        ntv.key.keypress_handle = set_listen_handle;
  })();
相關文章
相關標籤/搜索