1+ const SLIDER_DEFAULT_MIN = 0 ;
2+ const SLIDER_DEFAULT_MAX = 100 ;
3+ const SLIDER_DEFAULT_START = 50 ;
4+ const SLIDER_DEFAULT_STEP = 1 ;
5+ const DEFAULT_EFFECT = 'none' ;
6+
17const effects = {
28 chrome : { filter : 'grayscale' , min : 0 , max : 1 , step : 0.1 , unit : '' } ,
39 sepia : { filter : 'sepia' , min : 0 , max : 1 , step : 0.1 , unit : '' } ,
@@ -6,64 +12,65 @@ const effects = {
612 heat : { filter : 'brightness' , min : 1 , max : 3 , step : 0.1 , unit : '' }
713} ;
814
9- const DEFAULT_EFFECT = 'none' ;
10-
1115const form = document . querySelector ( '.img-upload__form' ) ;
1216const slider = form . querySelector ( '.effect-level__slider' ) ;
13- const sliderContainer = form . querySelector ( '.img-upload__effect-level' ) ;
17+ const sliderWrapper = form . querySelector ( '.img-upload__effect-level' ) ;
1418const uploadedImage = form . querySelector ( '.img-upload__preview img' ) ;
1519const effectRadios = form . querySelectorAll ( 'input[name="effect"]' ) ;
1620const inputValue = form . querySelector ( '.effect-level__value' ) ;
17- const noneRadioBtn = form . querySelector ( 'input[value="none"]' ) ;
21+ const noneRadio = form . querySelector ( 'input[value="none"]' ) ;
1822
1923const initImageEffects = ( ) => {
20- let selectedFilter = 'none' ;
24+ let selectedFilter = DEFAULT_EFFECT ;
2125 noUiSlider . create ( slider , {
2226 range : {
23- min : 0 ,
24- max : 100 ,
27+ min : SLIDER_DEFAULT_MIN ,
28+ max : SLIDER_DEFAULT_MAX ,
2529 } ,
26- start : 50 ,
27- step : 1 ,
30+ start : SLIDER_DEFAULT_START ,
31+ step : SLIDER_DEFAULT_STEP ,
2832 connect : 'lower'
2933 } ) ;
3034
31- sliderContainer . classList . add ( 'hidden' ) ;
35+ sliderWrapper . classList . add ( 'hidden' ) ;
3236
33- slider . noUiSlider . on ( 'update' , ( ) => {
34- if ( selectedFilter === 'none' ) {
37+ const onSliderUpdate = ( ) => {
38+ if ( selectedFilter === DEFAULT_EFFECT ) {
3539 return ;
3640 }
3741 const value = parseFloat ( slider . noUiSlider . get ( ) ) ;
3842 const effect = effects [ selectedFilter ] ;
3943 const filterStyle = `${ effect . filter } (${ value } ${ effect . unit } )` ;
4044 uploadedImage . style . filter = filterStyle ;
4145 inputValue . value = value ;
42- } ) ;
46+ } ;
4347
44- effectRadios . forEach ( ( radio ) => {
45- radio . addEventListener ( 'change' , ( ) => {
46- selectedFilter = radio . value ;
47- if ( selectedFilter === DEFAULT_EFFECT ) {
48- sliderContainer . classList . add ( 'hidden' ) ;
49- uploadedImage . style . filter = '' ;
50- } else {
51- sliderContainer . classList . remove ( 'hidden' ) ;
48+ slider . noUiSlider . on ( 'update' , onSliderUpdate ) ;
49+
50+ const onEffectRadioChange = ( evt ) => {
51+ selectedFilter = evt . target . value ;
52+ if ( selectedFilter === DEFAULT_EFFECT ) {
53+ sliderWrapper . classList . add ( 'hidden' ) ;
54+ uploadedImage . style . filter = '' ;
55+ } else {
56+ sliderWrapper . classList . remove ( 'hidden' ) ;
57+ const effect = effects [ selectedFilter ] ;
58+ slider . noUiSlider . updateOptions ( {
59+ range : { min : effect . min , max : effect . max } ,
60+ start : effect . max ,
61+ step : effect . step
62+ } ) ;
63+ }
64+ } ;
5265
53- const effect = effects [ selectedFilter ] ;
54- slider . noUiSlider . updateOptions ( {
55- range : { min : effect . min , max : effect . max } ,
56- start : effect . max ,
57- step : effect . step
58- } ) ;
59- }
60- } ) ;
66+ effectRadios . forEach ( ( radio ) => {
67+ radio . addEventListener ( 'change' , onEffectRadioChange ) ;
6168 } ) ;
6269} ;
6370
6471const resetImageEffects = ( ) => {
65- noneRadioBtn . checked = true ;
66- sliderContainer . classList . add ( 'hidden' ) ;
72+ noneRadio . checked = true ;
73+ sliderWrapper . classList . add ( 'hidden' ) ;
6774 uploadedImage . style . filter = '' ;
6875} ;
6976
0 commit comments