
很多開發同學在接入 H5 容器後都會對容器的導航欄進行深度定制,除了 Native 的定制化之外,還有很多場景是使用到 jsAPI 的方式,通過 jsAPI 實作導航欄的動态修改。
本文旨在通過實際場景的描述,通過 jsAPI 的方式,介紹 jsAPI 下怎樣動态修改導航欄,供各位 mPaaS Coder 參考使用。
延伸閱讀:
技術幹貨 | Native 頁面下如何實作導航欄的定制化開發?
内置 jsAPI 修改導航欄
1.修改導航欄标題
修改導航欄标題API:setTitle
AlipayJSBridge.call('setTitle', {
title: 'H5設定标題',
});
AlipayJSBridge.call('setTitle', {
subtitle: '副标題',
});
AlipayJSBridge.call('setTitle', {
title: '标題',
subtitle: '副标題',
});
2.修改導航右按鈕
setOptionMenu 此 API 有 reset、title、icontype、icon 這 4 個屬性有一個即可,屬性的優先級:reset > title > icontype > icon。
AlipayJSBridge.call('setOptionMenu', {
title : '按鈕',
redDot : '5', // -1 表示不顯示,0 表示顯示紅點,1-99 表示在紅點上顯示的數字
color : '#9951ffee', //字型顔色,必須以#開始 ARGB 顔色值
});
AlipayJSBridge.call('showOptionMenu');//強制重新整理顯示
AlipayJSBridge.call('setOptionMenu', {
icon : 'https://pic.alipayobjects.com/e/201212/1ntOVeWwtg.png',
redDot : '6', // -1 表示不顯示,0 表示顯示紅點,1-99 表示在紅點上顯示的數字
});
AlipayJSBridge.call('showOptionMenu');//強制重新整理顯示
AlipayJSBridge.call('setOptionMenu',{
// 顯示時的順序為從右至左
menus: [{
icontype: 'scan',
},{
icontype: 'add',
}],
override: true // 在需要設定多個 option 的情況下,是否保留預設的 optionMenu
});
AlipayJSBridge.call('showOptionMenu');//強制重新整理顯示
AlipayJSBridge.call('hideOptionMenu');//隐藏右側按鈕
3.修改導航欄背景色
修改設定導航欄背景色 setTitleColor API,參數 color、reset、resetTransparent。優先級 reset > color > resetTransparent。
window.AlipayJSBridge && AlipayJSBridge.call("setTitleColor", {
color: 16118569,
reset: false // (可選,預設為 false,true 恢複預設導航欄顔色title 等,color等于無效)
});
window.AlipayJSBridge && AlipayJSBridge.call("setTitleColor", {
reset: true // (可選,預設為 false,true 恢複預設導航欄顔色title 等,color等于無效)
});
AlipayJSBridge.call("setTitleColor", {
resetTransparent: true // 設定導航欄透明
});
注:此 jsAPI 設定背景色後會影響導航标題和按鈕顔色,需要在自定義插件中監聽kH5Event_Scene_NavigationBar_ChangeColor 并在監聽事件中實作代碼:
//禁止修改容器預設導航欄樣式
[event stopPropagation];
4.其他修改
(1)顯示标題欄加載 loading
AlipayJSBridge.call('showTitleLoading');
(2)隐藏标題欄加載 loading
AlipayJSBridge.call('hideTitleLoading');
展示效果:
自定義 jsAPI 修改導航欄
1.建立自定義 jsAPI
(1)建立 jsAPI 類:必須繼承自 PSDJsApiHandler 基類。
(2)為與容器預設提供的插件命名保持一緻,建立的 jsAPI 類命名以 XXJsApi4 開頭,其中 XX 為自定義的字首。
(3)在 .m檔案中,需重寫方法 -(void)handler:context:callback:。當在 H5 前端調用此 jsAPI 時,會轉發到此方法。
2.注冊 jsAPI
(1)在自定義的 Plist 檔案中注冊此 jsAPI。
(2)在 JsApis 數組下注冊上一步建立的 jsAPI 類,注冊的 jsAPI 是一個字典類型,包含以下兩項内容,Key 分别為:jsApi 和 name。
名稱 | 含義 |
---|---|
jsAPI | 在 H5 頁面中調用的 jsAPI 接口名。注意: 為防止自定義的 jsAPI 與容器内置 jsAPI 互相影響導緻不可用,請給自定義 jsAPI 名加上字首予以區分。 |
name | 建立的 jsAPI 的類名。 |
3.自定義 jsAPI代碼實作
(1)H5 前端代碼參考:
function setNativeTitle() {
my_jsapi_call("setNativeTitle",{
'title':'主題'
});
}
function my_jsapi_call(apiName,params) {
window.AlipayJSBridge && AlipayJSBridge.call(apiName,params,function(data){
alert('調用結果'+JSON.stringify(data));
});
}
(2)原生端代碼參考:
- (void)handler:(NSDictionary *)data context:(PSDContext *)context callback:(PSDJsApiResponseCallbackBlock)callback {
[super handler:data context:context callback:callback];
NSLog(@"+++++++%@",data);
NSString *string = data[@"title"];
//擷取目前H5容器vc,通過VC内自定義修改導航欄
YXH5WebVC *vc = (YXH5WebVC *)DTContextGet().currentVisibleViewController;
vc.barView.title = string;
}
本文作者:阿裡雲 mPaaS TAM 團隊(禦雪 榮陽)
mPaaS 最新折扣資訊
【隐私合規檢測飛天會員八折專享】助力客戶防範監管處罰及通過應用市場稽核上架。點選
了解更多