ios safari input fixed 軟鍵盤裡的愛恨情仇

來源:互聯網
上載者:User

標籤:onscroll   代碼   滾動   tis   一個   var   蘋果   輸入   name   

請看第一題:

  為什麼我的input擷取焦點後,被IME遮住了。

解決辦法:

源碼:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>    <script src="jquery-3.1.0.js"></script>    <style>        input{display: block}    </style></head><body><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"><input type="text" value="123456"></body><script>    //處理input輸入框被IME遮住    function inputIos(inputBox){        var inputF = $(inputBox).find(‘input‘);//找到對應的input        if(inputF == document.activeElement){            //擷取焦點時用喔            setTimeout(function(){                var inputIsNotInView = notInView(),                        Width = window.innerWidth,                        Height = window.innerHeight;                if(inputIsNotInView){                    if(Width != 750){                        var bottomAdjust = (Height - window.innerHeight - 88) + ‘px‘;                        $(inputBox).css(‘bottom‘,bottomAdjust);                    }else {                        var bottomAdjust = (Height - window.innerHeight - 88 - 432) + ‘px‘;                        $(inputBox).css(‘bottom‘,bottomAdjust);                    }                }            },600);        }else {            //失去焦點時用喔            var inputIsNotInView=notInView();            if(inputIsNotInView){                $(inputBox).css({‘opacity‘:0,bottom:0});                setTimeout(function(){                    $(inputBox).css(‘opacity‘,1);                },600)            }        }        //------------------------------        function notInView(){            var bottom = inputBox.getBoundingClientRect().bottom;            if (window.innerHeight - bottom < 0){                return true;            }else {                return false;            }        };    }</script></html>

  

一向如此任性,從不解釋為什麼,為什嗎?這是去年的代碼,所以,我也忘了……

 

請看第二題:

  今天一個辭職很久的前端姐姐問我一個在ios safari瀏覽器中為什麼我的css為position:fixed的header居然被軟鍵盤乾沒了。

  於是我花了將近半小時,借了一部傳說中的5s開始了實驗。

  於是,請看源碼:

    

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>因為愛情</title>    <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0,                                     user-scalable=no"> <style type="text/css">body{position:relative} header{position:fixed;top:0;left:0;background:yellow;} main{height:500px;overflow:scroll} </style></head><body><header id=‘head‘>我就是驕傲的頭部!我不動!</header><main style=‘‘><div style=‘background:red;height:300px;‘></div><div style=‘background:green;height:300px;‘></div></main><footer><input type="text" value=‘我就在這裡‘ id=‘input‘/></footer></body><script type="text/javascript" src=‘https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js‘></script><script type="text/javascript">$(‘#input‘).on(‘focus‘,function(){ $("#head").css("position", "absolute");window.onscroll=function(){var top = $(document).scrollTop();                  $("#head").css("top",top);}/* setTimeout(function(){},1500) */}).on(‘blur‘,function(){$(‘header‘).css({"position":"fixed",‘top‘:0,‘left‘:0})})</script></html>

  

因為是剛剛寫的,所以我有話說:

首先百度了也google了。發現是蘋果的bug,這個bug沒啥好解釋的,比較噁心就是了,他的軟鍵盤在input擷取焦點後彈起,然後就將我的"position":"fixed",硬生生掰成了"position", "absolute";這讓我這個直男怎麼可以接受!

你這個樣子,我只好將計就計了。

於是我就發現了捲軸高度,然後做一個捲軸監聽事件,然後這樣平滑的解決了header被頂出去的bug。當然,失去焦點的時候,我們的fixed還是可以正常使用的。

嗯,就這樣,我是宋宇,如果不小心協助到了你,我很榮幸。

ios safari input fixed 軟鍵盤裡的愛恨情仇

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.