【问题标题】:safari iOS - disable hiding address bar on input focusSafari iOS - 在输入焦点上禁用隐藏地址栏
【发布时间】:2012-01-21 09:49:59
【问题描述】:

有没有办法禁用在 Safari iOS 中点击输入框时发生的滚动?我的网站不太适合发生的滚动,实际上使网站的用户友好性降低。

我尝试过使用:

$('input,select,textarea').bind('focus',function(e) { 
window.scrollTo(0, 0);
});

但它只强制 safari 滚动到我的文档顶部,这意味着地址栏仍然“隐藏”。我只是不明白为什么如果 window.scrollTo(0, 1) 应该“隐藏”地址栏,为什么 window.scrollTo(0, 0) 不显示它?

同样,当 textarea 滚动/滑动时,是否有办法防止 safari 滚动文档?目前,如果我向下滚动页面并碰巧滚动到 textarea 字段,它会滚动整个页面。实际上,再看一遍,它似乎有时也会在输入字段上执行此操作。

【问题讨论】:

  • 如果这有什么不同的话,我正在使用 iscroll。

标签: javascript html ios safari


【解决方案1】:

当使用此代码进行输入时,我很幸运地阻止了地址栏的出现。这是垃圾邮件,但它是一个相当短暂的爆发,似乎可以解决问题。

var top = 1; // or your input box position
var spamStop = (new Date()).getTime() + 10; 
var scrollSpam_id = setInterval(function () {
    var t = (new Date()).getTime();
    if (t > spamStop) {
      clearInterval(scrollSpam_id);
    } else {
      window.scrollTo(0, top);
    }
}, 1);

【讨论】:

    【解决方案2】:

    我知道这是一个老问题,但以后可能会对某人有所帮助:)

    这就是我所做的,这样地址栏就不会显示在输入焦点上,而总是在检测到任何滚动事件时隐藏地址栏。

    var inputInFocus=false;
    $('input').focus(function(){
      inputInFocus=true;
    });
    $('input').blur(function(){
      inputInFocus=false;
      setTimeout("$(document).scrollTop(0);",0);
    });
    /*detect any scroll function and hide address bar*/
    $(window).scroll(function(){
      if(!inputInFocus){
    setTimeout("$(document).scrollTop(0);",200);
      }
    });         
    

    【讨论】:

    • 我认为这行不通。它在每次滚动事件后向上滚动,因此会阻止网站上的自然滚动。您的意思是在评论之后检查“if(inputFocus)”吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多