diff --git a/js-core/homeworks/homework-17/index.html b/js-core/homeworks/homework-17/index.html new file mode 100644 index 0000000..b5ae9c8 --- /dev/null +++ b/js-core/homeworks/homework-17/index.html @@ -0,0 +1,91 @@ + + + + + Homework-17 + + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/js-core/homeworks/homework-17/index2.html b/js-core/homeworks/homework-17/index2.html new file mode 100644 index 0000000..e98f73f --- /dev/null +++ b/js-core/homeworks/homework-17/index2.html @@ -0,0 +1,11 @@ + + + + + HomeWork 17 Part 2 + + +
+ + + \ No newline at end of file diff --git a/js-core/homeworks/homework-17/src/main.js b/js-core/homeworks/homework-17/src/main.js new file mode 100644 index 0000000..c37780d --- /dev/null +++ b/js-core/homeworks/homework-17/src/main.js @@ -0,0 +1,194 @@ +/* + TASK 0 + Отобразите всех лидеров массива. + * + * + * Элемент лидер если он больше чем все последующие элементы + * после него ( элементы справа ). + * Последний элемент всегда лидер. Например в массиве [16,17,4,3,5,2] + * лидеры 17, 5 и 2. + * + * */ + +const solution = arr => { + let newArr =[]; + for ( let i = 0; i arr[j]) { + count ++; + } + } + if (count === arr.length - i - 1) { + newArr.push(arr[i]); + } + } + return newArr; +}; + +console.log(solution([16, 17, 4, 3, 5, 2])); // === [17, 5, 2] +console.log(solution([4, 3, 7, 12, 6, 67, 5, 45, 34, 35, 2, 8])); // [67, 45, 35, 8] +console.log(solution([12, 10, 12, 8, 7, 6])); // [12, 8, 7, 6] +console.log(solution([1, 2, 3, 4, 5, 4])); // [5, 4] +console.log(solution([12, 12, 12])); // [5, 4] + + +/* TASK 1 + * Сделайте карусель. + * При клике по кнопке "<=" показывается первое изображение по "=>" следующее. + */ + +class Carousel { + constructor (element) { + this.elementToApply = element.elementToApply, + this.widthImg = element.widthImg, + this.transition = element.transition, + this.infinity = element.infinity, + this.nav = element.nav, + this.timer = element.timer, + this.list = carousel.querySelectorAll('li'); + } + static initialize(properties) { + let myInitializedCarousel = new Carousel(properties); + myInitializedCarousel.start(); + } + infinityCarousel () { + let last = this.list.length - 1; + if (!this.list[last].classList.contains('active')) { + for (let i = 0; i < this.list.length; i ++) { + let nextPosition = parseInt(this.list[i].style.left) - this.widthImg * this.count; + this.list[i].style.left = nextPosition + 'px'; + let position = parseInt(this.list[i].style.left); + if (position === 0) { + this.list[i].classList.add('active') + } else { + this.list[i].classList.remove('active') + } + } + } else if (this.list[last].classList.contains('active') && this.infinity === true) { + this.startCarousel(); + } + } + startCarousel () { + /*Объявляем перменные */ + let carousel = document.querySelector(this.elementToApply); + let prev = carousel.querySelector('.prev'); + let next = carousel.querySelector('.next'); + let list = carousel.querySelectorAll('li'); + + let widthImg = this.widthImg; + let count = this.transition; + let infinity = this.infinity; + let nav = this.nav; + + /* Нумеруем картинки*/ + + const div = document.createElement('div'); + div.setAttribute('class', 'navigation'); + const ul = document.createElement('ul'); + for (let i = 0; i < this.list.length; i++) { + const li = document.createElement('li'); + li.setAttribute('class', 'nav'); + li.innerHTML = i + 1; + ul.appendChild(li); + } + div.appendChild(ul); + let navs = []; + + if (nav === true) { + carousel.appendChild(div); + navs = carousel.querySelectorAll('.nav'); + } + + /* Один круг карусели */ + /* Не получилось разделить метод на несколько, потому что при событии onclick + не получаеться обращаться к глобальной переменной this.list и надо переопредлять переменную list в саом методе */ + + const newRoundCarusel = () => { + for (let i = 0; i < list.length; i ++) { + list[0].classList.add('active'); + list[list.length-1].classList.remove('active'); + list[i].style.top = 0; + list[i].style.left = widthImg * count * i + 'px'; + if (nav === true) { + navs[0].classList.add('active'); + navs[list.length-1].classList.remove('active'); + } + } + prev.onclick = () => { + if (!list[0].classList.contains('active')) { + for (let i = 0; i < list.length; i ++) { + let nextPosition = parseInt(list[i].style.left) + widthImg * count; + list[i].style.left = nextPosition + 'px'; + let position = parseInt(list[i].style.left); + if (position === 0) { + list[i].classList.add('active'); + if (nav === true) { + navs[i].classList.add('active'); + } + + } else { + list[i].classList.remove('active'); + if (nav === true) { + navs[i].classList.remove('active'); + } + } + } + } + }; + next.onclick = function () { + let last = list.length - 1; + if (!list[last].classList.contains('active')) { + for (let i = 0; i < list.length; i ++) { + let nextPosition = parseInt(list[i].style.left) - widthImg * count; + list[i].style.left = nextPosition + 'px'; + let position = parseInt(list[i].style.left); + if (position === 0) { + list[i].classList.add('active'); + if (nav === true) { + navs[i].classList.add('active'); + } + } else { + list[i].classList.remove('active'); + if (nav === true) { + navs[i].classList.remove('active'); + } + } + } + } else if (list[last].classList.contains('active') && infinity === true) { + newRoundCarusel(); + + } + }; + }; + newRoundCarusel(); + + } + start () { + this.startCarousel(); + + /*Запускаем таймер, если он есть*/ + + if (this.timer !== 0) { + setInterval(() => { + this.infinityCarousel() + }, this.timer); + } + + } +} + +Carousel.initialize({ + elementToApply: '.carousel', + widthImg: 1170, + transition: 1, + infinity: true, + nav: true, + timer: 0 +}); + + + + + + diff --git a/js-core/homeworks/homework-17/src/top-style.js b/js-core/homeworks/homework-17/src/top-style.js new file mode 100644 index 0000000..352a49f --- /dev/null +++ b/js-core/homeworks/homework-17/src/top-style.js @@ -0,0 +1,38 @@ + +/* +* TASK 2 +* Сделайте класс, который будет иметь метод topStyle +* метод topStyle принимает объект с CSS стилями и добавляет в +* новый элемент с данными стилями +* +* +* */ +// .topStyle('fetch', {backgroundColor:'blue'}) +/* +* +*