【问题标题】:HTML5 jQuery .animate()({scrollTop: }); not working as intendedHTML5 jQuery .animate()({scrollTop: });没有按预期工作
【发布时间】:2026-01-15 10:20:20
【问题描述】:

我正在使用 XDK 编写我的第一个基于 HTML5 的应用程序。我已成功将它连接到一个简单的基于本地 .vb 的 Web 服务,用于模拟用户登录验证。成功登录后,我希望将新的 div 加载到视图中,以便我在应用中的导航在外观和感觉上保持一致。

从主页面执行的导航工作如下:

<ul class="list widget uib_w_3 d-margins" data-uib="app_framework/listview">
  <li class="widget uib_w_4" data-uib="app_framework/listitem">
     <a class="icon user" href="#login_page">Login
     </a>
  </li>
  <li class="widget uib_w_5" data-uib="app_framework/listitem">
    <a class="icon pencil" href="#register_page">Register
    </a>
  </li>
  <li class="widget uib_w_6" data-uib="app_framework/listitem">
    <a class="icon settings" href="#settings_page">Settings
    </a>
  </li>
  <li class="widget uib_w_7" data-uib="app_framework/listitem">
    <a class="icon paper" href="#acc_management_page">Acc Managment
    </a>
  </li>
  </ul><span class="uib_shim"></span>

上面的一切都很好,并且符合预期。单击/触摸登录按钮后,您将被带到login_page,并且您有一个usernamepassword 的输入字段。登录由 jQuery 脚本处理,该脚本通过 vb.net 网络服务验证信息。登录验证按预期工作。当用户输入他们的usernamepassword 时,他们单击登录按钮,onClick 事件调用 jQuery 脚本,如下所示:

function verifyInfo(){
    var uName=document.getElementById("l_username").value;
    var pWord=document.getElementById("l_password").value;           
    $.ajax(  
    {  
        type: 'POST',
        url: 'http://localhost/TestWebService/Verify.asmx/UserVerify',
        data: "{ \"username\":\""+uName+"\",\"password\":\""+pWord+"\"}",
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function(data) {
            if(data.d == "true"){
                alert("Correct Login Credintials");
            }
            else{
                alert("Incorrect Login Credintials");
            }
            alert(data.d);},
        error: function(data){alert('Failed on :'+data.d);}
    });            
}

为了实现我想要的功能,我在这个脚本中添加了以下部分:

function verifyInfo(){
    var uName=document.getElementById("l_username").value;
    var pWord=document.getElementById("l_password").value;           
    $.ajax(  
    {  
        type: 'POST',
        url: 'http://localhost/TestWebService/Verify.asmx/UserVerify',
        data: "{ \"username\":\""+uName+"\",\"password\":\""+pWord+"\"}",
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function(data) {
            if(data.d = "true"){
                alert("Correct Login Credintials");

                //Added functionality
                $('html,body').animate({
                    scrollTop: $("#acc_management_page").offset().top
                });
                //End of added functionality

            }
            else{
                alert("Incorrect Login Credintials");
            }
            alert(data.d);},
        error: function(data){alert('Failed on :'+data.d);}
    });            
}

如果我理解正确,这应该会触发动画调用以导航到适当的 div,在我们的例子中是 acc_management_page。这种导航方法在我的导航菜单中运行良好,但在脚本中不起作用。登录验证所有警报按预期触发,但 acc_management_page 永远不会滚动到。任何建议和/或解决方案将不胜感激。

谢谢!

【问题讨论】:

  • 我的问题是模糊还是难以理解?我可以做些什么来改善这个问题吗?
  • 这个极其样本的小提琴作品:jsfiddle.net/IrvinDominin/B4F98;你能举个例子吗?
  • @IrvinDomininakaEdward,我对你在声明中的意思感到困惑 Can you provide an example of your case? 不过感谢你的帮助。
  • 注意,应该是data.d == "true"
  • @Himal yessir 我在发帖后修复了那个,但是很好:)。

标签: javascript jquery vb.net html jquery-animate


【解决方案1】:

您是否尝试将“id”属性添加到锚标记。 jQuery 正在寻找 id 而不是 href。

【讨论】:

  • 我做了只是为了检查
  • 我可能发现了你的问题,它可能无法滚动的原因是页面太小,没有什么可以滚动的。我实现了一个小小提琴来向您展示我的意思,当您将 HTML 包装在一个包装器中并设置一个大的高度值时,它可以工作。 jQuery 也在寻找 id,而不是 href。 JSFiddle
  • 我今天会看这个。
  • PalinDrome555,我将以下设置为 id,&lt;div class="upage panel" id="acc_management_page" data-header="af-header-4" data-footer="none"&gt;。我还考虑了您对添加,1000); 的想法。两者都没有解决问题。我更进一步,将 animate 调用移至一个单独的函数,就像您所做的那样,只有在登录成功时才会调用该函数。我已验证成功登录时正在调用该函数,但动画调用仍未发生。
  • 您的控制台上是否出现任何错误。看看这里 - JSFiddle
【解决方案2】:

LOOK AT THIS Demo

像魅力一样工作:)

 $('.uib_w_4').click(function () {
alert('Now I will ask you if your login is ok ! to simulate Login Form');
if (confirm('Login with success !?')) {
    letsAnimate();
} else {
    // Do nothing!
    alert('Login Failed');
};
});
function letsAnimate() {
    $('html,body').animate({
        scrollTop: $("#acc_management_page").offset().top
    });
};

同时检查您的 CSS 文件,如果内容 div 设置不正确(高度、位置固定/相对等),可能会产生一些意外行为。

LOOK AT THIS Demo

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,但最后我找到了负责滚动的 div 类并设法使用 css 对其进行滚动(我发现 XDK 滚动的实现方式相同 - 我只是在重置它到未滚动的参数值):

    $('.afScrollPanel').css('transform', 'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)');
    

    【讨论】: