简小单
简小单
  • 发布:2016-02-20 17:08
  • 更新:2018-06-26 17:45
  • 阅读:2993

父页面弹出菜单被子页面挡住问题

分类:HTML5+

我有一个选项卡,webview模式,主页面头上是一个标题,标题右侧有一个 + 号的 ICON 点击他的时候我想弹出一个菜单,类似于支付宝,底部是一个导航栏,里面有三个链接,分别对应三个子页面,当子页面显示出来的时候,点击标题右侧的“+”时弹出的菜单会被子页面盖住,主页面都显示了遮罩了(头和导航栏都变灰了),子页面区域还是一片白,把弹出的菜单给挡住了,我试过创建子页面时加ZINDEX样式,把子页面的ZINDEX调小,但是不管用啊,求大神如何解决???急!

2016-02-20 17:08 负责人:无 分享
已邀请:
maq

maq

常规的方法是不能解决问题的。

子页面既然挡在主页面的前面,被遮挡的区域就不可能显示主页面的内容,无论主页面里面 DOM 对象的 zIndex 调到多高也没用。

我记得官方技术人员在另一个类似问题的帖子里回复的建议方案,是让主页面给子页面发消息(用 mui.fire() 发送自定义消息),由子页面显示弹出菜单,用户选择后再由子页面向主页面发送自定义消息报告选择结果。

这个方法……好吧,如果你不介意程序代码被搞乱,可以试试。一个简单的弹出菜单功能要通过 webview 之间互相发消息来协调,而且,不止一个子页面要参与其中哦……

还有一个方法可以考虑,就是专门创建一个 webview 来实现弹出菜单,但为了达到显示效果,需要设置 webview 的 background 为 transparent(同时网页 html 的 background 也要设置成某种半透明效果),参考文档 http://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.WebviewStyle

不过这个设置有系统版本限制,在不支持 transparent 的环境下会很难看。

简小单

简小单 (作者)

首先非常感谢这位大神的热心帮忙,小弟在这里深表感谢,对于你的给出的第一个方案,我有两点疑问,第一:我设置的ZINDEX是在创建子WEBVIEW的时候通过WebviewStyle属性的的zindex设置的,文档给出的说明是:zindex: (Number 类型 )窗口的堆叠顺序值
拥有更高堆叠顺序的窗口总是会处于堆叠顺序较低的窗口的前面,拥有相同堆叠顺序的窗口后调用show方法则在前面。
并非在DOM元素上直接设置的,这点我还是不明白为什么不生效。
其次:你说主页面通过事件让子页面把弹出菜单显示出来,可是当这个弹出菜单有遮罩的情况下,屏幕的上边标题栏和下边的导航栏应该不会被遮罩盖住吧?此时点击主页面上的标题,这个弹出菜单会不会缩回?这只是我的猜测等明天试过了我再来回复。对于方法二我想我还是不要试了,哈哈 非常感谢 非常感谢

maq

maq

WebviewStyle 的 zindex 影响的是多个 webview 之间的堆叠顺序,这个参数应该是有效果的,我用过。

但是问题在于,你现在是要在主 webview 里面渲染出弹出菜单,而子 webview 挡在了前面,你当然可以设置子 webview 的 zindex 把它调整的主 webview 的后面去,但那跟 hide() 也就没什么区别了,肯定不是你希望的效果。

可能你希望的是这样的堆叠效果:

— 第 3 层:遮罩和弹出菜单(在主 webview 中渲染)
— 第 2 层:内容区(子 webview)
— 第 1 层:顶部标题,含菜单按钮(在主 webview 中渲染)

但这是不可能的。

至于你指出的【由子 webview 代为显示弹出菜单的话,无法遮罩盖住标题栏,点击标题栏也不会取消弹出菜单】,的确是这样的。如果你真要这样做的话,也可以补救,就是在主 webview 里面也同时创建一个遮罩,响应点击事件……想想就够了。这个只能说是没有办法的办法。

9***@qq.com

9***@qq.com

现在遇到同样的问题

  • 赵梦欢

    http://ask.dcloud.net.cn/question/43733

    2017-05-26 20:03

4***@qq.com

4***@qq.com

这个问题好像无解,让子页面去调用,很乱,每个页面都要这么去改。。。

该问题目前已经被锁定, 无法添加新回复