wenJonSnow/snowCode

移动端h5 小问题

Opened this issue · 0 comments

问题:android手机在 有输入框和定位(absolute/fixed)  ,每次点击输入框,弹出默认键盘,出现定位元素顶上来的情况,原因是android手机页面高度,会随着输入键盘弹出而变化。
  解决: **是  window.onresize
     if (isAndroid) {

        let client_h = document.documentElement.clientHeight;

        window.onresize = function () {

            let new_client_h = document.documentElement.clientHeight;

            if (new_client_h < client_h) {

                CustombtnBox.style.display = 'none';
            } else {
                CustombtnBox.style.display = 'flex';
            }
        }
    }
  问题:android手机软键盘弹起挡住输入框的问题,原因是android手机页面高度会随着软键盘的弹起而变化,iOS不会。
  解决:** 每次输入框获取到焦点时 判断是否是android手机, 给最外层(div或body) 重新赋值高度。(但是这个方法 会带来新的问题,就是点击软键盘下一步时,页面高度没变回来,有一部分页面就没显示)
      input.onfocus=function(){
          if(isAndroid){// 自己写 判断是否是android手机的逻辑
               let height = window.innerHeight   //获得当前页面高度 赋值给最外层(div或body)
                document.getElementById('CustomizeBuy').style.height = height + 'px';
          }
      }
  问题:页面不能滚动到顶部时
  解决:   
  const oCustomizeBuy = document.querySelector('#CustomizeBuy');
    if (oCustomizeBuy) {
        if (oCustomizeBuy.scrollTo) {
            oCustomizeBuy.scrollTo(0, 0);// 只有iOS 支持
        } else if (typeof oCustomizeBuy.scrollTop !== 'undefined') {
            oCustomizeBuy.scrollTop = 0; // 只有 安卓支持
        }
    }
  问题:在部分安卓手机,比如vivo  margin-right/left  无效。
  原因:和样式布局有关。
  解决:用flex 布局 display:flex;flex:1;
  
  问题:如果你的元素需要滚动一般设置成 overflow-x: scroll;(左右)或 overflow-y: scroll;(上下);这时在iOS手机上会出现滑动不流畅的问题。
  解决:在滚动的整个元素下面加  -webkit-overflow-scrolling: touch;  
  
  问题:有时在iOS手机上点击一个元素时,这个元素默认会高亮显示。
  解决:-webkit-tap-highlight-color: transparent; 
  
  问题:在iOS手机上下(左右)滑动时,会出现默认的滚动条,如果你不需要它。一般android上不出现默认滚动条。
  解决:在滑动的整个元素上加
      ::-webkit-scrollbar {  
           display: none;    
        }
       注意:设置成 width:0;iOS上 无效
  
  问题:不想元素换行
  解决:white-space: nowrap; 
      
  问题:字多时 超出元素宽度 让多余的子用... 代替
  解决:text-overflow: ellipsis; 
   	   white-spacenowrap;    
       overflow: hidden;
       
  问题:新的oppo曲面屏   在react 里面 出现不支持onTouchStart事件的 情况
  解决:改为onClick 就行了   
iOS 移动端小问题

 1   iOS 11版本以上 有弹出层时   input 会出现 光标错位的现象 原因是 弹出层 用了   fiexd 定位。(iOS 10<= 一般没问题)
 方法是:直接改用absolute 定位。

 2  iOS 移动端 input 标签的readonly 属性  为true  点击 input 仍然可以 出现光标。        
 方法:最好改用disabled。
 
 3  Firefox还是提供了一些新事件 pageshow  /pagehide 这2个事件的目标是document,但必须将其事件处理程序添加到window。
移动端iOS上下头部底部适配

一般iOS上 在头部底部设置 fixed 布局时,特别是有input输入框时容易出现上下部分顶上来或消失的情况。
方法:
   1,在input 元素 focus和blur  对fixed 的元素 进行 定位切换:
   focus聚集时:position:'absolute'
   blur失去焦点时:position:'fixed'
   top/bottom:需要适度调整;
   
   2,把整个页面分为上中下3部分,上一般为fixed的头部, 下为fixed的确认或输入框的底部,
   中为absolute,内部元素可以上下滚动,并设置top/bottom /height.
   示列代码如下
	 header, footer, main {
             display: block;
		}
	 header {
             position: fixed;
             height: 50px;
             left: 0;
             right: 0;
             top: 0;
		}
	 footer {
             position: fixed;
             height: 34px;
             left: 0;
             right: 0;
             bottom: 0;
	}	

	 main {
             /* main绝对定位,进行内部滚动 */
             position: absolute;
             top: 50px;
             bottom: 34px;
             /* 使之可以滚动 */
             overflow-y: scroll;
             /* 增加该属性,可以增加弹性 */
             -webkit-overflow-scrolling: touch;
	 }

	 main .content { /*content是主要内容部分*/
             height: 2000px;
	 }

  3,把整个页面分为上中下3部分,都为absolute的布局。建议html/body 元素设置height:100% 
  
    上下absolute元素布局为:
        top/bottm/left:'0px';
    中部absolute的元素布局:
        height:cale(100% - 上下部分的高);/*减掉上和下高度*/
        top:上的height;
        left:0;
        overflow-y: scroll;
        -webkit-overflow-scrolling: touch;