Safari iOS - 在输入焦点上禁用隐藏地址栏

Posted

技术标签:

【中文标题】Safari iOS - 在输入焦点上禁用隐藏地址栏【英文标题】:safari iOS - disable hiding address bar on input focus 【发布时间】: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。 【参考方案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)”吗?

以上是关于Safari iOS - 在输入焦点上禁用隐藏地址栏的主要内容,如果未能解决你的问题,请参考以下文章

Safari:在输入时禁用表单提交? [复制]

在 iOS 6 上隐藏 Safari 的地址栏

输入焦点时隐藏ios设备上的键盘

iOS Safari 放大输入框

在 iOS Safari 中输入焦点后无法滚动的模式(固定元素)

在 safari 浏览器中,子元素不会成为父元素的焦点