Parse.js onResize() 矩形
Parse.js onResize() with rectangle
我是 Paper.js 的新手,对 JS 不是很熟悉(很高兴,这些是一些简单的代表点!)
我想在 canvas 中居中一个矩形,我成功了。问题是我希望在调用 onResize 时这个矩形保持在中间,而文档没有很好地解释,或者至少我没有找到一致的东西。
这是我的代码:
createYearBar(1983, 2015);
function createYearBar(yearStart, yearEnd){
var yearsToDraw = (yearEnd - yearStart);
var topLeftX = view.center.x * 0.2;
var topRightX = view.center.x * 1.8;
var barSize = topRightX - topLeftX;
var perYear = (barSize)/yearsToDraw;
var topleft = new Point(topLeftX, 20);
var size = new Size(barSize, 30);
var rect = new Rectangle(topleft, size);
var barPath = new Path.Rectangle(rect);
barPath.strokeColor = 'black';
barPath.fillColor = 'black'
}
所以它绘制了一个我想要的矩形,但是当我调整大小时它什么也没做。我不明白为什么,因为这个 view.center.x
应该来自框架。
如果加上:
就更好了
function onResize(event) {
createYearBar(1983, 2015);
}
因为我的栏可以变大但不会变小,因为它只是在现有栏上添加栏。
我的问题是:
我是否需要手动删除并重新创建栏,还是我遗漏了一些微不足道的东西(我想我遗漏了什么!)?
您遗漏了几件事,但您的猜测是正确的:最简单的做法是在每个 resize
事件上销毁并重新创建一个栏。
view.center
只是return调用时的常规坐标。如果视图是 300x400,view.center 将 return 在 [150, 200] 处创建一个新的 Point 对象。当您调整 window.
大小时,它不是更新对象位置的动态点
问题是您在调整视图大小时没有删除 barPath
对象。如果你的函数 return 是一个对象而不是在函数范围内匿名创建一个对象,那么这样做会容易得多:
var barPath = createYearBar(1983, 2015);
function createYearBar(yearStart, yearEnd){
var yearsToDraw = (yearEnd - yearStart);
var topLeftX = view.center.x * 0.2;
var topRightX = view.center.x * 1.8;
var barSize = topRightX - topLeftX;
var perYear = (barSize)/yearsToDraw;
var topleft = new Point(topLeftX, 20);
var size = new Size(barSize, 30);
var rect = new Rectangle(topleft, size);
barPath = new Path.Rectangle(rect);
barPath.strokeColor = 'black';
barPath.fillColor = 'black';
return barPath;
}
function onResize(event) {
barPath.remove();
barPath = createYearBar(1983, 2015);
}
我是 Paper.js 的新手,对 JS 不是很熟悉(很高兴,这些是一些简单的代表点!) 我想在 canvas 中居中一个矩形,我成功了。问题是我希望在调用 onResize 时这个矩形保持在中间,而文档没有很好地解释,或者至少我没有找到一致的东西。
这是我的代码:
createYearBar(1983, 2015);
function createYearBar(yearStart, yearEnd){
var yearsToDraw = (yearEnd - yearStart);
var topLeftX = view.center.x * 0.2;
var topRightX = view.center.x * 1.8;
var barSize = topRightX - topLeftX;
var perYear = (barSize)/yearsToDraw;
var topleft = new Point(topLeftX, 20);
var size = new Size(barSize, 30);
var rect = new Rectangle(topleft, size);
var barPath = new Path.Rectangle(rect);
barPath.strokeColor = 'black';
barPath.fillColor = 'black'
}
所以它绘制了一个我想要的矩形,但是当我调整大小时它什么也没做。我不明白为什么,因为这个 view.center.x
应该来自框架。
如果加上:
就更好了function onResize(event) {
createYearBar(1983, 2015);
}
因为我的栏可以变大但不会变小,因为它只是在现有栏上添加栏。
我的问题是:
我是否需要手动删除并重新创建栏,还是我遗漏了一些微不足道的东西(我想我遗漏了什么!)?
您遗漏了几件事,但您的猜测是正确的:最简单的做法是在每个 resize
事件上销毁并重新创建一个栏。
view.center
只是return调用时的常规坐标。如果视图是 300x400,view.center 将 return 在 [150, 200] 处创建一个新的 Point 对象。当您调整 window.
问题是您在调整视图大小时没有删除 barPath
对象。如果你的函数 return 是一个对象而不是在函数范围内匿名创建一个对象,那么这样做会容易得多:
var barPath = createYearBar(1983, 2015);
function createYearBar(yearStart, yearEnd){
var yearsToDraw = (yearEnd - yearStart);
var topLeftX = view.center.x * 0.2;
var topRightX = view.center.x * 1.8;
var barSize = topRightX - topLeftX;
var perYear = (barSize)/yearsToDraw;
var topleft = new Point(topLeftX, 20);
var size = new Size(barSize, 30);
var rect = new Rectangle(topleft, size);
barPath = new Path.Rectangle(rect);
barPath.strokeColor = 'black';
barPath.fillColor = 'black';
return barPath;
}
function onResize(event) {
barPath.remove();
barPath = createYearBar(1983, 2015);
}