我正在尝试将Jcrop用于我的应用程序,尽管我遇到了它的错误。我去了演示页面,那里也存在bug。以下是如何创建它。
转到此演示页面 http://deepliquid.com/projects/Jcrop/demos.php?demo=advanced
确保选中以下选项
“选择可以移动”
“可调整大小的选择”
“宽高比”
“minSize / maxSize设置”
创建一个选定区域,将其拖动到左上角,抓住所选内容的右下角(就好像要调整大小一样)并将其拖动到图像的左上角。
通过图像的左上角后,选择区域会向下折叠为0x0像素选择。
只有在设置了宽高比时才会出现此错误。否则它工作正常。
我想知道是否有人有任何黑客使用此插件的经验,他们可能能够修复此错误。我整天都在经历它,但还没有弄明白。
- Edit-- 花了几个小时后,我能够把错误修复得多。我更改了以下代码。
// Magic %-)
if(xx >= x1) { // right side <-- Changed > to >=
if(xx - x1 < min_x) {
xx = x1 + min_x;
} else if (xx - x1 > max_x) {
xx = x1 + max_x;
}
if(yy > y1) {
yy = y1 + (xx - x1)/aspect;
} else {
yy = y1 - (xx - x1)/aspect;
}
} else if (xx <= x1) { // left side <-- Changed < to <=
if(x1 - xx < min_x) {
xx = x1 - min_x
} else if (x1 - xx > max_x) {
xx = x1 - max_x;
}
if(yy > y1) {
yy = y1 + (x1 - xx)/aspect;
} else {
yy = y1 - (x1 - xx)/aspect;
}
}
这使它不会崩溃,但它仍然有点小马车。
- 结束编辑 -
答案 0 :(得分:3)
更稳定的版本似乎如下:
if(xx===x1){xx=x1+min_x;}
// Magic %-)
if (xx > x1) { // right side
if (xx - x1 < min_x) {
xx = x1 + min_x;
} else if (xx - x1 > max_x) {
xx = x1 + max_x;
}
if (yy > y1) {
yy = y1 + (xx - x1) / aspect;
} else {
yy = y1 - (xx - x1) / aspect;
}
} else if (xx < x1) { // left side
if (x1 - xx < min_x) {
xx = x1 - min_x;
} else if (x1 - xx > max_x) {
xx = x1 - max_x;
}
if (yy > y1) {
yy = y1 + (x1 - xx) / aspect;
} else {
yy = y1 - (x1 - xx) / aspect;
}
}
答案 1 :(得分:0)
这是我的补丁,我认为它比其他人发布的行为更好。特别是它删除的一件事是在使用minSize并在边缘附近切换边时,在演示中看到的pop-to-edge。
@@ -578,44 +578,36 @@
}
// Magic %-)
- if (xx > x1) { // right side
+ if (xx >= x1) { // right side
if (xx - x1 < min_x) {
xx = x1 + min_x;
} else if (xx - x1 > max_x) {
xx = x1 + max_x;
}
- if (yy > y1) {
+ if (yy >= y1) {
yy = y1 + (xx - x1) / aspect;
} else {
yy = y1 - (xx - x1) / aspect;
}
- } else if (xx < x1) { // left side
+ } else { // left side
if (x1 - xx < min_x) {
xx = x1 - min_x;
} else if (x1 - xx > max_x) {
xx = x1 - max_x;
}
- if (yy > y1) {
+ if (yy >= y1) {
yy = y1 + (x1 - xx) / aspect;
} else {
yy = y1 - (x1 - xx) / aspect;
}
}
- if (xx < 0) {
- x1 -= xx;
- xx = 0;
- } else if (xx > boundx) {
- x1 -= xx - boundx;
- xx = boundx;
+ if (xx < 0 || xx > boundx) {
+ xx = x1 + (x1 - xx)
}
- if (yy < 0) {
- y1 -= yy;
- yy = 0;
- } else if (yy > boundy) {
- y1 -= yy - boundy;
- yy = boundy;
+ if (yy < 0 || yy > boundy) {
+ yy = y1 + (y1 - yy)
}