11class Gradient {
2- constructor ( gradients = '' , maxNum = 10 , colors = [ '' , '' ] ) {
2+ constructor ( gradients = '' , maxNum = 10 , colors = [ '' , '' ] , intervals = [ ] ) {
33
44 const setColors = props => {
55 if ( props . length < 2 ) {
66 throw new Error ( `setGradient should have more than ${ props . length } color` ) ;
77 } else {
88 let increment = maxNum / ( props . length - 1 ) ;
99 let firstGradient = new GradientColor ( ) ;
10+ let lower = 0 ;
11+ let upper = 0 + increment ;
1012 firstGradient . setGradient ( props [ 0 ] , props [ 1 ] ) ;
11- firstGradient . setMidpoint ( 0 , 0 + increment ) ;
13+ firstGradient . setMidpoint ( lower , upper ) ;
1214 gradients = [ firstGradient ] ;
15+ intervals = [ {
16+ lower,
17+ upper
18+ } ] ;
1319
1420 for ( let i = 1 ; i < props . length - 1 ; i ++ ) {
1521 let gradientColor = new GradientColor ( ) ;
22+ let lower = 0 + increment * i ;
23+ let upper = 0 + increment * ( i + 1 ) ;
1624 gradientColor . setGradient ( props [ i ] , props [ i + 1 ] ) ;
17- gradientColor . setMidpoint ( 0 + increment * i , 0 + increment * ( i + 1 ) ) ;
25+ gradientColor . setMidpoint ( lower , upper ) ;
1826 gradients [ i ] = gradientColor ;
27+ intervals [ i ] = {
28+ lower,
29+ upper
30+ } ;
1931 }
2032 colors = props ;
2133 }
@@ -28,8 +40,13 @@ class Gradient {
2840
2941 this . getArray = ( ) => {
3042 let gradientArray = [ ] ;
31- for ( let i = 1 ; i < maxNum + 1 ; i ++ ) {
32- gradientArray . push ( gradients [ 0 ] . getColor ( i ) )
43+ for ( let j = 0 ; j < intervals . length ; j ++ ) {
44+ const interval = intervals [ j ] ;
45+ const start = interval . lower === 0 ? 1 : Math . ceil ( interval . lower ) ;
46+ const end = interval . upper === maxNum ? interval . upper + 1 : Math . ceil ( interval . upper ) ;
47+ for ( let i = start ; i < end ; i ++ ) {
48+ gradientArray . push ( gradients [ j ] . getColor ( i ) )
49+ }
3350 }
3451 return gradientArray ;
3552 }
@@ -80,7 +97,6 @@ class GradientColor {
8097 }
8198 }
8299
83-
84100 const generateHex = ( number , start , end ) => {
85101 if ( number < minNum ) {
86102 number = minNum ;
@@ -95,6 +111,7 @@ class GradientColor {
95111 let finalBase = Math . round ( average * ( number - minNum ) + startBase ) ;
96112 return ( finalBase . toString ( 16 ) ) ;
97113 }
114+
98115 const getHexColor = props => {
99116 return props . substring ( props . length - 6 , props . length ) ;
100117 }
0 commit comments