3

我正在使用航路点来切换一个基于偏移量创建 CSS 过渡的类。这是 css 过渡降低元素的高度。一旦通过每个航点,我已经尝试使用刷新功能重新计算 DOM,但我不确定我做对了,或者我在这里受到了轻微的限制。

您可以在此处查看该网站:http: //dev.rostylesalon.com/

jQuery('#aboutwrap').waypoint( function() {
    jQuery('#aboutwrap .section-header').toggleClass('header-animate');
$.waypoints('refresh');
}, { offset: 300 });

jQuery('#servicewrap').waypoint( function() {
    jQuery('#servicewrap .section-header').toggleClass('header-animate');
$.waypoints('refresh');
}, { offset: 300 });

jQuery('#contactwrap').waypoint( function() {
    jQuery('#contactwrap .section-header').toggleClass('header-animate');
$.waypoints('refresh');
}, { offset: 300 });

上面的每个部分标题都应该切换一个增加/减少其高度的类。我认为“刷新”会重新计算 DOM 以适应这一点,但事实并非如此。航点/锚点最终高于预期。如果你从一个部分移动到下一个部分,没问题。但是,如果您使用导航跳过某个部分,则部分标题最终会略高于视口的顶部。

4

1 回答 1

2

refresh在课程切换后,您绝对走在正确的道路上。您确实需要重新计算它提供的触发点。

这里的问题是 CSS 转换是异步发生的。您切换类并开始转换,同时您的 JavaScript 已经开始调用刷新,但您的转换才刚刚开始。您想要的是等到转换完成,直到您调用刷新。

CSS 过渡,除了它们的 CSS 属性,还给了我们一个名为transitionend的 JavaScript 事件。这是您在页面上使用它的方式(未经测试)。

首先,我想稍微重构一下您现有的代码,使其更容易推理。你所有的航点都做同样的事情,你的部分有我们可以使用的共同标记。所以我们可以只调用一次航点,让航点循环遍历元素本身。并且this在路点回调中指的是 HTML 元素本身,所以我们将使用它:

jQuery('.section-wrapper').waypoint( function() {
  jQuery(this).find('.section-header').toggleClass('header-animate');
}, { offset: 300 });

好的,现在让我们添加transitionend处理程序:

jQuery('.section-wrapper').waypoint( function() {
  jQuery(this).find('.section-header').toggleClass('header-animate');
}, { offset: 300 });

jQuery('.section-header').on('webkitTransitionEnd transitionend', function() {
  jQuery.waypoints('refresh');
});

应该可以完成工作。

于 2013-10-16T04:05:37.163 回答