-2

快速描述: 我知道在函数中使用 $(this) 是行不通的,因为它不在正确的范围内。我还看到了其他类似的问题。我仍然无法弄清楚如何修复我的场景。

目标:我正在尝试使用 jQuery 构建全景照片查看器。我有它的工作,但我需要多个实例。所以我只需要定位我悬停的那个。

代码:

jsFiddle:http: //jsfiddle.net/kthornbloom/5J3rh/

简化代码:

var hoverInterval;

function doStuff() {

/* The next line is the one in question */

    $(this).animate({
      /* stuff happening */
    });
}

$(function() {
    $('.pan-wrap').hover(
        function() {
            /* stuff happening */
            hoverInterval = setInterval(doStuff, 250);
        },
        function() {
            clearInterval(hoverInterval);
   });
});
4

2 回答 2

2

您有范围问题,doStuff 中的 this 是窗口上下文。

使用代理()

hoverInterval = setInterval($.proxy(doStuff,this), 250);
于 2013-04-11T16:35:44.173 回答
2

您可以显式this传入doStuff

setInterval(function() {
    doStuff(this);
}, 250);

doStuff可以这样做:

function doStuff(element) {
    ...
}

或者您可以像这样显式设置thisfor的值doStuff

setInterval(function() {
    doStuff.call(this);
}, 250);

然后你仍然可以在不改变任何参数的情况下使用$(this)inside 。doStuff有关详细信息call,请参阅Function.prototype.call和它的朋友Function.prototype.apply

于 2013-04-11T16:37:17.043 回答