【问题标题】:Scroll is Not Working Inside SetTimeout() with Delay滚动无法在 SetTimeout() 内工作并延迟
【发布时间】:2016-02-20 15:24:18
【问题描述】:

我有一个滚动到元素 sn-p 为:

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

这是完美的,但我需要在进入页面几秒钟后运行它(有延迟),所以我使用setTimeout() 来获取它,但现在页面跳转到部分(哈希)而不滚动或提示任何错误消息。

setTimeout(function(){ 
  $('html,body').animate({
     scrollTop: $(window.location.hash).offset().top
  },1000);   
}, 2000);

你能告诉我我做错了什么以及为什么这不能延迟吗?!

【问题讨论】:

  • 它是如何工作的? window.location.hash 返回 # 符号后的部分 url,scrollTop 属性需要整数值..
  • @philosophocat, $(window.location.hash) - jQuery 选择器,hash 这里类似于 #hash,所以这个在 jQuery 中用于 id 的有效选择器。然后只需获取offsettop 属性
  • 您能否提供可以重现您的问题的 sn-p 或 jsfiddle?
  • 我不认为html,body 是正确的。也许您的意思是html body(空格而不是逗号)?
  • @Grundy,如果你是对的,那很有趣,但不安全的解决方案:在没有任何检查的情况下依赖散列并不是一个好主意,它可能是问题的关键:元素错过了。

标签: javascript jquery


【解决方案1】:

尝试:

  $('html,body').delay( 2000 ).animate({
     scrollTop: $(window.location.hash).offset().top
  },1000);

其他选项是:

window.setTimeout(function(){
      $('html,body').animate({
         scrollTop: $(window.location.hash).offset().top
      },1000);
});

【讨论】:

  • thansks mkmnstr,我试过了,但结果与使用 setTimeout() 相同,没有错误消息!
  • @Behseini 刚刚添加了另一个选项,请检查并告诉我
猜你喜欢
  • 2012-06-08
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
相关资源
最近更新 更多