Javascript GreenSock,tween函数参数

Javascript GreenSock,tween函数参数,javascript,jquery,css,tween,gsap,Javascript,Jquery,Css,Tween,Gsap,我在鼠标事件中调用了两个函数: function menuBtnOver(e){ var b = e.data; b.setPosition(b.x, b.y+5); } function menuBtnOut(e){ var b = e.data; b.setPosition(b.x, b.y-5); } 以及: 元素属性是jQuery对象。 这是工作正常,但我想动画这一点。我怎样才能用TweenLite做到这一点? 我尝试了以下代码: function m

我在鼠标事件中调用了两个函数:

function menuBtnOver(e){
    var b = e.data;
    b.setPosition(b.x, b.y+5);
}

function menuBtnOut(e){
    var b = e.data;
    b.setPosition(b.x, b.y-5);
}
以及:

元素属性是jQuery对象。 这是工作正常,但我想动画这一点。我怎样才能用TweenLite做到这一点? 我尝试了以下代码:

function menuBtnOver(e){
    TweenLite.to(e.data, 1, {top:500});
}
除此之外:

function menuBtnOver(e){
    TweenLite.to(e.data.getElement(), 1, {top:500});
}
还有许多其他的组合,但都不起作用。 只有部分有效的方法是:

function menuBtnOver(e){
    TweenLite.to(e.data, 1, {y:400, onUpdate:e.data.setPosition, onUpdateParams:[e.data.x, e.data.y]});
}
但它只在我翻滚时的第一个按钮上起作用,并且在任何时间翻滚后,它直接移动到给定的位置,而不使用tween,然后tween永远移动,至少每次都会给我错误-我无法通过其他尝试获得任何错误或任何东西

未捕获的TypeError:无法读取未定义的属性“css”

at:this.element.cssleft,x

使现代化 我知道发生了什么事。 我已将代码更改为:

function menuBtnOver(e){
    TweenLite.to(e.data, 1, {y:400, onUpdate:e.data.setPosition, onUpdateParams:[e.data.x, e.data.y], onUpdateScope:e.data});
}
但问题是,我设置为e.data.y/x的update函数的参数不是动态引用,始终保持为menuBtnOver状态中的精确值。因此,如果我将设置位置函数更改为:

setPosition:function(x, y) {
    if(!x) x = 0;
    if(!y) y = 0;
    this.element.css("left", this.x);
    this.element.css("top", this.y);
}
但显然这不是我想做的。 所以我可以选择这样做:

 MenuButton.prototype = {
    setPosition:function(x, y) {
        if(!x) x = 0;
        if(!y) y = 0;
        this.x = x; this.y = y;
        this.element.css("left", x);
        this.element.css("top", y);
    },
    updatePosition:function(){
        this.element.css("left", this.x);
        this.element.css("top", this.y);
    }
}

function menuBtnOver(e){
    TweenLite.to(e.data, 1, {y:400, onUpdate:e.data.updatePosition, onUpdateScope:e.data});

}
或以类似方式定义外部更新功能。问题仍然是一样的,所以有没有一个简单的方法来做到这一点更简单。GS tween是否有任何机械师可以自动完成这一过程

感谢大家的关注:

此设置位置指的是该函数,而不是onClick事件

你需要把这个传给设置位置。在下面的例子中,我在函数setPosition中将其作为self传递

function menuBtnOver(e){
  var b = e.data;
  b.setPosition(this, b.x, b.y+5);
}

} 以及:

这总是指调用的函数。正如你所读到的关于她的


所以您可以将其作为变量传递到函数中。

好的,我得到它指向在事件发生时调用函数或DOM对象的对象。但是你刚刚修改的peviouaw代码实际上是有效的。唯一的问题是使用吐温的那个。下面是另一个问题-如果这指向一个div标记,那么如果我在MyButton构造函数中定义了元素,它是如何工作的?div对象是否有自己的元素属性??另外,当您建议TweenLite.toe.data,1,{y:400,onUpdate:e.data.setPosition,onUpdateParams:[e.data.x,e.data.y],onUpdateScope:this}时,我确实更改了这个对象;事实上,错误已经消失了。但是…我不知道我是否应该高兴,因为它的行为仍然像以前一样-不是很好。你能创造一把小提琴吗?看起来很容易解决,但我可能错了。@tahir我不知道如何在fiddle中导入tween库:/应该很容易。在右侧,有一个外部资源面板。打开它,输入从其中一个链接获取的tween库。我得到了这个!谢谢你:这是你想要的链接吗?
function menuBtnOver(e){
  var b = e.data;
  b.setPosition(this, b.x, b.y+5);
function menuBtnOut(e){
  var b = e.data;
  b.setPosition(this, b.x, b.y-5);
setPosition:function(self, x, y) {
    if(!x) x = 0;
    if(!y) y = 0;
    self.element.css("left", x);
    self.element.css("top", y);
}