├── app.js
├── index.html
└── style.css
/app.js:
--------------------------------------------------------------------------------
1 | const imagesArea = document.querySelector('.images');
2 | const gallery = document.querySelector('.gallery');
3 | const galleryHeader = document.querySelector('.gallery-header');
4 | const searchBtn = document.getElementById('search-btn');
5 | const sliderBtn = document.getElementById('create-slider');
6 | const sliderContainer = document.getElementById('sliders');
7 | // selected image
8 | let sliders = [];
9 |
10 |
11 | // If this key doesn't work
12 | // Find the name in the url and go to their website
13 | // to create your own api key
14 | const KEY = '15674931-a9d714b6e9d654524df198e00&q';
15 |
16 | // show images
17 | const showImages = (images) => {
18 | imagesArea.style.display = 'block';
19 | gallery.innerHTML = '';
20 | // show gallery title
21 | galleryHeader.style.display = 'flex';
22 | images.forEach(image => {
23 | let div = document.createElement('div');
24 | div.className = 'col-lg-3 col-md-4 col-xs-6 img-item mb-2';
25 | div.innerHTML = ` `;
26 | gallery.appendChild(div)
27 | })
28 |
29 | }
30 |
31 | const getImages = (query) => {
32 | fetch(`https://pixabay.com/api/?key=${KEY}=${query}&image_type=photo&pretty=true`)
33 | .then(response => response.json())
34 | .then(data => showImages(data.hitS))
35 | .catch(err => console.log(err))
36 | }
37 |
38 | let slideIndex = 0;
39 | const selectItem = (event, img) => {
40 | let element = event.target;
41 | element.classList.add('added');
42 |
43 | let item = sliders.indexOf(img);
44 | if (item === -1) {
45 | sliders.push(img);
46 | } else {
47 | alert('Hey, Already added !')
48 | }
49 | }
50 | var timer
51 | const createSlider = () => {
52 | // check slider image length
53 | if (sliders.length < 2) {
54 | alert('Select at least 2 image.')
55 | return;
56 | }
57 | // crate slider previous next area
58 | sliderContainer.innerHTML = '';
59 | const prevNext = document.createElement('div');
60 | prevNext.className = "prev-next d-flex w-100 justify-content-between align-items-center";
61 | prevNext.innerHTML = `
62 |
63 |
64 | `;
65 |
66 | sliderContainer.appendChild(prevNext)
67 | document.querySelector('.main').style.display = 'block';
68 | // hide image aria
69 | imagesArea.style.display = 'none';
70 | const duration = document.getElementById('duration').value || 1000;
71 | sliders.forEach(slide => {
72 | let item = document.createElement('div')
73 | item.className = "slider-item";
74 | item.innerHTML = `
`;
77 | sliderContainer.appendChild(item)
78 | })
79 | changeSlide(0)
80 | timer = setInterval(function () {
81 | slideIndex++;
82 | changeSlide(slideIndex);
83 | }, duration);
84 | }
85 |
86 | // change slider index
87 | const changeItem = index => {
88 | changeSlide(slideIndex += index);
89 | }
90 |
91 | // change slide item
92 | const changeSlide = (index) => {
93 |
94 | const items = document.querySelectorAll('.slider-item');
95 | if (index < 0) {
96 | slideIndex = items.length - 1
97 | index = slideIndex;
98 | };
99 |
100 | if (index >= items.length) {
101 | index = 0;
102 | slideIndex = 0;
103 | }
104 |
105 | items.forEach(item => {
106 | item.style.display = "none"
107 | })
108 |
109 | items[index].style.display = "block"
110 | }
111 |
112 | searchBtn.addEventListener('click', function () {
113 | document.querySelector('.main').style.display = 'none';
114 | clearInterval(timer);
115 | const search = document.getElementById('search');
116 | getImages(search.value)
117 | sliders.length = 0;
118 | })
119 |
120 | sliderBtn.addEventListener('click', function () {
121 | createSlider()
122 | })
123 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |