HTML5 jQuery .animate()({scrollTop:});不按预期工作

时间:2014-07-29 14:36:20

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

我正在使用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 Web服务验证信息。登录验证按预期工作。用户输入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永远不会滚动到。任何建议和/或解决方案将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我有同样的问题,但最后我找到了负责滚动的div类并设法使用css scrollTop它(我发现XDK滚动以相同的方式实现 - 我只是重置它to unscrolled params value):

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