Взгляните на эту скрипку , я думаю, она делает то, что вы ищете.Принципиальное отличие состоит в том, что вы хотите вызывать анимацию на съемочной площадке, а не this
.Похоже, что когда вы добавляете обработчик в набор, this
ссылается на отдельные элементы в наборе (которые повторяются для назначения обработчика), а не на сам набор.
Обратите внимание, что я вытащилобработчик выполняет функцию getHoverHandler:
function getHoverHandler(fillColor) {
var cSet = set;
return function(){
cSet.animate({fill: fillColor}, 300);
};
}
set.hover(getHoverHandler('#000'),
getHoverHandler('#FFF'));
, чтобы сломать замыкание.Если вы попытаетесь сделать это следующим образом:
set.hover(function(){
set.animate({fill: '#000'}, 300)
}, function(){
set.animate({fill: '#FFF'}, 300)
});
по мере прохождения цикла, набор будет продолжать меняться, а замыкания будут поддерживать осведомленность об этом.В результате все обработчики будут работать с последним рядом блоков.
Если вы не понимаете закрытие javascript, возможно, вы захотите взглянуть на эту статью .Он старый, но довольно простым языком, и он мне помог, поскольку я пытался обдумать их.