$ .ajax调用和获取/滚动到div的顶部

时间:2014-10-10 12:23:50

标签: javascript jquery html css ajax

我有一个由ajax调用填充的div。我猜不到我可以将scrollTop()滚动到div,因为dom的高度为0。

每次加载内容时,如何动态获取div的顶部并滚动(动画)到顶部?

    $.ajax({
        cache: false,
        url: 'content/'+u+'/this.content.php',
        data: { 'data-set-id' : t},
        type: 'post',
        success: function(e) {
            $('#div .content').fadeOut(function() {
                $(this).html(e).fadeIn();                  

            });
            // scroll to top of the populated div
        },
        error: function(e) {
            // error 
        }
    }); // ajax

5 个答案:

答案 0 :(得分:1)

您可以在成功回调中使用此代码,以便在加载内容后滚动到div的顶部。

var stop = $('#div .content').scrollTop(); $('html, body').animate({ scrollTop: stop }, 'slow');

我希望这有帮助!

答案 1 :(得分:0)

$("#div").animate({scrollTop: "0px"}); 

不起作用?

其他人偶然发现了这一点,这是一个小提琴:

http://jsfiddle.net/2z3fx3j5/1/

<body>
    <div>Hello</div>
</body>

$(document).ready(function() {
    $("body").animate({scrollTop: "1000px"}, 2000);
    $("body").animate({scrollTop: "0px"}, 2000);
});

div {
    bordeR: solid 1px black;
    height: 2000px;
}

答案 2 :(得分:0)

Mutation-Observers是处理手头问题的唯一方法,在页面底部添加以下代码:

<script>
var target = $("#div .content");
// Create an observer instance
var observer = new MutationObserver(function( mutations ) {
   mutations.forEach(function( mutation ) {
   var newNodes = mutation.addedNodes; // DOM NodeList
if( newNodes !== null ) { 
    // If there are new nodes added
      $('#div .content')animate({ scrollTop: 0 }, 'slow'); 
      }
   });    
});

// Configuration of the observer:
var config = { 
attributes: true, 
childList: true, 
characterData: true 
};

// Pass in the target node, as well as the observer options
observer.observe(target, config);
</script>

答案 3 :(得分:0)

你可以这样做:

success: function(e) {
            $('#div .content').fadeOut(function() {
                $(this).html(e).fadeIn();

             $('html, body').animate({
                          scrollTop: $(this).offset().top
              }, 1000);                  

            });

        }

答案 4 :(得分:0)

通过在$ .ajax

之前重置DOM的内容来解决它
$('#div .content').empty(); 
$.ajax({
    cache: false,
    // ...
});

$('#div .content').html('loading...');
$.ajax({
    cache: false,
    // ...
});

这个答案是2017年末七年:)