1

我想得到我的对象的结束位置。所以动画完成时的顶部和左侧位置。我想在动画完成后直接获得那个位置。

我想做这个面向对象的。

这就是我得到的:

(function($) {

    Block = function() {

        this.el = $('<div></div>');
        this.el.css('position', 'relative');

        }

    Block.prototype.appendTo = function(parent) {

         this.el.appendTo(parent);
         return this;
    }

    Block.prototype.setSize = function(w, h) {

         this.el.css('width', w); 
         this.el.css('height', h);
         return this;    
    }

    Block.prototype.setPosition = function(x, y, speed) {

        speed = speed || 0;
        this.el.animate({'left': x+ 'px', 'top': y+ 'px'}, speed);
        return this;
    }

    Block.prototype.getPosition = function() {

        var left = this.el.position().left;
    var top = this.el.position().top;
    return [left, top];
    }



})(jQuery);

当我用这个类和console.log创建一个块时,我得到了块起点的位置。我想获得最终位置。直接地

var block1 = new Block
block1.appendTo('body')
        .setSize(100,50)
        .setPosition(200, 300, 3000);


console.log(block1.getPosition());

所以 console.log =[0, 0]我希望它是[200, 300]

4

2 回答 2

1

您可以使用data()来存储与元素相关的数据:

(function($) {
    Block = function() {
        this.el = $('<div></div>');
        this.el.css('position', 'relative');
    }

    Block.prototype.appendTo = function(parent) {
         this.el.appendTo(parent);
         return this;
    }

    Block.prototype.setSize = function(w, h) {
         this.el.css({width: w, height: h}); 
         return this;    
    }

    Block.prototype.setPosition = function(x, y, speed) {
        speed = speed || 0;
        this.el.data({top: y, left: x}).animate({'left': x+ 'px', 'top': y+ 'px'}, speed);     return this;
    }

    Block.prototype.getPosition = function() {
        return [this.el.data('left'), this.el.data('top')];
    }
})(jQuery);

小提琴

于 2012-12-13T14:01:17.160 回答
0

调用时只能存储指定位置setPosition,取而代之。

Block = function() {
    this.el = $('<div></div>').css('position', 'relative');
    this.position = null;
};
Block.prototype.setPosition = function(x, y, speed) {
    this.position = {'left': x, 'top': y};
    this.el.animate(this.position, speed || 0);
    return this;
};
Block.prototype.getPosition = function() {
    var pos = this.position || this.el.position();
    return [pos.left, pos.top];
};
于 2012-12-13T13:56:28.213 回答