Skip to content

Commit 5671965

Browse files
author
Keks
committed
✔️ Сборка #10
1 parent db18005 commit 5671965

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

10/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ <h2 class="data-error__title">Не удалось загрузить данны
243243
</section>
244244
</template>
245245
<script src="./vendor/pristine/pristine.min.js"></script>
246+
<script src="./vendor/nouislider/nouislider.js"></script>
246247
<script src="./js/main.js" type="module"></script>
247248
<script src="./js/functions.js"></script>
248249
</body>

10/js/filterForm.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ const scaleValueInput = document.querySelector('.scale__control--value'); // о
22
const scaleSmallerBtn = document.querySelector('.scale__control--smaller'); // минус
33
const scaleBiggerBtn = document.querySelector('.scale__control--bigger'); // плюсик
44
const previewImage = document.querySelector('.img-upload__preview img'); // фотка
5+
const effectSlider = document.querySelector('.effect-level__slider'); // слайдер со значениями выбранного фильтра
6+
const effectValueInput = document.querySelector('.effect-level__value'); // Уровень эффекта
7+
const effectLevelContainer = document.querySelector('.img-upload__effect-level'); // эффект «Оригинал» слайдер и его контейнер
8+
const effectsRadio = document.querySelectorAll('.effects__radio'); // все кнопки эффектов
59

610
const SCALE_STEP = 25; // шаг в 25
711
const SCALE_MIN = 25; // минимальный процент
@@ -26,3 +30,59 @@ scaleBiggerBtn.addEventListener('click', () => {
2630

2731
// по умолчанию значение 100
2832
updateScale(currentScale);
33+
34+
const effects = { // эффекты
35+
'chrome': {min: 0, max: 1, step: 0.1, start: 1, filter: (value) => `grayscale(${value})`},
36+
'sepia': {min: 0, max: 1, step: 0.1, start: 1, filter: (value) => `sepia(${value})`},
37+
'marvin': {min: 0, max: 100, step: 1, start: 100, filter: (value) => `invert(${value}%)`},
38+
'phobos': {min: 0, max: 3, step: 0.1, start: 3, filter: (value) => `blur(${value}px)`},
39+
'heat': {min: 1, max: 3, step: 0.1, start: 3, filter: (value) => `heat(${value})`},
40+
'none': {} // Оригинал
41+
};
42+
43+
let currentEffect = 'none'; // выбранный эффект
44+
45+
function updateEffectSlider(effect) {
46+
if (effect === 'none') { // если выбран эффект 'none'
47+
effectLevelContainer.style.display = 'none'; // скрывается контейнер слайдера
48+
previewImage.style.filter = ''; // с изображения убирается CSS-фильтр
49+
effectValueInput.value = ''; // очищается поле ввода значения эффекта
50+
return;
51+
}
52+
53+
effectLevelContainer.style.display = ''; // показывается контейнер слайдера
54+
55+
const { min, max, step, start } = effects[effect]; // из объекта effects берутся параметры для выбранного эффекта: min, max, step, start.
56+
57+
if (effectSlider.noUiSlider) { // если слайдер уже существует
58+
effectSlider.noUiSlider.updateOptions({ // обновляются его параметры (диапазон, старт, шаг)
59+
range: {min, max}, start, step
60+
});
61+
} else {
62+
noUiSlider.create(effectSlider, { // если слайдер ещё не был создан
63+
range: {min, max}, // создаётся новый слайдер с заданными параметрами
64+
start,
65+
step,
66+
connect: 'lower'
67+
});
68+
69+
effectSlider.noUiSlider.on('update', (values, handle) => { // вешается обработчик события update
70+
const value = values[handle]; // получает текущее значение слайдера
71+
effectValueInput.value = value; // записывает его в поле ввода
72+
previewImage.style.filter = effects[currentEffect].filter(value); // применяет CSS-фильтр к изображению с этим значением.
73+
});
74+
}
75+
76+
effectSlider.noUiSlider.set(start); // стартовое значение
77+
}
78+
79+
// переключение эффекта:
80+
effectsRadio.forEach((radio) => { // проходим по всем кнопкам
81+
radio.addEventListener('change', (evt) => { // если кнопка меняется
82+
currentEffect = evt.target.value; // то выбранному значению выбираем от нажатой
83+
updateEffectSlider(currentEffect); // и в функцию передаем значения от выбранного
84+
});
85+
});
86+
87+
// выбор по умолчанию:
88+
updateEffectSlider('none');

0 commit comments

Comments
 (0)