【问题标题】:Velocity.js - stopping animation callbackVelocity.js - 停止动画回调
【发布时间】:2014-09-15 14:05:58
【问题描述】:

我有这个代码:

$(window).scroll(function () {
    if ($(this).scrollTop() > ($animate.headline.height() + 100)) {
        $animate.header.velocity({height: "50px"}, { queue: false });
    } else {
        $animate.header.velocity({height: "100px"}, { queue: false });
    }
});

如果用户从顶部滚动 xxx 像素,则动画应该开始,并且效果很好。

我刚刚注意到一件让我很困扰的事情 - 每次滚动时,速度动画都会检查 scrollTop,所以当我滚动时整体动画并不流畅,因为在触发动画之前,函数正在检查滚动。

有没有其他方法可以让它变得流畅?

例子:

http://codepen.io/anon/pen/bIkqF

【问题讨论】:

  • 有一个可以用来查看性能的最小示例吗?
  • 这里是示例:codepen.io/anon/pen/bIkqF 在触发动画时尝试滚动(很多)

标签: javascript jquery animation velocity.js


【解决方案1】:

您更喜欢 CSS 方法吗?

将标题的 css 设置为:

-webkit-transition: all 0.5s;
position:fixed;
top:0;
left:0;

为所需的高度添加一个新类:

.shrink{
    height:50px;
}

在你的 js 中切换类:

var header = $('.header');
  $(window).on('scroll', function () {
      if ($(this).scrollTop() > (header.height() + 20)) {
          header.addClass('shrink');
      } else {
          header.removeClass('shrink');
      }
  });

修改转场的 seconds 属性以获得更平滑的效果。

通过这种方式,GPU 完成了繁重的工作,并且类切换对性能的影响可以忽略不计。 Demo

【讨论】:

  • 不要忘记限制你的scroll处理程序(例如,参见ejohn.org/blog/learning-from-twitter,来自John Resig - jQuery的创建者),这将带来更好的性能又来了!
  • @SamuelCaillerie 检查文章的日期,虽然我同意您应该限制滚动处理程序,但在这种特殊情况下不需要它,CSS 处理动画而不是 JS
  • 我不同意,因为:1. 你调用了很多 jQuery 对象(顺便说一句,你应该缓存 $(this)$(".header")) 2. 你在回调中有一些不可忽略的处理(这是纯粹的 - js 除了 CSS 部分) 3. 还有一些用户使用旧电脑/网络浏览器/ ...他们也需要这种优化(即使文章有点旧但总是最新的!!! )
  • @SamuelCaillerie 缓存选择器让我忘记了,我现在将对其进行编辑,为建议欢呼。我现在将优化代码。
【解决方案2】:

你应该限制你的支票到某个图书馆,比如 Ben Alman 的图书馆:https://raw.githubusercontent.com/cowboy/jquery-throttle-debounce/v1.1/jquery.ba-throttle-debounce.min.js

查看此文档页面:http://benalman.com/projects/jquery-throttle-debounce-plugin/

对于您的示例,您可以像这样使用它:

$(window).scroll($.throttle(250, checkTop));

function checkTop() {
    if ($(this).scrollTop() > ($animate.headline.height() + 100)) {
        $animate.header.velocity({height: "50px"}, { queue: false });
    } else {
        $animate.header.velocity({height: "100px"}, { queue: false });
    }
}

【讨论】:

  • 这完全没有必要
  • @ZachSaucier 我不这么认为:请参阅我对您的回答的评论。但我同意这个小插件可以手写,因为这很简单!顺便说一句,看看文档页面,这是有启发性的!
  • 请不要链接到废弃的图书馆吗?上次更新时间是 2010 年 3 月 7 日
  • 我认为这是针对velocity.js的,你们只是使用jQuery的scrollTo,而不是我在文档中读到的velocity.js如何完成?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
相关资源
最近更新 更多