zoukankan      html  css  js  c++  java
  • 移动端设置fixed布局的问题解决

    最近写移动端,遇到一个问题就是用fixed属性布局的时候由于手机的原因会出现很多问题,比如说手机端底部固定一块,然后里面有输入框,(类似于手机QQ或者微信底部的输入框一样的布局)这个时候在调用软键盘的时候会出现软键盘遮挡输入框的情况,如图

    这是正常的情况下,下面是唤起软键盘的图片

    很明显挡住了一半的输入框,这个时候可以用以下方式解决(在这里要感谢叶小钗的博客,是从他那里学来的)

    虚拟键盘导致fixed元素错位

    fixed元素一定会伴随虚拟键盘的出现,但是虚拟键盘只是“贴”在了viewport上,表面上不会对dom产生“任何”影响,但是这个时候fixed元素表现却变得怪异起来,会错位。

    应用层面解决问题方案是,虚拟键盘弹出时将fixed元素设置为static,虚拟键盘消失时候设置回来。

    由于虚拟键盘出现并未抛出事件,而检测scroll或者resize事件,皆会有一定延迟,会出现闪烁现象,所以现有最好的方案是setinterval定时器监控当前获取焦点元素是否为文本元素,若是是的话便需要处理,如此便可解决fixed元素错误问题。

    fixed元素滑动惯性平滑度

    我们常常遇到这种产品需求,tab标签栏开始固定,当滚动向下超过该标签栏后便会变成fixed元素,一直出现在头部,这样的需求在电脑上没有问题,但是在iPhone5s以下的手机常常会出现小范围错位或者快速移动大范围错位的问题。

    这个时候我们可以引起reflow迫使浏览器重绘以解决这个问题,这里推荐一个奇怪的hack写法:同时设置三个image元素的src属性,便可以全范围解决该难题,  该方案被团队证实并得到应用。

    //三图片src,引发reflow,处理fixed方案惯性问题

    var el = this.els.ctlc.find('img');

    $(el[0]).attr("src", 'http://res.m.ctrip.com/html5/Content/images/144.png');

    $(el[1]).attr("src", 'http://res.m.ctrip.com/html5/Content/images/144.png');

    $(el[2]).attr("src", 'http://res.m.ctrip.com/html5/Content/images/144.png');

    另外,上图中的tab标签下面的蓝线具有动画,但是在小米或者三星手机上可能不会移动,这个时候也可以动态引起reflow解决这个BUG。

    其它

    l  CSS选择器尽量使用id与class,避免过度层叠

    l  避免使用数值,比如:border: none不会引起渲染,而boder: 0会

    l  动画时候让元素脱离文档流,以免导致大量reflow

    l  避免逐条修改DOM样式,改以className实现同样功能

    l  操作DOM时将display设置为none,因为这种元素不会影响渲染,或者操作fragment对象取代操作显示在页面上的DOM

    l  避免将获取DOM样式属性的操作写在循环中,可能引起重复reflow

    以上解决了使用fixed后产生的遮挡和平滑滑动的问题。亲测有效!

  • 相关阅读:
    19.2.15 [LeetCode 80] Remove Duplicates from Sorted Array II
    19.2.15 [LeetCode 79] Word Search
    19.2.15 [LeetCode 78] Subsets
    19.2.15 [LeetCode 77] Combinations
    19.2.15 [LeetCode 76] Minimum Window Substring
    19.2.13 [LeetCode 75] Sort Colors
    19.2.13 [LeetCode 74] Search a 2D Matrix
    19.2.13 [LeetCode 73] Set Matrix Zeroes
    19.2.13 [LeetCode 72] Edit Distance
    19.2.13 [LeetCode 71] Simplify Path
  • 原文地址:https://www.cnblogs.com/woshikay/p/4884611.html
Copyright © 2011-2022 走看看