您可以通过稍微调整一下 ViewportChecker 脚本来完成此操作(Animate.css + Viewport Checker 延迟)。我已经用 1.7.4 版完成了。有3个修改:
1) 添加默认值为0的“延迟”选项:
$.fn.viewportChecker = function(useroptions){
// Define options and extend with user
var options = {
classToAdd: 'visible',
classToRemove : 'invisible',
offset: 100,
repeat: false,
invertBottomOffset: true,
callbackFunction: function(elem, action){},
scrollHorizontal: false,
delay: 0 // HERE
};
...
2) 添加“数据延迟”功能,以便可以在 html 标签中指定延迟:
// Loop through all given dom elements
$elem.each(function(){
var $obj = $(this),
objOptions = {},
attrOptions = {};
// Get any individual attribution data
if ($obj.data('vp-add-class'))
attrOptions.classToAdd = $obj.data('vp-add-class');
if ($obj.data('vp-remove-class'))
attrOptions.classToRemove = $obj.data('vp-remove-class');
if ($obj.data('vp-offset'))
attrOptions.offset = $obj.data('vp-offset');
if ($obj.data('vp-repeat'))
attrOptions.repeat = $obj.data('vp-repeat');
if ($obj.data('vp-scrollHorizontal'))
attrOptions.scrollHorizontal = $obj.data('vp-scrollHorizontal');
if ($obj.data('vp-invertBottomOffset'))
attrOptions.scrollHorizontal = $obj.data('vp-invertBottomOffset');
if ($obj.data('vp-delay')) // HERE
attrOptions.delay = $obj.data('vp-delay');
...
3) 将元素在视口中时要执行的语句包装起来,调用 setTimeout:
// Add class if in viewport
if ((elemStart < viewportEnd) && (elemEnd > viewportStart)){
setTimeout(function() { // HERE
// remove class
$obj.removeClass(objOptions.classToRemove);
$obj.addClass(objOptions.classToAdd);
// Do the callback function. Callback wil send the jQuery object as parameter
objOptions.callbackFunction($obj, "add");
}, objOptions.delay);
...
用法
HTML
<div data-vp-animate="bounceInLeft" data-vp-delay="500">
...
</div>
CSS
.hidden-o {
opacity: 0;
}
.visible-o {
opacity: 1;
}
JS
$('[data-vp-animate]').each(function() {
var classToAdd = 'visible-o animated '+($(this).data('vp-animate') ? $(this).data('vp-animate') : 'fadeIn');
$(this).addClass('hidden-o').viewportChecker({
classToAdd: classToAdd
});
});