2016-03-07 94 views
0

我正在使用color.js,並且我正在嘗試向setColor添加回調函數。我下面的代碼添加line #177前:向庫中添加回調函數

if (_instance.options.setColorCallback) { 
    _instance.options.setColorCallback(convertColors(type, save ? colors : undefined)); 
} 

這工作得很好很好,但是當我嘗試使用setColor使用Lab顏色格式問題。當我這樣做時,回調函數不會執行。以下是我setColor如何使用Lab色彩空間:(Source

if (type === 'Lab') { 
    var factor = (e.clientX - startPoint.left)/currentTargetWidth; 
    factor = factor > 1 ? 1 : factor < 0 ? 0 : factor; 
    myColor.colors.Lab[mode] = (mode === 'L') ? factor * 100 : (factor * 255) - 128; 
    myColor.setColor(null, 'Lab'); 
} 

我如何添加一個回調函數來setColor

+0

你的意思是你在* 177行之後和178行之前添加了它* – Bergi

回答

0

雖然這是一個不好的做法,修改這樣的庫,但如果你已經決定在線#177這樣做,然後,而不是做這件事線#204,並更換

function convertColors(type, colorObj) { 

function convertColors(type, colorObj) { 

    var convertResult = __convertColors(type, colorObj); 

    if (_instance.options.afterColorsConvert) { 
     _instance.options.afterColorsConvert(convertResult); 
    } 

    return convertResult; 
} 

function __convertColors(type, colorObj) { 

這是因爲setColor包裝在第76行並且在setColor的兩個代碼定義中都使用了convertColors,所以它最好擴展convertColors功能。

+0

感謝您的回答!但我有2個問題。 1 - 爲什麼修改這樣的庫是不好的做法? 2 - 如果我這樣做,每次我轉換顏色時都會調用回調函數。我希望它只在我使用'setColor'時被調用。 – Horay

+0

這是一種不好的做法,因爲如果發佈了較新版本的庫,則無法升級到該版本,除非您將現有版本中的所有修補程序都更新到新版本。其次,我查看了colors.js的源代碼,並看到convertColors在庫外部不可訪問,並且只有setColors在內部使用此方法。 –

0

這個問題顯然是解決了,我只是想多一些信息添加到它完成; O)

功能setColor()返回convertColors()至極確實有所謂convertCallback()一個回調函數,您可以使用,所以有沒有必要在setColor()中創建自己的。

此外,如果您要在#177行之前添加一個回調,因爲convertColors()還沒有被調用,因此您會處理錯誤的顏色值。

順便說一句:@Horay,我用演示更新了colorPicker(out評論)如何實現Lab滑塊,如果你還有興趣的話。