Javascript 在页面加载时平滑滚动到所需的部分

Javascript 在页面加载时平滑滚动到所需的部分,javascript,jquery,html,css,wordpress,Javascript,Jquery,Html,Css,Wordpress,我已经创建了一个带有自定义分页功能的WordPress站点。在链接的末尾添加“最新”功能,以将中的最新帖子指向我的网站div。例如,如果用户单击第3页,它将加载该页,然后将其发送到div#latest。这项工作很好,但我希望它顺利滚动到div 我试着添加这个jQuery,但什么也没发生,它还是突然转到了这个部分 jQuery(document).ready(function(){ jQuery('a[href^="#"]').on('load',function (e) {

我已经创建了一个带有自定义分页功能的WordPress站点。在链接的末尾添加“最新”功能,以将中的最新帖子指向我的网站div。例如,如果用户单击第3页,它将加载该页,然后将其发送到div#latest。这项工作很好,但我希望它顺利滚动到div

我试着添加这个jQuery,但什么也没发生,它还是突然转到了这个部分

jQuery(document).ready(function(){
    jQuery('a[href^="#"]').on('load',function (e) {
        e.preventDefault();

        var target = this.hash;
        var $target = $(target);

        jQuery('html, body').stop().animate({
            'scrollTop': $target.offset().top
        }, 900, 'swing', function () {
            window.location.hash = target;
        });
    });
});

有更好的方法吗

我认为,当滚动动画生效时,有些资源没有被考虑在内,而且由于该功能按顶部偏移量工作-您必须确保在加载所有可能影响文档高度或元素偏移量的资源之后才使用它

ready
更改为
load

在大多数情况下,只要DOM层次结构完成,就可以运行脚本 已经完全建成。传递给.ready()的处理程序是有保证的 在DOM就绪后执行,因此这通常是最好的 放置以附加所有其他事件处理程序并运行其他jQuery代码

如果代码依赖于加载的资产(例如 图像的尺寸是必需的),代码应放在 而不是加载事件的处理程序

以下是我的功能:

$(function(){
    var target = "latest";
    $('html, body').animate({
        scrollTop: $('#'+target).offset().top
    }, 900,'swing');
    return false;
});

我认为,当滚动动画生效时,有些资源没有被考虑在内,而且由于该功能按顶部偏移量工作-您必须确保在加载所有可能影响文档高度或元素偏移量的资源后使用它

ready
更改为
load

在大多数情况下,只要DOM层次结构完成,就可以运行脚本 已经完全建成。传递给.ready()的处理程序是有保证的 在DOM就绪后执行,因此这通常是最好的 放置以附加所有其他事件处理程序并运行其他jQuery代码

如果代码依赖于加载的资产(例如 图像的尺寸是必需的),代码应放在 而不是加载事件的处理程序

以下是我的功能:

$(function(){
    var target = "latest";
    $('html, body').animate({
        scrollTop: $('#'+target).offset().top
    }, 900,'swing');
    return false;
});

我相信动画功能是在分配目标之前运行的。我会用承诺来解决这个问题

 var target = $.deferred;
 target.resolve("latest");
 $.when(target).done(function scrollTo(where){
    $('html, body').animate({
        scrollTop: $('#'+where).offset().top
    }, 900,'swing');
    return false;
});

我相信动画功能是在指定目标之前运行的。我会用承诺来解决这个问题

 var target = $.deferred;
 target.resolve("latest");
 $.when(target).done(function scrollTo(where){
    $('html, body').animate({
        scrollTop: $('#'+where).offset().top
    }, 900,'swing');
    return false;
});

这就是我仅使用javascript的方式:

if (window.location.hash) {
  var hash = window.location.hash;
  var element = document.querySelector(hash);
  
  if (element)
    element.scrollIntoView({
      behavior: "smooth",
      block: "nearest",
      inline: "start",
    });
}

这就是我仅使用javascript的方式:

if (window.location.hash) {
  var hash = window.location.hash;
  var element = document.querySelector(hash);
  
  if (element)
    element.scrollIntoView({
      behavior: "smooth",
      block: "nearest",
      inline: "start",
    });
}

工作完美。非常感谢。有没有办法让这种情况只发生在我的一个分页链接被点击并且页面被刷新时?现在,当用户第一次点击主链接进入页面时,它会滚动。效果非常好。非常感谢。有没有办法让这种情况只发生在我的一个分页链接被点击并且页面被刷新时?现在,当用户第一次点击主链接到达页面时,它会滚动。