网页怎么判断 iPhone 或 iPad 已经弹出虚拟键盘,并得到当前页面的可视区域? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
feikeq
V2EX    问与答

网页怎么判断 iPhone 或 iPad 已经弹出虚拟键盘,并得到当前页面的可视区域?

  •  < href="Javascript:" Onclick="downVoteTopic(109857);" class="vote">
  •   feikeq 2014-04-24 16:19:40 +08:00 12067 次点击
    这是一个创建于 4254 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在一个页面里有一个输入表单用到了position:fixed实现固定在底部显示,
    但当点击文本输入框时ios会自动弹出虚拟键盘,
    这样在safari里这个表单还将固定在底部,这样就被键盘给挡住了(永远看不到输入框)。
    有时候在弹出键盘时这个表单却往上移到了可视屏中间位置(与弹出的键盘还有一定距离),
    看着好凌乱的感觉...

    关键弹虚拟键盘时网页都不触发任何事件,我什么都捕获不到..scroll和resize都不激活。。。
    但其实网页高度和滚动条都变化了。。
    键盘弹出后 document.body.clientHeight 高度没有变化..

    有没有好办法捕获到键盘弹出后可视屏幕的高度?
    CSS和JS实现均可,谢谢!
    4 条回复    1970-01-01 08:00:00 +08:00
    feikeq
        1
    feikeq  
    OP
       2014-04-24 16:40:26 +08:00
    @media screen and (max-height: 460px) 用这种CSS也没效果,因为好像屏幕高度就是没有变化,而只是贴了个键盘在页面上。。。
    razios
        2
    razios  
       2014-04-24 17:16:30 +08:00 via iPhone
    用文本输入栏获取焦点触发js
    feikeq
        3
    feikeq  
    OP
       2014-04-25 10:35:48 +08:00
    @razios 我也用这方法试了 $(document).on("focus","input, textarea, select", function( e ) {

    //但最主要是不知道弹出键盘后可视区域的大小,所以不好定位这个div为fixed的位置..
    //并且不横屏竖屏不可视区域不一样ipad和ipone4区域也不一样。。。怎么办?
    return "万分感谢!!";
    };
    feikeq
        4
    feikeq  
    OP
       2014-04-25 10:55:03 +08:00   1
    有关position:fixed的bug在另一篇博文中《移动端web页面使用position:fixed问题总结》也有总结。

    另外强调一点,不要在Fixed区域中直接使用input或textarea元素。在fixed元素中的input获取焦点之后,弹出软键盘会带来很多额外的问题,如:

    在iOS下软键盘弹出,fixed定位会出问题;
    在Android下软件盘弹出,可能会导致输入区域被遮挡;
    点击input弹出一个新视图来完成后续输入,是一种比较好的解决方案,下图是一个基于iScroll的页面结构实现:

    https://github.com/maxzhang/maxzhang.github.com/issues/2
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4737 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 01:11 PVG 09:11 LAX 17:11 JFK 20:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86