我正在尝试存储一些用于绘图的网格数据(单元格大小和坐标)。
我是纯粹的新手,所以我遇到了一些困难。
现在我按照这样计算:
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', .... )
我想这个问题已经解决了很多次(但是我找不到),而且我不想“发明自行车”。
你能建议任何解决方案吗? ..或者可能链接到相应的文章?
答案 0 :(得分:1)
首先:你的英语很好。这个问题很容易理解。
现在,对于实际问题:看起来你想要一个类。 JavaScript类很有趣。有很多关于如何用JavaScript编写类的文档。特别是,我建议您查看here,here(严格来说不是类,但仍然有很多好的信息)和here (shameless self-plug)。
在课堂上,您可以使用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 */
});