iOS iPad键盘打开时固定位置中断

col*_*d01 64 safari mobile-safari

当我点击"搜索表单"文本框字段时,修复了标题上的位置中断.它只是从页面顶部分离(当它固定在那里),并在虚拟键盘打开时开始浮动页面的中间位置.

正常:

在此输入图像描述

破碎:

在此输入图像描述

mar*_*rds 18

我非常喜欢这个解决方案(http://dansajin.com/2012/12/07/fix-position-fixed/).我把它打包成一个小jQuery插件,所以我可以:

  • 设置哪个父级获取该类
  • 设置适用的元素(不要忘记"textarea"和"select").
  • 设置父类名称
  • 允许它被链接
  • 允许它多次使用

代码示例:

$.fn.mobileFix = function (options) {
    var $parent = $(this),

    $(document)
    .on('focus', options.inputElements, function(e) {
        $parent.addClass(options.addClass);
    })
    .on('blur', options.inputElements, function(e) {
        $parent.removeClass(options.addClass);

        // Fix for some scenarios where you need to start scrolling
        setTimeout(function() {
            $(document).scrollTop($(document).scrollTop())
        }, 1);
    });

    return this; // Allowing chaining
};

// Only on touch devices
if (Modernizr.touch) {
    $("body").mobileFix({ // Pass parent to apply to
        inputElements: "input,textarea,select", // Pass activation child elements
        addClass: "fixfixed" // Pass class name
    });
}
Run Code Online (Sandbox Code Playgroud)

编辑:删除不必要的元素

  • 好的修复,投票.不幸的是,这也使滚动深度跳到顶部,因此在标题中有一个输入的长滚动页面(如OP的问题所示)将是一个废话体验,因为你将失去滚动深度. (3认同)
  • 借调@typeoneerror的注意事项:这样可以解决问题,但除非你跟踪偏移量并找到防止滚动的方法,否则对于长滚动项目上的固定位置导航栏来说这是有问题的.(这是一个很好的解决方案.对于这个常见用例来说只是有问题.) (3认同)

bas*_*rat 10

在我们的例子中,一旦用户滚动,这将自行修复.所以这是我们用来模拟滚动的修复:

$(document).on('blur', 'input, textarea', function () {
    setTimeout(function () {
        window.scrollTo(document.body.scrollLeft, document.body.scrollTop);
    }, 0);
});
Run Code Online (Sandbox Code Playgroud)


pra*_*ala 5

基于对这个问题的良好分析,我在 html 和 css 的 body 元素中使用了它:

html,body{
    -webkit-overflow-scrolling : touch !important;
    overflow: auto !important;
    height: 100% !important;
}
Run Code Online (Sandbox Code Playgroud)

它对我来说非常有用。