我需要在悬停时为精灵设置动画,就是这样!我尝试了一些插件,但决定自己编写。这里是:
(function($) {
function animate(opts, t) {
if (opts.bgpos === opts.width * opts.frames) {
t.css('background-position-x', '0px');
} else {
opts.bgpos = opts.bgpos + opts.width;
t.css('background-position-x', opts.bgpos + 'px');
}
}
$.fn.spin = function(options) {
var t = $(this);
var opts = $.extend({}, $.fn.spin.defaults, options);
var frames = t.data('frames');
var bgpos = parseInt(t.css('background-position-x'),10);
opts = $.extend({
'frames': frames,
'bgpos': bgpos
}, opts);
setInterval(animate(opts, t), 1000 / opts.fps);
};
$.fn.spin.defaults = {
fps: 7,
width: 236
};
})(jQuery);
【之所以叫旋转,是因为精灵动画是旋转的】
我这样称呼它:
$('article.post').on({
mouseenter: function() {
var t = $(this);
t.children('div.filmstrip').spin();
}
});
然而,动画每次悬停只移动一帧。根据我的发现,这是因为我在 setInterval 中使用了函数调用而不是引用。如果我删除 (),我可以创建 setInterval 循环,但是我的动画函数在没有变量的情况下失败。
如何使用 setInterval 将我的 $(this) & options 放入我的动画函数中?或者?