解決IOS下不支援fixed的問題

來源:互聯網
上載者:User

我們公司有一個頁面底部用到了fixed樣式,每當彈出鍵盤的時候,IOS下fixed就會走樣(據我所知android沒有該問題)。

為此之前我經過產品的同意做了簡單的處理(方法1)。

方法一:

focus的時候讓fixed塊position變為relative,這是最簡單的處理方法。

下面是我的小demo

<!DOCTYPE html><html><head>    <title></title>    <meta charset="utf-8">    <meta http-equiv="pragma" content="no-cache" />    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no,minimal-ui" />    <style>        * {            padding: 0;            margin: 0;        }        .input {            margin:10px 10px 400px 10px;            width: 200px;            height: 30px;            border: 1px solid #ccc;            display: block;        }        .next {            width: 100%;            height: 44px;            line-height: 44px;            background: orangered;            position: fixed;            bottom:0;            color:#fff;            text-align: center;        }        .pos-rel {            position: relative;;        }    </style>    <script src="../js/zepto.js"></script></head><body><section class="content">    <input class="input" type="text" />    <input class="input" type="text" />    <input class="input" type="text" />    <div class="next">        下一步    </div></section><script>    $(function() {        var isIOS = (/iphoneipad/gi).test(navigator.appVersion);        if (isIOS) {            $(".content").on("focus", "input", function () {                $(".next").addClass("pos-rel");            }).on("focusout", "input", function () {                $(".next").removeClass("pos-rel");             });        }    });</script></body></html>

方法二:

position:absolute;每次滾動的時候重新算位置。

下面是我的小demo,touch的時候作了隱藏處理,input focusout和window resize的時候作了fixed位置重新計算。

<!DOCTYPE html><html><head>    <title></title>    <meta charset="utf-8">    <meta http-equiv="pragma" content="no-cache" />    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no,minimal-ui" />    <style>        * {            padding: 0;            margin: 0;        }        .input {            margin:10px 10px 400px 10px;            width: 200px;            height: 30px;            border: 1px solid #ccc;            display: block;        }        .next {            width: 100%;            height: 44px;            line-height: 44px;            background: orangered;            position: absolute;            color:#fff;            text-align: center;        }        .pos-rel {            position: relative;;        }    </style>    <script src="../js/zepto.js"></script></head><body>    <input class="input" type="text" />    <input class="input" type="text" />    <input class="input" type="text" />    <div class="next">        下一步    </div></body><script>    var isIOS = (/iphoneipad/gi).test(navigator.appVersion);    var likeFixed = function() {        //解除綁定resize事件  以免進入死迴圈        $(window).unbind("resize", likeFixed);        var t = document.documentElement.scrollTop  document.body.scrollTop, fixed_height = 44, top;        //網頁可見高度加上捲軸高度  - fixed元素的高度        top = window.innerHeight+ t - fixed_height;        //設定fixed div的top        $(".next").css({"top": top+"px" });        //重新綁定resize事件        setTimeout(function() {            $(window).bind("resize", likeFixed);        }, 10);    }    $(function() {        if (isIOS) {            likeFixed();            function touchstart(event) {                $(".next").css("opacity",0);            }            function touchend(event) {                $(".next").css("opacity",1);            }            //touch的時候隱藏            document.addEventListener("touchstart", touchstart, false);            //滾動後重新設定fixed div的位置            window.onscroll = likeFixed;            //touch後顯示            document.addEventListener("touchend", touchend, false);        }        //所有input blur時重新計算位置,相容chrome        $("body").on("focusout", "input", likeFixed);    });</script></html>

以上是我的處理方法,也許存在不足之處,歡迎大家提出寶貴意見,一起交流。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.