首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在iPhone上阻止<input>元素滚动屏幕?

在iPhone上阻止<input>元素滚动屏幕?
EN

Stack Overflow用户
提问于 2010-06-02 03:44:17
回答 5查看 46.6K关注 0票数 24

我的网页上有几个<input type="number">元素。我使用的是jQTouch,而且我尽量保持全屏;也就是说,水平滚动是不好的。每当我单击<input>元素时,页面都会向右滚动,在屏幕右侧显示一个黑色边框,并取消所有内容的中心。输入从屏幕的左侧偏移,并从页面中间的某个位置开始。

如何防止在焦点上出现这种滚动?

EN

回答 5

Stack Overflow用户

发布于 2011-09-17 07:44:25

我只是在这篇文章Stop page scrolling from focus中找到了这个问题的解决方案

只需将onFocus="window.scrollTo(0, 0);"添加到您的输入字段中,就完成了!(我在iPad上用<textarea><input type="text" />试过了,但我很确定它在iPhone上也能用。)

我担心滚动会显示为闪烁或其他东西,但幸运的是情况并非如此!

票数 18
EN

Stack Overflow用户

发布于 2011-10-31 10:15:31

下面是我是如何在iPhone (mobile Safari) (我使用jQuery)上解决这个问题的。

1)创建保存当前滚动位置的全局变量,该变量在用户每次滚动视区时都会更新

代码语言:javascript
复制
var currentScrollPosition = 0;
$(document).scroll(function(){
    currentScrollPosition = $(this).scrollTop();
});

2)将焦点事件绑定到有问题的输入域。聚焦后,让文档滚动到当前位置

代码语言:javascript
复制
$(".input_selector").focus(function(){
    $(document).scrollTop(currentScrollPosition);
});

太棒了!没有烦人的“焦点滚动”

在mind...make中要做的一件事是确保输入字段在键盘上方,否则将隐藏该字段。这可以通过添加一个if-子句来轻松缓解。

票数 7
EN

Stack Overflow用户

发布于 2011-11-17 08:53:52

我建议使用jQuery.animate()方法linked to above,而不仅仅是window.scrollTo(0,0),因为当输入元素被聚焦时,iOS会对页面偏移属性进行动画处理。仅调用一次window.scrollTo()可能无法与此本机动画的计时一起工作。

为了了解更多背景信息,iOS对windowpageXOffsetpageYOffset属性进行了动画处理。您可以对这些属性进行有条件的检查,以便在窗口发生变化时做出响应:

代码语言:javascript
复制
if(window.pageXOffset != 0 || window.pageYOffset != 0) {
  // handle window offset here
}

因此,为了扩展前面提到的链接,这将是一个更完整的示例:

代码语言:javascript
复制
$('input,select').bind('focus',function(e) { 
  $('html, body').animate({scrollTop:0,scrollLeft:0}, 'slow'); 
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2952782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档