动画滚动顶部在 Firefox 中不起作用

2024-01-09

这个功能运行良好。它将主体滚动到所需容器的偏移量

function scrolear(destino){
    var stop = $(destino).offset().top;
    var delay = 1000;
    $('body').animate({scrollTop: stop}, delay);
    return false;
}

但在 Firefox 中则不然。为什么?

-EDIT-

为了处理接受的答案中的双触发器,我建议在动画之前停止该元素:

$('body,html').stop(true,true).animate({scrollTop: stop}, delay);

Firefox 将溢出置于html级别,除非特别设计以不同的方式表现。

要使其在 Firefox 中工作,请使用

$('body,html').animate( ... );

工作示例 http://jsfiddle.net/4etct/

CSS 解决方案是设置以下样式:

html { overflow: hidden; height: 100%; }
body { overflow: auto; height: 100%; }

我认为 JS 解决方案的侵入性最小。


Update

下面的很多讨论都集中在以下事实:动画scrollTop两个元素的组合将导致回调被调用两次。浏览器检测功能已被建议,随后又被弃用,其中一些功能可以说是相当牵强的。

如果回调是幂等的并且不需要大量的计算能力,那么触发它两次可能完全不是问题。如果回调的多次调用确实是一个问题,并且如果您想避免功能检测,则强制回调仅从回调中运行一次可能会更直接:

function runOnce(fn) { 
    var count = 0; 
    return function() { 
        if(++count == 1)
            fn.apply(this, arguments);
    };
};

$('body, html').animate({ scrollTop: stop }, delay, runOnce(function() {
   console.log('scroll complete');
}));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动画滚动顶部在 Firefox 中不起作用 的相关文章

随机推荐

  • Autofac 和 ASP.NET Web API ApiController

    我已经在 MVC 3 中使用 autofac 一段时间了 并且很喜欢它 我最近将一个项目升级到 MVC 4 除了 Web Api ApiController 之外 一切似乎都正常工作 我收到以下异常 An error occurred wh
  • 根据 pom 中的活动配置文件更改包装

    我有一个用 Maven 编译的项目 我在 pom xml 中声明了不同的配置文件 对于其中一些配置文件 我更喜欢构建战争 而对于其他配置文件 我更喜欢罐子 我用来手动编辑 pom xml 文件并将打包变量更改为
  • iOS:Testflight 没有可供外部测试人员使用的版本

    我正在使用 testflight 作为我的应用程序的 Beta 测试工具 我已上传构建 但邀请已成功发送给内部测试人员 但没有邀请发送给外部测试人员 Below image shows both the groups has been in
  • 未捕获的引用错误:__importDefault 未定义

    我是角度新手 我在我的中遇到这个错误index component ts file 未捕获的引用错误 importDefault 未定义 附上错误截图 https i stack imgur com xUKWA png 我从 8 升级到 9
  • React Native - 具有动态高度子项的 FlatList

    我一直在努力将类似砖石的风格融入我的应用程序中 我尝试应用react native masonry包裹 但是您必须传递图像网址 我正在尝试实现相同的样式 但渲染文本而不一定渲染图像 到目前为止 我已经解决了FlatList 但这是我所能得到
  • 在 D3 强制布局节点标签中插入换行符

    因此 我正在使用力定向图 并且我已将鼠标悬停在节点上的 text 更改为数据中的另一个文本 我的代码如下所示 script var data nodes name YHO full name Yahoo type 1 slug www ya
  • Silverstripe 条件验证

    我有一个包含多个操作的表单 例如创建订单并创建报价 根据单击的操作 我需要应用不同的验证 例如报价不需要订单参考号 这在 Silverstripe 中可能吗 如果不是的话我该怎么办呢 public function Order reques
  • C# 模拟单元测试 GraphServiceClient

    我在使用 Moq 和 xUnit 在 C 中编写单元测试时遇到问题 在我的服务中 我有以下代码 var options new TokenCredentialOptions AuthorityHost AzureAuthorityHosts
  • 获取页面上的当前类别名称,该页面按类别和自定义元键过滤帖子

    我成功地使用自定义插件 和meta key 按喜欢 计数 过滤了我的所有WordPress帖子 在自定义页面模板中 这也让我可以使用以下内容过滤特定类别中最喜欢的帖子 if isset GET category args array met
  • 如何终止由 Ant 启动的失控 Java 进程?

    如果我从 ant 脚本启动一个分叉的 java 进程并终止该 ant 进程 它不会终止该 java 进程 无论是从 IDE 还是从命令行运行都是如此
  • 如何在 ms access vba 中运行追加查询作为事务的一部分

    我对编程非常陌生 一直在 MS Access 2016 上构建我公司的库存数据库 到目前为止 我已经能够很好地使用宏 但我正在尝试运行由追加和删除查询组成的事务我正在努力处理 vba 代码 我想出了如何在查询因错误而失败的情况下运行事务 但
  • html5和xamarin有什么区别?

    我是一名 C NET 开发人员 我想开发可以在 iPhone Android 和 Windows Phone 上运行的移动应用程序 到目前为止 我发现www xamarin com提供了一个可以使用C 开发iphone和android的解决
  • 如何禁用复选框抖动

    我在 ListTile 中使用 Checkbox 如下所示 ListTile leading Checkbox value isChecked onChanged v setState isChecked isChecked title T
  • 正则表达式查找代码中的空注释

    我正在寻找一个正则表达式 它只能找到空的java注释 如下所示 Eclipse 创建这些时 例如生成序列版本 ID 还有另一个thread https stackoverflow com questions 1657066 java reg
  • angularjs 过滤器不适用于 $http

    我是 angular js 的新手 但我不知道如何制作 filter xxx 处理通过 http 服务生成的数据 在下面的代码中 我根本无法让过滤器处理 http 生成的数据 当我在输入框中键入内容时 它根本不执行任何操作 但是 如果我在
  • 如何在 PHP 中按日期对文件进行排序

    我目前有一个脚本 它允许我输出同一目录中的文件列表 输出显示名称 然后我使用filemtime 函数显示文件修改日期 如何对输出进行排序以显示最新修改的文 件 这就是我现在所拥有的 if handle opendir while false
  • 使用 NextJS 动态添加变量到外部 js 脚本

    我里面有这个外部 hotjar 脚本 static js of my nextjs应用 function h o t j a r h hj h hj function h hj q h hj q push arguments h hjSet
  • 端口 443 上出现 SSL 错误,页面未显示并导致错误 404

    我最近必须找到一种方法来为我的域名获取 SSL 证书 正如您可能知道的那样 Facebook 要求在 10 月 1 日之前提供此证书 因此 我在我的服务器上签署并安装了startssl 证书 现在我的问题是 当我尝试访问我的 https 站
  • 将 XML 发送到 Android 中的 Web 服务

    我想将其作为 XML 发送到我的 Web 服务 我该怎么做呢
  • 动画滚动顶部在 Firefox 中不起作用

    这个功能运行良好 它将主体滚动到所需容器的偏移量 function scrolear destino var stop destino offset top var delay 1000 body animate scrollTop sto