解决IOS下不支持fixed的问题

我们公司有一个页面底部用到了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>

以上是我的处理方法,也许存在不足之处,欢迎大家提出宝贵意见,一起交流。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索input
, function
, next
, position
, px
, touchstart
, touchend
, Fixed
window.resize
移动端ios不支持fixed、ios不支持fixed、ios微信不支持fixed、ios fixed兼容问题、fixed ios兼容性问题,以便于您获取更多的相关知识。

时间: 2024-10-29 10:03:56

解决IOS下不支持fixed的问题的相关文章

解决IE6下不支持 png24的透明图片问题

常用的两种解决方案: 第一:使用IE滤镜解决 关键代码: css代码 _background:none;_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="http://www.update8.com/Web/CSS/css/images/png24.png",sizingMethod="crop"); 有几点注意点: 1:这里对应的src地址一定是相对于html页面的不是相对于css路径的

【原】使用iScroll.js解决ios4下不支持position:fixed的问题

一直折腾position:fixed在ios和android的使用,而事实上这么上流的ios4系统居然不支持position:fixed,幸运的是苹果公司在ios5系统修复了这个bug,比较理想的解决方案是让所有用户把系统升级到ios5及以上版本,这种想法在国外还好,在国内环境下,因为越狱而不想去升级手机的人很多,如果强迫用户去升级,那可能会把你的产品KS了.而你也不可能跟你老板说ios4什么不兼容那个属性啊,让用户升级啊!老板看到的是结果,你做不出来,别人怎么做得出来呢,这样你老板可能会对你的

JQuery.validate在ie8下不支持的快速解决方法_jquery

一.在ie8下回有问题的代码 1.JQuery.validate验证框架是通过页面form表单提交验证<input/>标签中输入是否符合自己的规则的 <form id="cardTypeFrm"> <table width="100%" cellspacing="0" cellpadding="0" class="table_pzh"> <tbody> <

iOS 下实现解压缩

就在今天,终于把两种主流的压缩格式给搞定了..  途中真的碰到不少坎坷,百度谷歌了无数篇,不过还是要谢谢网上的牛人啊.. 在此,做一些记录,以及贡献一些资源. 给那些需要在IOS下 需要进行解压相关需求的孩纸一些帮助. 在开始之前,先列举一下对我有帮助的链接.谢谢这些博主了! 1:rar解压缩的源代码出处: https://github.com/ararog/Unrar4iOS 2:这个帮我解决了rar解压缩无法生成目录功能缺失以及乱码问题: http://stackoverflow.com/q

解决ie6下png图片透明的完美方法

看了很多网上有关解决ie6下png图片透明的文章,很多都是只解决了页面上插入png图片或css背景调用,而且都没用透明效果,在ie6下仅实现了去除灰底色.今天特下载网上一些优秀页面进行分析整合,整理了两套相当有效的解决方案,可以同时支持插入图片或css背景调用问题. 更新下载版本说明: 1."ie6-png-2(filter)"文件中,滤镜控制调用背景透明和js控制插入图片透明不能同时出现,这样在不同浏览器下会有问题,可以分开使用: 2."ie6-png-1(js)"

利用uniread 解决 Linux下的SQL*Plus 命令行历史回调功能

解决|命令行 利用uniread 解决 Linux下的SQL*Plus 命令行历史回调功能 作者: Fenng 大家知道, 在 Windows 平台 命令行中的 SQL*Plus 有命令行历史回调的功能,在SQL*Plus工具下面,可以利用键盘的"向上向下"箭头键对命令行的进行回调.而在Linux上则没有该功能(虽然 Shell 可以做到这一点,但是 SQL*Plus 不可以). 而该功能对于CLI爱好者来说几乎是不可缺的,不知道为什么 Oracle 不把这个功能加进来.不得而知了.

怎样解决Win8下联想一键影音不起作用

  每个系统的功能都不一样,你在Win7的系统上可以使用这个功能,也许你在Win8系统就不能使用呢?那你也的要看支不支持的.这不有用户就反应了,他在Win7下使用一键影音功能时,会有模式状态条显示,而在Win8系统上一键影音按钮不起作用.看不到提示条,这是怎么回事呢?下面就和大家说一下如何解决Win8下联想一键影音不起作用的问题. 解决方案如下: 1.首先需要确认,是否已经在Win8下安装过了一键影音功能,可检查卸载程序列表中是否有一键影音程序,如下图: 或检查任务栏通知区域程序图标是否存在,如

高效的 iOS 应用版本支持方法

本文讲的是高效的 iOS 应用版本支持方法, 极少数应用程序很"奢侈"的只支持最新版本的 iOS. 设置一个较低的部署目标以及基于特定 iOS 版本的代码分支通常是很有必要的.虽然苹果公司的信息有些矛盾,还是有各种办法来完成这个.最近在这条 tweet上看到有人警告说,不要这样做: #define IsIOS7 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]>=7) GitHub

【转】解决win7下重装winXP 系统启动选择菜单消失 问题

解决win7下重装winXP 系统启动选择菜单消失 问题 帮了一个哥们重装了winXP 发现居然他的双系统选择菜单不见了 呵呵 发现从来没有遇到过这种情况 就上网找了一下 大多数都说改系统盘里面的boot.ini的配置信息就好 可是本着大多数不一定是正确的观念 又去Google了一下 才得知真相 从Vista以上的操作系统开始 系统的启动不再依靠boot.ini来运行 这里先普及一下这个系统文件的知识 Boot.ini 是什么 ==================================