技术干货 | jsAPI 方式下的导航栏的动态化修改

简介: 操作指导:通过 jsAPI 实现导航栏的动态修改。

公众号首图1014.png

很多开发同学在接入 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');

展示效果:1627994216981-552f2d90-3b02-4b16-8dd4-63cda4846f69.png

自定义 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 最新折扣资讯

【隐私合规检测飞天会员八折专享】助力客户防范监管处罚及通过应用市场审核上架。点击了解更多

尾部banner.gif

相关文章
|
4月前
|
数据采集 小程序 定位技术
[笔记]微信小程序开发《三》框架基础:小程序生命周期、全局配置、页面配置。
[笔记]微信小程序开发《三》框架基础:小程序生命周期、全局配置、页面配置。
|
20天前
|
移动开发 小程序 数据管理
9月开发者日回顾|小程序跳转接口等多个JSAPI更新,能力集成提供场景化排查工具
9月开发者日回顾|小程序跳转接口等多个JSAPI更新,能力集成提供场景化排查工具
21 0
|
21天前
|
移动开发 小程序 前端开发
【5月开发者日回顾】自定义TabBar、自定义组件支持 observers两大功能即将上线
【5月开发者日回顾】自定义TabBar、自定义组件支持 observers两大功能即将上线
9 0
|
19天前
|
人工智能 前端开发 小程序
【产品上新】API中心改版上线,新增JSAPI相关内容!
【产品上新】API中心改版上线,新增JSAPI相关内容!
9 1
|
3月前
|
数据格式
宜搭自定义页面组件 TablePc 渲染错误
宜搭自定义页面组件 TablePc 渲染错误
99 4
|
6月前
|
JavaScript 小程序
微信小程序-页面访问组件数据和方法
好了,结构搭建的差不多了,接下来就是来看关键的内容了,首先我们来看一下如何拿到一个自定义组件的实例,有两种方式,这两种方式的前提条件是,给这个组件设置一个标识,设置标识的方式可以是通过类名或者ID进行设置,然后通过这个标识得到组件实例。
145 0
|
7月前
|
安全 定位技术 网络安全
百度地图开发:调用jsAPI实现实时定位的解决方案及常见问题
百度地图开发:调用jsAPI实现实时定位的解决方案及常见问题
344 0
|
7月前
|
前端开发 JavaScript 数据管理
百度地图开发:自定义区划管理php后台数据管理的解决方案(layUI前端)
百度地图开发:自定义区划管理php后台数据管理的解决方案(layUI前端)
71 0
|
7月前
|
前端开发 数据可视化 JavaScript
漏刻有时数据可视化大屏核心框架模版更换前端模版操作(2)API开发及数据调用
漏刻有时数据可视化大屏核心框架模版更换前端模版操作(2)API开发及数据调用
52 0
|
7月前
|
数据采集 数据可视化 前端开发
漏刻有时数据可视化大屏核心完整版框架PHP后台数据管理 API数据接口 Echarts图表库 自带电脑端和手机端两套模版且支持自定义前端模版开发
漏刻有时数据可视化大屏核心完整版框架PHP后台数据管理 API数据接口 Echarts图表库 自带电脑端和手机端两套模版且支持自定义前端模版开发
136 0

相关产品

  • 移动开发平台 mPaaS
  • 移动测试