2011-06-29 21 views
2

我想爲我的應用程序使用Jcrop,儘管我遇到了一個bug。我去了演示頁面,那裏也存在bug。這裏是如何創建它。Jcrop中的一個Bug,minSize + aspectRatio

回到這個演示頁 http://deepliquid.com/projects/Jcrop/demos.php?demo=advanced

確保下列選項被選中 「選擇可移動」
「可調整大小的選擇」 「寬高比」 「minSize屬性/ MAXSIZE設置」

創建一個選定的區域,將其拖到左上角,抓住選區的右下角(就像要調整它的大小一樣)並將其拖動到圖像的左上角。

一旦你通過圖像的左上角,選擇區域摺疊到一個0x0像素選擇。

只有在設置寬高比時纔會發生此錯誤。否則,它工作正常。

我想知道是否有人有任何經驗篡改此插件到他們可能能夠修復此錯誤的地方。我一整天都在經歷這一切,還沒有弄清楚。

- 編輯 - 花了幾個小時後,我能夠得到大部分修正的錯誤。我改變了下面的代碼。

 // 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; 
      } 
     } 

這阻止了它崩潰,它仍然行爲有點buggy。

--End Edit--

+1

我是Jcrop的作者。我意識到這個問題。正如你所發現的那樣,這很令人煩惱。我可能需要一些社區幫助來解決它。我會研究上面的代碼,看看是否可以應用這些更改。我也會試着再試一次。隨時通過我的網站與我聯繫。感謝發佈! –

+0

實際上它看起來修復只是0.9.8中的bug,在0.9.9中它實際上似乎工作得很好。我還沒有檢查過瀏覽器。 – copacetic

+0

看起來像0.9.9中的bug仍然存在 – YesMan85

回答

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; 
    } 
} 
0

這裏是我的補丁,我認爲產生更好的表現比其他人公佈。有一點特別是它消除了在使用minSize和在邊緣附近切換邊時在演示中看到的彈出邊緣。

@@ -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) 
     }