我正在實施彩色屏幕保護程序。有一個顏色範圍和一個滑塊。顏色從藍色跳到藍色
顏色在(HSB)。有6種顏色。
blue (230, S,B)
green (130, S,B)
yellow (55, S,B)
orange (40, S,B)
red (0(or 360), S,B)
violette (315, S,B)
滑塊值從0到14.9
blue 0 - 2.9 green
green 3 - 5.9 yellow
yellow 6 - 8.9 orange
orange 9 - 11.9 red
red 12 - 14.9 violette
如果使用滑塊值和舊slidervalue和新的滑塊值之間的差爲2.9下的實際色調將發生變化分解0.5。
現在如果差異大於2.9則必須跳轉。這工作正常,直到滑塊值小於12。在值12顏色從0更改爲360和我的代碼不再工作。
// this works fine
if (lastSlide < 12) {
// jump statement
if (Math.abs(Math.round(top.fillColor.hue - value)) > 41){
var fillColor = Math.round((Math.abs((value-top.fillColor.hue))/1.05) + Math.min(value, Math.round(top.fillColor.hue)));
if (fillColor < 0) fillColor = adjustValue(fillColor);
top.fillColor.hue = fillColor;
}
else if (Math.abs(Math.round(top.fillColor.hue - value)) < 41 && top.counter_dsg < 20){
top.fillColor.hue-= 0.5;
top.counter_dsg+=0.5;
}
else if (Math.abs(Math.round(top.fillColor.hue - setValue())) < 41 && top.counter_dsg > 19){
top.fillColor.hue+= 0.5;
top.counter_dsg+=0.5;
}
else top.fillColor.hue -= 0.5;
if (top.counter_dsg > 39) top.counter_dsg = 0;
}
// this not
else {
// jump statement
if (Math.abs(Math.round(top.fillColor.hue - value)) > 41){
var fillColor = Math.round((Math.abs((value-top.fillColor.hue))/1.05) - Math.min(value, Math.round(top.fillColor.hue)));
if (fillColor < 0) fillColor = adjustValue(fillColor);
top.fillColor.hue = fillColor;
}
else if (Math.abs(Math.round(value - top.fillColor.hue)) < 41 && top.counter_dsg < 20){
top.fillColor.hue-= 0.5;
top.counter_dsg+=0.5;
}
else if (Math.abs(Math.round(value - top.fillColor.hue)) < 41 && top.counter_dsg > 19){
top.fillColor.hue+= 0.5;
top.counter_dsg+=0.5;
}
else top.fillColor.hue -= 0.5;
if (top.counter_dsg > 39) top.counter_dsg = 0;
}
編輯:
好那好,我們說有屏幕上的畫布,我想通過使用滑塊以更改畫布的顏色。如果沒有使用滑塊,畫布的實際顏色就是swining(+ 10hue,-10hue)。
例如
畫布的顏色爲藍色(230色調,S,B),我不使用滑塊這樣的畫布的變化通過添加0,5(計數器的計數值的顏色:20次)之後,0,5將從顏色中分解,直到計數器達到40,然後計數器設置爲0.因此,顏色在(220色相,s,b)和(240hue,s,b)之間變動
現在,如果我使用滑塊(slidersteps = 0.1),顏色將更改爲新值。
在示例 我使用的滑塊和滑塊值是2,9,然後顏色變成綠色0.5色相。步驟看起來像(230h,s,b),(229.5h,s,b),...,(130h,s,b)。如果(130h,s,b)達到,則顏色開始擺動。
此外,如果新的滑塊值比舊的大得多,則舊的顏色到新的顏色的變化必須更快。
示例 滑塊值= 11.9,最後一個滑塊值= 2,9,它們之間的差值爲9.所以如果差別比較大,那麼2.9我希望從綠色變爲紅色更快。所以我決定通過使用這個公式(舊值 - 新值)/ 1.05 +最小[舊值,新值] 步驟看起來像(130h,s,b),(123h,s,b), ...,(0h,s,b)
此工作正常,直到從紅色變爲紫色,因爲紅色的值爲0,而下一個的值爲360,直到325紫色。所以我很困惑,如何讓相同的步驟,像上面這種valuechanges
EDIT2:
1.) yes its the actual hue
2.) my fault...it's always setValue() - i have declare it above in this ways value = setValue() to use it once time and didn't change it everywhere
3.) value = setValue() -> the Hue calculated by the slider
4.) yes
5.) yes
我仍然不知道您要做什麼。 :P很多神奇的數字可能會使用一些不合時宜的數字。忘記數字,並更清楚地解釋目標。 (更好的是,發佈一個更完整的例子作爲小提琴或堆棧片段。) – cHao 2014-11-04 15:32:05
對於滿意的答案,我需要一些澄清。 1)'top.fillColor.hue'是實際畫布顏色的色調嗎? 2)爲什麼你有時使用'value',有時使用'setValue()'? 3)價值是新的色彩嗎? 4)是'的setValue()'的從[這裏]函數(http://stackoverflow.com/questions/26491164/color-transformation-with-paper-js-in-a-range/26492486#26492486)? 5)'adjustValue()'這個函數來自[HERE](http://stackoverflow.com/questions/26703470/colors-hsb-from-360-to-0-and-from-0-to-360-and -from-360至720和/ 26704254#26704254)?請編輯您的問題答案。 – 2014-11-04 21:24:32