1
1
import { imagePreview } from './image-scaling.js' ;
2
2
3
+ const EffectsList = {
4
+ chrome : document . querySelector ( '#effect-chrome' ) ,
5
+ sepia : document . querySelector ( '#effect-sepia' ) ,
6
+ marvin : document . querySelector ( '#effect-marvin' ) ,
7
+ phobos : document . querySelector ( '#effect-phobos' ) ,
8
+ heat : document . querySelector ( '#effect-heat' ) ,
9
+ } ;
10
+ const EffectsOptions = {
11
+ noEffect : { range : { min : 0 , max : 0 } , start : 0 } ,
12
+ chromeAndSepia : { range : { min : 0 , max : 1 } , start : 1 , step : 0.1 } ,
13
+ marvin : { range : { min : 0 , max : 100 } , start : 100 , step : 1 } ,
14
+ phobos : { range : { min : 0 , max : 3 } , start : 3 , step : 0.1 } ,
15
+ heat : { range : { min : 1 , max : 3 } , start : 3 , step : 0.1 } ,
16
+ } ;
17
+
3
18
const sliderNodeWrapper = document . querySelector ( '.img-upload__effect-level' ) ;
4
19
const sliderNode = sliderNodeWrapper . querySelector ( '.effect-level__slider' ) ;
5
20
const valueNode = document . querySelector ( '.effect-level__value' ) ;
6
- const chromeEffectNode = document . querySelector ( '#effect-chrome' ) ;
7
- const sepiaEffectNode = document . querySelector ( '#effect-sepia' ) ;
8
- const marvinEffectNode = document . querySelector ( '#effect-marvin' ) ;
9
- const phobosEffectNode = document . querySelector ( '#effect-phobos' ) ;
10
- const heatEffectNode = document . querySelector ( '#effect-heat' ) ;
11
21
const radioInputSection = document . querySelector ( '.img-upload__effects' ) ;
12
22
const effectPreviewElements = radioInputSection . querySelectorAll ( '.effects__preview' ) ;
13
23
let currentSliderValue = 0 ;
@@ -34,49 +44,57 @@ noUiSlider.create(sliderNode, {
34
44
} ,
35
45
} ) ;
36
46
37
- const applyFilter = ( ) => {
38
- if ( chromeEffectNode . checked ) {
39
- imagePreview . style . filter = `grayscale(${ currentSliderValue } )` ;
40
- } else if ( sepiaEffectNode . checked ) {
41
- imagePreview . style . filter = `sepia(${ currentSliderValue } )` ;
42
- } else if ( marvinEffectNode . checked ) {
43
- imagePreview . style . filter = `invert(${ currentSliderValue } %)` ;
44
- } else if ( phobosEffectNode . checked ) {
45
- imagePreview . style . filter = `blur(${ currentSliderValue } px)` ;
46
- } else if ( heatEffectNode . checked ) {
47
- imagePreview . style . filter = `brightness(${ currentSliderValue } )` ;
48
- } else {
49
- imagePreview . style . filter = '' ;
47
+ const applyEffect = ( ) => {
48
+ const isElementChecked = true ;
49
+
50
+ switch ( isElementChecked ) {
51
+ case EffectsList . chrome . checked :
52
+ imagePreview . style . filter = `grayscale(${ currentSliderValue } )` ;
53
+ break ;
54
+ case EffectsList . sepia . checked :
55
+ imagePreview . style . filter = `sepia(${ currentSliderValue } )` ;
56
+ break ;
57
+ case EffectsList . marvin . checked :
58
+ imagePreview . style . filter = `invert(${ currentSliderValue } %)` ;
59
+ break ;
60
+ case EffectsList . phobos . checked :
61
+ imagePreview . style . filter = `blur(${ currentSliderValue } px)` ;
62
+ break ;
63
+ case EffectsList . heat . checked :
64
+ imagePreview . style . filter = `brightness(${ currentSliderValue } )` ;
65
+ break ;
66
+ default :
67
+ imagePreview . style . filter = '' ;
50
68
}
51
69
} ;
52
70
53
71
sliderNode . noUiSlider . on ( 'update' , ( ) => {
54
72
currentSliderValue = sliderNode . noUiSlider . get ( ) ;
55
73
valueNode . value = currentSliderValue ;
56
- applyFilter ( ) ;
74
+ applyEffect ( ) ;
57
75
} ) ;
58
76
59
77
radioInputSection . addEventListener ( 'click' , ( evt ) => {
60
78
if ( evt . target . matches ( 'input[type="radio"]' ) ) {
61
79
let options = { } ;
62
80
sliderNodeWrapper . classList . remove ( 'hidden' ) ;
63
81
switch ( evt . target ) {
64
- case chromeEffectNode :
65
- case sepiaEffectNode :
66
- options = { range : { min : 0 , max : 1 } , start : 1 , step : 0.1 } ;
82
+ case EffectsList . chrome :
83
+ case EffectsList . sepia :
84
+ options = EffectsOptions . chromeAndSepia ;
67
85
break ;
68
- case marvinEffectNode :
69
- options = { range : { min : 0 , max : 100 } , start : 100 , step : 1 } ;
86
+ case EffectsList . marvin :
87
+ options = EffectsOptions . marvin ;
70
88
break ;
71
- case phobosEffectNode :
72
- options = { range : { min : 0 , max : 3 } , start : 3 , step : 0.1 } ;
89
+ case EffectsList . phobos :
90
+ options = EffectsOptions . phobos ;
73
91
break ;
74
- case heatEffectNode :
75
- options = { range : { min : 1 , max : 3 } , start : 3 , step : 0.1 } ;
92
+ case EffectsList . heat :
93
+ options = EffectsOptions . heat ;
76
94
break ;
77
95
default :
78
- options = { range : { min : 0 , max : 0 } , start : 0 } ;
79
- applyFilter ( ) ;
96
+ options = EffectsOptions . noEffect ;
97
+ applyEffect ( ) ;
80
98
sliderNodeWrapper . classList . add ( 'hidden' ) ;
81
99
}
82
100
0 commit comments