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; })();