0

我正在尝试存储一些网格数据(单元格大小和坐标)以进行绘图。

我是纯 js 的新手,所以我遇到了一些困难。

现在我这样计算:

  var W = document.width;
  var H = document.height;

  var w = [80, null, 80, 100];
  w[1] = W - w[0] - w[2] - w[3];
  var x = [0, w[0], w[0] + w[1], w[0] + w[1] + w[2], w[0] + w[1] + w[2] + w[3]];

  var h = [null, 20, 100];
  h[0] = H - w[1] - w[2];
  var y = [0, h[0], h[0] + h[1]];

但这很丑陋。

我想将数据存储到某个对象中,并访问如下字段:

var grid = new Grid ([80, null, 80, 100], [null, 20, 100]);
// 'null' means that value shall be recalculated on window resized
var x1 = grid.x[1];
var w1 = grid.w[1];
// etc ..
// plus, somewhere inside Grid: window.addEventListener('resize', .... )

我想这个问题已经解决了很多次(但我找不到),我不想“发明自行车”。

你能建议任何解决方案吗?..或者可能是相应文章的链接?

4

1 回答 1

1

首先:你的英语很好。这个问题很容易理解。

现在,对于实际问题:看起来你想要一个class。JavaScript 类是有趣的东西。有很多关于如何在 JavaScript 中编写类的文档。特别是,我建议看这里这里(严格来说不是关于课程,但仍然有很多好的信息)和这里(无耻的自我插入)

在你的课堂上,你可以Object.defineProperty用来做一些事情,比如:

Object.defineProperty(Grid.prototype, 'x', {
    'get': function() {
        /* do some calculations */
        return value;
    }
};

// later on
var x = myGrid.x;

或者,您可以使用沼泽标准功能:

Grid.prototype.x = function() {
    /* do some calculations */
    return value;
}

// later on
var x = myGrid.x();

就调整大小而言,您肯定走在正确的轨道上,将事件侦听器附加到resize事件。我建议为此使用jQuery;从长远来看,它会有所帮助。您的代码将类似于:

$(window).on('resize', function(event) {
    /* loop over values */
    /* if value is null, recalculate */
});
于 2013-06-29T19:26:00.843 回答