ホバー時にスプライトをアニメーション化する必要があります。私はいくつかのプラグインを試しましたが、自分でプラグインを作成することにしました。ここにあります:
(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();
}
});
ただし、アニメーションはホバーごとに1フレームしか移動しません。私が見つけたのは、setIntervalで参照ではなく関数呼び出しを使用しているためです。()を削除すると、setIntervalループを作成できますが、アニメーション関数は変数なしで失敗します。
$(this)とオプションをsetIntervalを使用してアニメーション関数に取り込むにはどうすればよいですか?または?