Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.11.2020, 19:44
Интересующийся
Отправить личное сообщение для Sergey-web92 Посмотреть профиль Найти все сообщения от Sergey-web92
 
Регистрация: 02.10.2020
Сообщений: 20

Как изменить количество фотографий на странице без перехода на другую страницу?
Здравствуйте! Помогите пожалуйста разобраться.
Делаю для сайта пагинацию. У меня по умолчанию на всех страницах отображается по три фотки. Мне нужно, чтобы при нажатии на верхние кнопки- количество фоток менялось на странице мгновенно(кнопка "2-count"-показывает по две фотки на странице, кнопка "3-count"-показывает по три фотки).
У меня меняется количество фоток при нажатии кнопок "2-count" или "3-count", но только при дальнейшем переходе на следующую страницу(при нажатии на нижние кнопки).

П.С. сначала я нажимаю на любую нижнюю кнопку(отвечающую за номер страницы) => отображаются фотки на странице. кнопки вверху отвечают за количество фоток, отображаемых на выбранной странице.

<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
<style type="text/css">
#table td {
  padding: 10px;
  border: 1px solid black;
}

#pagination {
  display: flex;
  padding: 0;
  list-style-type: none;
}
#pagination li {
  margin-right: 5px;
  padding: 10px;
  border: 1px solid black;
}
#pagination li:hover,
#pagination li.active {
  cursor: pointer;
  color: red;
  border: 1px solid red;
}

.flex-wrap {
  width: 100%;
  height: 100%;
  display: flex;
  justify-content: center;
}

#table {
  width: 90%;
  height: 100%;
  display: flex;
  justify-content: center;
}

.testi {
  width: 33.33333%;
  height: 100px;
  margin: 10px;
  border: 1px solid blue;
}

// test content

.main-content {
  width: 100%;
  height: 100%;
  border: 1px solid blue;
  display: flex;
  justify-content: center;
}
.test-table {
  width: 90%;
  height: 250px;
  border: 1px solid red;
  display: flex;
}
.test-img {
  width: 33.333333%;
  height: 100%;
  border: 1px solid green;
  background-image: url("https://picsum.photos/200/300?random=2");
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
  padding: 20px;
}

// ===
.picture_1 {
  background-image: url("https://picsum.photos/200/300?random=1");
  width: 100%;
  height: 100%;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}
.picture_2 {
  background-image: url("https://picsum.photos/200/300?random=2");
  width: 100%;
  height: 100%;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}

.picture_3 {
  background-image: url("https://picsum.photos/200/300?random=3");
  width: 100%;
  height: 100%;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}

.picture_4 {
  background-image: url("https://picsum.photos/200/300?random=4");
  width: 100%;
  height: 100%;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}

.picture_5 {
  background-image: url("https://picsum.photos/200/300?random=5");
  width: 100%;
  height: 100%;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}
.picture_6 {
  background-image: url("https://picsum.photos/200/300?random=6");
  width: 100%;
  height: 100%;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}

</style>
</head>

<body>
<main class="page-main">
        <div class="button-container">
            <button class="twobtn">2-count</button>
            <button class="threebtn">3-count</button>
        </div>
        <div class="flex-wrap">
        <div id="table">
            
        </div>
        </div>
        <ul id="pagination">
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </main>
<script>
let users = [
	{name: 'picture_1'},
	{name: 'picture_2'},
	{name: 'picture_3'},
	{name: 'picture_4'},
	{name: 'picture_5'},
	{name: 'picture_6'},
];
let table = document.querySelector('#table');
let items = document.querySelectorAll('#pagination li');

let notesOnPage = 3;

for (let item of items) {
  item.addEventListener('click', function () {
    let pageNum = +this.innerHTML;
    
    let start = (pageNum - 1) * notesOnPage;
    let end = start + notesOnPage;

    let notes = users.slice(start, end);
   
    table.innerHTML = '';

    for (let note of notes) {
      let tr = document.createElement('div');
      tr.classList.add('testi');
      table.appendChild(tr);

      let td;

      td = document.createElement('div');
      td.classList.add(note.name);
      tr.appendChild(td);
    }
  })
}

// test button pagination


const togglet = document.querySelector(".twobtn")
const togglett = document.querySelector(".threebtn")


togglet.addEventListener("click", function(){
  notesOnPage = 2;
});
togglett.addEventListener("click", function(){
  notesOnPage = 3;
});
</script>
</body>
</html>

Последний раз редактировалось Sergey-web92, 21.11.2020 в 19:46.
Ответить с цитированием
  #2 (permalink)  
Старый 21.11.2020, 20:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Sergey-web92,
что делают кнопки 1, 2, 3?
Ответить с цитированием
  #3 (permalink)  
Старый 21.11.2020, 21:02
Интересующийся
Отправить личное сообщение для Sergey-web92 Посмотреть профиль Найти все сообщения от Sergey-web92
 
Регистрация: 02.10.2020
Сообщений: 20

Сообщение от рони Посмотреть сообщение
Sergey-web92,
что делают кнопки 1, 2, 3?
эти кнопки отвечают за страницы. при нажатии на кнопку 2 - откроется вторая страница, при нажатии на кнопку 3 - откроется третья страница.
Ответить с цитированием
  #4 (permalink)  
Старый 21.11.2020, 22:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

постраничный вывод фотографий
Sergey-web92,

<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
<style type="text/css">
#pagination {
    display: flex;
    padding: 0;
    list-style-type: none;
    justify-content: center;
}
#pagination li {
    margin-right: 5px;
    padding: 10px;
    border: 1px solid black;
}
#pagination li:hover,
#pagination li.active {
    cursor: pointer;
    color: red;
    border: 1px solid red;
}
.flex-wrap {
    width: 100%;
    height: 250px;
    display: flex;
    justify-content: center;
}
.flex-wrap div{
    width: 100%;
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
    background-image: var(--img);
    margin: 10px;
    border: 1px solid black;
    box-sizing: border-box;
}
.page-main {
    width: 90%;
    margin: 0 auto;
}
.button-container .btn:after{
    content: attr(data-count)
}
.button-container{
   display: flex;
   justify-content: center;
}
.button-container .btn{
   margin-right: 15px;
}
.button-container .btn.active{
     background-color: #FFFAFA;
     outline: none;
     font-weight: bold;
}
</style>
</head>
<body>
<main class="page-main">
                <div class="button-container">
                </div>
                <div class="flex-wrap">
                </div>
                <ul id="pagination">
                </ul>
        </main>
<script>
let users = [
    {name: 'https://picsum.photos/200/300?random=1'},
    {name: 'https://picsum.photos/200/300?random=2'},
    {name: 'https://picsum.photos/200/300?random=3'},
    {name: 'https://picsum.photos/200/300?random=4'},
    {name: 'https://picsum.photos/200/300?random=5'},
    {name: 'https://picsum.photos/200/300?random=6'}
];
let table = document.querySelector('.flex-wrap');
let pagination = document.querySelector('#pagination');
let index = 0;
let len = users.length;
let notesOnPage = 3;
const show = i => {
    table.innerHTML = '';
    for (let max = i + notesOnPage; i < max; i++) {
        let td = document.createElement('div');
        td.style.setProperty('--img', `url("${users[i].name}")`);
        table.append(td);
    }
}
show(index)
const page = () => {
    pagination.innerHTML = '';
    for (let i = 0; i < len; i += notesOnPage) {
        let li = document.createElement('li');
        li.textContent = (i / notesOnPage) + 1;
        let indexPage = Math.min(i, len - notesOnPage);
        li.dataset.index = indexPage;
        if (index >= indexPage && index < indexPage + notesOnPage) {
            li.classList.add('active');
            index = indexPage;
            show(index);
        }
        pagination.append(li);
    }
}
page();
pagination.addEventListener('click', ({target}) => {
    let i = target.dataset.index;
    if (i === void 0) return;
    pagination.querySelectorAll('li').forEach(li => li.classList.toggle('active', li === target));
    index = +i;
    show(index)
})

const buttonContainer = document.querySelector(".button-container");
const counts = [1, 2, 3, 5, 6];
const btnCount = ar => ar.forEach(num => {
    let btn = document.createElement('button');
    btn.classList.add('btn');
    if(num == notesOnPage) btn.classList.add('active');
    btn.dataset.count = Math.min(len, num);
    buttonContainer.append(btn);
})
btnCount(counts)

buttonContainer.addEventListener("click", ({target}) => {
    let count = target.dataset.count;
    if (count === void 0) return;
    buttonContainer.querySelectorAll('.btn').forEach(btn => btn.classList.toggle('active', btn === target));
    notesOnPage = +count;
    page();
});

</script>
</body>
</html>

Последний раз редактировалось рони, 22.11.2020 в 00:43.
Ответить с цитированием
  #5 (permalink)  
Старый 21.11.2020, 23:04
Интересующийся
Отправить личное сообщение для Sergey-web92 Посмотреть профиль Найти все сообщения от Sergey-web92
 
Регистрация: 02.10.2020
Сообщений: 20

рони, большое спасибо за Вашу помощь)
Ответить с цитированием
  #6 (permalink)  
Старый 22.11.2020, 00:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Sergey-web92,
код выше был изменён, количество фоток на страницу, можно задать, массивом значений, строка 118.
Ответить с цитированием
  #7 (permalink)  
Старый 22.11.2020, 17:22
Интересующийся
Отправить личное сообщение для Sergey-web92 Посмотреть профиль Найти все сообщения от Sergey-web92
 
Регистрация: 02.10.2020
Сообщений: 20

Сообщение от рони Посмотреть сообщение
Sergey-web92,
код выше был изменён, количество фоток на страницу, можно задать, массивом значений, строка 118.
понял, спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать, что бы див оставался на месте после перехода на следующую страницу? OklickSpb Общие вопросы Javascript 4 15.03.2012 22:02
Как перенаправить на другую страницу? phenix79 Events/DOM/Window 2 16.01.2012 12:15
Как передать переменную по ссылке на другую страницу сайта. Alekc Общие вопросы Javascript 6 01.12.2010 21:32
Как передать значение по ссылке на другую страницу сайта Rollo Общие вопросы Javascript 7 18.10.2010 15:02
Отправка POST через JS без перехода на другую страницу m-mikle Общие вопросы Javascript 17 14.04.2010 15:24