为什么我的scrollTo动画不起作用?

问题描述 投票:0回答:3

当屏幕小于某个页面宽度时,我正在尝试激活一段javascript。为此,我在脚本中添加了一些媒体查询,如下所示:

 <script>
    var jmediaquery = window.matchMedia( "(max-width: 580px)" );
       if (jmediaquery.matches) {
       $("#navigation a").click(function() {
           var navigationId = $(this).attr("href");
           $("html, body").animate({scrollTop: $(navigationId).offset().top -60},"slow");
           return false;
       });
    }
</script>

但是,当我运行它时,动画既不起作用,也不起作用。为什么是这样?

编辑:JSFiddle

要扩展“不工作”,最终目标是仅在屏幕尺寸小于规定宽度时才使用scrollTo功能。当高于规定的宽度时,该功能不适用。我上面的代码似乎禁用了动画,无论屏幕大小如何都能正常工作。

编辑2:按照A.Wolf的建议添加了("html, body")

javascript jquery media-queries
3个回答
4
投票

将它包含在document.ready()条款中。控件可能尚未加载。

或者你可以尝试这样的事情:

$(document).ready(function () {
// scroll to error if present
if ($('div.error').length > 0) $("html, body").animate({ scrollTop: $(document).height() }, "fast");
});

编辑:我忘了添加上面的代码假定错误消息在页面的底部。


0
投票

可能希望在页面加载完成后运行此代码。

$(function(){
      /*
        your code here
      */
});

0
投票

这是解决我问题的所有答案和建议的组合。请注意,以下内容位于页面底部,就在</body>之前

<script type="text/javascript">
          $("#navigation a").click(function() {
       var jmediaquery = window.matchMedia( "(max-width: 480px)" );
       if (jmediaquery.matches) {
           var navigationId = $(this).attr("href");
           $("html, body").animate({scrollTop: $(navigationId).offset().top - 20},"slow");
           return false;
       } else {
           return false;
       }
   });
</script>
© www.soinside.com 2019 - 2024. All rights reserved.