当前位置: 首页 > 知识库问答 >
问题:

窗滚动至不在phonegap中工作-替代解决方案或解决方案?

薛俊美
2023-03-14

我写了一个相当基本的js函数,它以编程方式自动将iPhone键盘完美地对准每一个聚焦的输入字段(如果你喜欢,可以随意使用它!)。对齐主要由window.scroll处理——这是一种标准方法,适用于任何浏览器视图,UIWebView除外,因此是phonegap/cordova(2.1)。所以我需要一个变通方法。

我的工作代码:

function setKeyboardPos(tarId) {

//programmatically: set scroll pos so keyboard aligns perfectly underneath textfield
var elVerticalDistance = $("#"+tarId).offset()["top"]; //i.e. 287
var keyboardHeight = 158;
var heightOfView = document.height; // i.e. 444
var inputHeight = $("#"+tarId).outerHeight();

var viewPortSpace = heightOfView-keyboardHeight; //i.e. 180
var verticalNewSroll = (elVerticalDistance+inputHeight)-viewPortSpace;
if(verticalNewSroll<0) { verticalNewSroll = 0; }
////

    //OK, all done lets go ahead with some actions
    $("#footer").hide(); //hide footer so that the keyboard doesn't push it on top of textfield
    $("#containingDiv").css("bottom","0px"); //remove bottom space for footer
    window.scrollTo(0,verticalNewSroll); //scroll! where the problem starts


}

工作在一切,但UIWebView,这是。正如我上面提到的,除了window.scroll之外,一切都有效(注:为了清晰起见,做了一些小的修改)。那么,有人知道替代解决方案,甚至是一个好的变通方法吗?

类似问题

window.scroll在IOS的phonegap中不工作

PhoneGap/科尔多瓦滚动到忽略

如何在Phonegap中添加垂直滚动

此外,上面还有三个类似的问题,在某种程度上指出了一个正确的方向。其中一位回答者提到使用css来实现这一点。有人能举一个更具体的例子吗?另一个人建议使用锚,但这不是一个很好的解决方案,并且与我的代码的其余部分不匹配。

共有3个答案

西门伟
2023-03-14

您只需要使用以下选项:

$(window).scrollTop(0);
宇文鸿畴
2023-03-14

您可以尝试使用动画和scrollTop属性滚动它看起来像这样:

$("html, body").animate({ scrollTop: "The value to scroll to" });

希望这能有所帮助。

孟福
2023-03-14

在做了一些研究之后,我意识到了这一点。scrollTo()确实可以在iOS6和phonegap 2.1中工作,但还有一些东西失败了;出于某种原因,我需要一份文件。高度在UIwebView中没有产生同等比例的属性,因此我不得不编写一个小的变通方法。我将在下面发布解决方案和整个代码,以供将来参考。

function setKeyboardPos(tarId) {

//programmatically: set scroll pos so keyboard aligns perfectly underneath textfield
var elVerticalDistance = $("#"+tarId).offset()["top"];
var keyboardHeight = 157;

if(isNativeApp()) { keyboardHeight = 261; } //I choose to change the keyboard height for the sake of simplicity. Obviously, this value does not correnspond to the actual height of the keyboard but it does the trick
var keyboardTextfieldPadding = 2;
var heightOfView = document.height;
var inputHeight = $("#"+tarId).outerHeight();

var viewPortSpace = heightOfView-keyboardHeight-keyboardTextfieldPadding; //180
var verticalNewSroll = (elVerticalDistance+inputHeight)-viewPortSpace;
if(verticalNewSroll<0) { verticalNewSroll = 0; }
////

//OK, all done lets go ahead with some actions
$("#footer").hide(); //hide footer so that the keyboard doesn't push it on top of textfield
$("#containingDiv").css("bottom","0px"); //remove bottom space for footer
window.scrollTo(0,verticalNewSroll); // perform scroll!

}

function isNativeApp() {

var app = (document.URL.indexOf('http://') === -1) && (document.URL.indexOf('https://') === -1);
if (app) {
    return true; // PhoneGap native application
} else {
    return false; // Web app / safari
}

}
 类似资料:
  • 我在一本书中发现了一个“用餐哲学家问题”的替代解决方案,用Java编写: 解决方案的文本是: 或者,我们可以给筷子贴上从e到N-1的标签。每个哲学家都试图先拿起编号较低的筷子。这基本上意味着每个哲学家都会先选择左边的筷子,再选择右边的筷子(假设你是这样给它贴标签的),除了最后一位哲学家会选择相反的方式。有了这个解决方案,哲学家不可能拿着大筷子而不拿着小筷子。这就阻止了循环的能力,因为循环意味着较高

  • 从codingBat解决这个问题 给定一个字符串,返回字符串中最大“块”的长度。块是相同的相邻字符的运行。 我试图解决它使用一个为循环如下: 它胜过了所有的案子,除了一个。有人能用一个for循环显示解决方案吗? 很抱歉这么晚才提到,但您不能使用正则表达式或集合框架中的任何东西。

  • 我正在尝试让Gradle Artifactory插件来解析工件。 我的build.gradle文件在下面,被替换为正确的主机名 然而,当运行此命令时,它无法解析工件。依赖行是从artiFactory生成的。 我打算使用“旧”发布机制。我的Gradle版本是2.0。 我尝试了一个带有maven2默认值和gradle布局的artifactory存储库。 堆栈跟踪可在以下位置找到:http://text

  • 1px 方案在 VUX 组件内应用广泛,包括 Grid, ButtonTab, XTable, XButton, Cell 等等。 利用 Flexbox + 1px 你可以实现复杂的宫格布局。 引入 在你项目的App.vue引入,组件内不需要再重复引入。 <style lang="less"> @import '~vux/src/styles/1px.less'; </style> 可用类名:

  • 问题内容: 关于部署Node.js应用程序,我看过很多教程,展示了它与Nginx并排部署的方法,或多或少有一些漂亮的技巧可以使两者一起工作(令人讨厌的东西,例如Nginx不支持WebSockets) 。这对我来说似乎有点复杂… 为什么每个人都进行这种设置?有Node.js时部署Nginx是否有任何优势?您不能使用Node.js提供静态文件吗? 我已经在Django中编写了许多应用程序,并且文档说您

  • java.lang.IllegalArgumentException:无法将io.appium.java_client.ios.ioselement字段screens.loginscreen.signinemail设置为org.openqa.selenium.remote.remoteWebelement$$enhancerbycglib$$62bef779 此外,我不能将WebElements转