虽然关于弹出菜单的问题已经很多了,但是我发现大家说来说去还是没有解决设计子页面的弹出菜单问题。
现在将问题整理,希望官方能帮忙解决一下。
在webview选项卡模式下,因为选项卡的导航部分属于 父页面, 内容部分属于子页面。如何处理弹出菜单从屏幕的最下方(弹出后应该遮挡选项卡导航部分)弹出。
PS:这不是一个关于跨页面弹出菜单如何触发的问题,而是弹出菜单的显示问题。
我看好几个朋友都有这样的问题,所以把我们的撞墙过程发出来,一是希望官方能给个完美点的解决方案,二是也让大家不要在这几种方法上浪费时间。如果您是想直接看答案的朋友,实在对不起,现在还没有合适的方案来实现。
试验的方法:
第一类:
1、尝试在子页面中设置弹出菜单的位置。
2、尝试在父页面中设置弹出菜单。
失败了,总结出来主要是这是两个 webview 的窗口组合,webview是什么,是我们html的容器,就相当于浏览器一样,我们不能通过设置html属性,让html标签横跨两个浏览器(个人理解,不对一定要指正,免得误导他人)。 所以这个办法不可能成功,放弃了。
3、通过修改页面显示层级(zindex)来实现。
这个办法简直有点可笑,但是在思路全无,盲目选择的时候,还是试了一下,结果是不可能行得通。原理不多说了。
第二类:
既然是两个webview,导航部分属于父页面,那咱就动态的修改一下 子页面的webview 样式,让菜单弹出之前,调整子页面大小,让其覆盖住父页面的导航部分不就可以了吗?于是:
1、通过webview的 setStyle() 进行样式修改。 发现有一些属性是可以直接修改的,修改后立刻生效。
有一些属性是需要重新打开才失效的,例如:窗口的位置。有一些属性就死活修改不了的。
通过这种方法可以将父页面的header部分覆盖掉。setStyle({top:'0px'}) ,但是无法修改bottom属性。
分析原因:
- 莫非是由于设置了 height 属性,导致 bottom 无法修改,结果通过setStyle 设置 height后,也没有效果。将height 属性设置为 比例,固定值均无效果。
需要官方给个确认,是否不能在页面生成后修改height属性。 5+的规范中只是提到可以设置,没有是否可以再页面生成后再设置。
由于无法修改 bottom 和 height 属性,这种方法也没成功。
第三类:
既然跨越两个窗口不行,修改窗口大小暂时也不行,那就考虑在这两个窗口上再增加一个窗口来实现。
(这个要多谢用户:libre 的指点,看了一下上一版hello-mui 中弹出菜单 主页遮罩的例子)
开始实验
1、尝试通过打开一个整个的webview,通过新打开的webview 盖住之前的两个页面,盖住简单,但是还要在弹出菜单之外的区域显示透明,所以就需要设置 新打开webview 的透明度。设置webview的透明度之后,会导致在webview中的所有html控件均会透明显示。 也就是说弹出菜单也是透明的。
于是开始了各种尝试:
修改html背景,修改body背景,修改具体的控件背景 等等,都以失败告终。
后来去看了5+规范,里面有这么一个描述:“background:String,窗口空白区域的背景模式,设置background为颜色值(参考CSS Color Names,可取值/十六进制值/rgb值/rgba值),窗口为独占模式显示(占整个屏幕区域); 设置background为“transparent”,则表示窗口背景透明,为非独占模式。”
虽然没有弄明白什么事 独占模式,什么是非独占模式,对两种方法都进行了尝试,都不可以。
但是里面明明说了 窗口的空白区域 ,空白区域?是否可以理解为窗口中除了 原生控件的区域。 也就是说我们通过webview 来显示html并没有添加其他原生控件,所以在我们打开的窗口中,对于原生来讲都是空白区域。
2、既然弹出菜单也透明了,那就只剩下一种方法了,那就是在遮罩的webview中再打开一个新的webview来专门显示显示菜单部分。 效果是出来了,但是很丑,很丑。 尤其是新版本的弹出菜单样式下,看起来好像给页面贴了块膏药。
求官方快给个回复,非常感谢!
5 个回复
DCloud_heavensoft
此问题已过期,相关参考http://ask.dcloud.net.cn/article/154
McOrigin
这些问题还是没有好的办法解决吗?
卡卡啦
正好碰到这个问题,ios不支持透明真是蛋疼,android完美支持的啊,按理说这种需求还是很多的啊
小涵
目前我的解决方式是通过actionsheet显示的时候,让subpages隐藏,actionsheet隐藏的时候,subpages显示,当时会有一定的延迟,界面不是很美观。希望官方能给一些解答。谢谢。
1***@163.com
这个问题解决了吗