Сниппет, создающий кнопку, которая раскрывает дополнительный текст на JavaScript.
Пример текста
Как уже неоднократно упомянуто, стремящиеся вытеснить традиционное производство, нанотехнологии освещают чрезвычайно . интересные особенности картины в целом, однако конкретные выводы, разумеется, объединены в целые кластеры себе подобных! Прежде всего, курс на социально-ориентированный национальный проект прекрасно подходит для реализации системы массового участия.
Шаг 1) Добавляем HTML:
Как уже неоднократно упомянуто, стремящиеся вытеснить традиционное производство, нанотехнологии освещают чрезвычайно.интересные особенности картины в целом, однако конкретные выводы, разумеется, объединены в целые кластеры себе подобных! Прежде всего, курс на социально-ориентированный национальный проект прекрасно подходит для реализации системы массового участия.
Шаг 2) Добавляем CSS:
#more
Шаг 3) Добавляем JavaScript:
Кнопка показать больше, как сделать что бы скрывала только часть текста?
codepen.io/freeman0204/pen/jqRQzB кнопка сейчас скрывает все, а мне нужно что бы изначально было видно например 3 сроки а то что ниже скрыто, и кнопка открывала и скрывала тот текст что ниже. Как сделать это лаконично?
Вопрос задан более трёх лет назад
28153 просмотра
Комментировать Решения вопроса 1
А вы сделайте блок, в который не всё влазит. CSS-класс с конкретной высотой и overflow-y: hidden; По нажатию на «показать всё» CSS-класс удалять, и блок сам развернётся «во весь рост».
Ответ написан более трёх лет назад
freeman0204 @freeman0204 Автор вопроса
Сделал codepen.io/freeman0204/pen/jqRQzB но мне нужно что бы плавно было и если нажать еще раз то назад скрылось. Как это сделать?
https://jsfiddle.net/oy3zo0un/1/ решение корявенькое, но работает) Ответы на вопрос 0 Ваш ответ на вопрос
Войдите, чтобы написать ответ
JavaScript
+1 ещё
Как сделать горизонтальный виртуальный скролл?
1 подписчик
11 минут назад
6 просмотров
Как реализовать кнопку «Показать еще »?
Есть блок с отзывами, по нажатию на кнопку «Показать еще» нужно сделать чтобы появлялись следующих два отзыва и так до последнего отзыва, после этого кнопка скрывалась. Библиотеки не советовать.
Вопрос задан более трёх лет назад
9705 просмотров
2 комментария
Простой 2 комментария
Владимир Проскурин @Vlad_IT Куратор тега JavaScript
Пробуйте что-то сделать. Мы не знаем в каком виде у вас данные, в каком виде разметка. Что не получается, спрашивайте. Это нужно писать, за вас никто не сделает.
Библиотеки не советовать.
Что вы хотите услышать? Напишите код, который подгружает по аяксу два отзыва, если нет больше ответа — скрывайте кнопку
Решения вопроса 0 Ответы на вопрос 3
Учим yii: https://youtu.be/-WRMlGHLgRg
Универсальное решение для любых сайтов, с любыми отзывами, любой разметкой:
Ответ написан более трёх лет назад
Нравится 3 2 комментария
Shadowman69 @Shadowman69
Shadowman69,на любой «как сделать сайт?» всегда найдется
Люблю корейскую кухню и веб-разработку
1) Грузим первые N записей и получаем признак есть ли ещё записи после них 2) Запоминаем id последней загруженной и признак есть ли ещё 3) Если есть ещё, показываем кнопку «Загрузить ещё», на нет и суда нет, return; 4) При нажатии кнопки «Загрузить ещё» передаём сохранённый id, чтобы бэкенд грузил следующие с id меньше, чем мы передали Повторить пока не юзер не загрузит все оставшиеся записи
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать Ваш ответ на вопрос
Войдите, чтобы написать ответ
JavaScript
+1 ещё
Как сделать горизонтальный виртуальный скролл?
1 подписчик
11 минут назад
6 просмотров
Кнопка «Показать ещё» на чистом JavaScript
Кнопка «Показать ещё» обычно применяется, когда у нас очень много контента и его нужно вывести не весь сразу, а постепенно (небольшими порциями). Для этого весь контент разбивается на страницы.
При этом сначала отображается только первая страница (на этом примере это две карточки) и кнопка «Загрузить ещё» . Если пользователь хочет посмотреть ещё записи ( следующую страницу ), то он просто нажимает на кнопку .
Это похоже на постраничную навигацию, но только предыдущие записи остаются на месте, а новые добавляются после них . При этом обычно это на сайте реализуется с использованием AJAX, то есть без перезагрузки страницы.
Шаг 1. Написание backend-кода на PHP
Перед тем как перейти к разработке frontend-кода, необходимо сначала написать серверный сценарий, который будет обрабатывать наш запрос и возвращать ответ в формате JSON. Можно конечно и в формате HTML, но это уже будет очень простой случай, который в рамках этой статьи рассматривать не будем.
Серверный сценарий напишем, например, на PHP. Кроме этого, не забываем, чтобы он работал необходимо установить веб-сервер с поддержкой PHP на локальную машину.
Для написания кода на PHP создадим файл, например, с именем more.php в корне сайта.
Данные в этом примере будем получать для простоты из подготовленного массива, а не из базы данных:
Количество записей на одной странице будем определять с помощью константы LIMIT :
const LIMIT = 2;
Сейчас у нас одна страница будет состоять из 2 записей. Всего записей (элементов в массиве) узнаем с помощью функции count :
$total = count($articles);
Номер страницы ( page ) будем передавать серверу через POST. В скрипте на PHP для получения этого значения воспользуемся глобальной переменной $_POST[‘page’] :
$page = (int)($_POST['page'] ?? 1);
Дополнительно на странице клиента будем отображать кроме самих данных ещё их оставшееся количество. Вычисление оставшегося количества записей будем выполнять следующим образом:
$remain = $total - $page * LIMIT;
Сами отдаваемые данные будем получать как срез массива с помощью array_slice :
Теперь давайте проверим, что выведет полученный PHP-файл, сохранённый в корне сайта под именем more.php . Для этого откроем браузер и в адресной строке введем путь к нему (в данном случае: http://localhost/more.php ):
В окне браузера мы видим JSON-код, то есть результат выполнения файла more.php на сервере.
Шаг 2. Создание HTML-кода
Теперь, после того как серверный код работает, создадим HTML-страничку index.html :
Все элементы, связанные с кнопкой «Показать ещё» обернём в .cards :
Начнем написание HTML-кода с разметки контейнера для карточек. Добавлять карточки в контейнер будем с помощью JavaScript, поэтому этот элемент у нас будет пустым:
Кроме кнопки у нас ёще будет блок .cards-progress , в котором расположим прогресс-бар и текстовую информацию о количестве показанных карточек:
Ну и сама кнопка:
У кнопки имеется атрибут data-page , который будем использования для хранения количества показанных страниц.
Кнопка у нас имеет svg-иконку, которую создали посредством . При этом сама она определена в с использованием , который вставили сразу после открывающего тега :
Шаг 3. Стилизация карточек и кнопки
Создавать CSS-код будем в отдельном файле main.css, который расположим рядом с index.html . Подключение main.css к index.html выполним с помощью :
Вёрстку контейнера ( .card-container ), в который мы будем добавлять карточки, выполним через флексы:
Расстояние между карточками зададим с помощью CSS-свойство gap .
Карточка товара ( .card ) у нас будет состоять из изображения ( .card-img ) и заголовка ( .card-title ). Для оформления самой карточки и её элементов будем использовать следующие стили:
При нажатии на кнопку она будет переводиться в неактивное состояние ( disabled ). Кроме этого, к ней будет добавляться с помощью JavaScript класс btn-more-loading , который будет активировать CSS-анимацию, и иконка в кнопке будет непрерывно вращаться.
Стилизацию прогресс-бара и дополнительной информации, расположенного рядом с ним, выполним следующим образом:
Прогресс-бар – это очень полезный элемент, который позволяет увидеть пользователям количество показанных и оставшихся карточек. Кроме этого, с помощью него они могут оценить, насколько большим является список и сколько времени им потребуется для просмотра всех элементов.
Вся разметка, связанная с кнопкой «Показать ещё» у нас находятся в корневом элементе .card . Его стилизацию в рамках этого примера выполним так:
.cards { max-width: 400px; margin: 1rem auto; }
То есть ограничим его ширине и выровняем по центру, а также добавим внешние отступы сверху и снизу.
Для скрытия элементов мы будем использовать класс d-none :
/* Класс для скрытия элемента */ .d-none { display: none; }
В этом примере у нас он используется для скрытия кнопки «Показать ещё», когда все карточки уже отображены и загружать уже больше нечего. Добавляется он в этом случае к элементу с помощью JavaScript. Кроме этого, d-none используется ещё в HTML-коде для скрытия .
Шаг 4. Добавление функциональности к кнопке с помощью JavaScript
Всю функциональность, связанную с кнопкой на странице, будем выполнять с помощью JavaScript, который напишем без использования каких-либо библиотек. Для этого создадим файл main.js и подключим его к нашей HTML-странице:
Теперь напишем асинхронную функцию, которая будет выполняться при нажатии на кнопку, то есть она у нас будет использоваться в качестве обработчика события click :
JavaScript
const loadMoreCards = async (e) => { try { // получим элемент, на котором произошло событие, в данном случае кнопку const targetElem = e.target; // получим корневой элемент, в котором располагаются вся разметка, связанная с карточками и кнопкой const cardsElem = targetElem.closest('.cards'); // сделаем кнопку неактивной targetElem.disabled = true; // добавим к кнопке класс btn-more-loading, который добавляет анимацию вращения для иконки targetElem.classList.add('btn-more-loading'); // создадим новый объект класса FormData const body = new FormData(); // добавим в body номер текущей страницы body.append('page', targetElem.dataset.page); // получим ответ от сервера const response = await fetch('more.php', {method: 'POST', body}); // выполняем действия указанные в if, если ответ от сервера успешный if (response.ok) { // читаем ответ от сервера как JSON и преобразовываем его в объект JavaScript const result = await response.json(); // выполняем код анонимной функции, переданной в качестве аргумента методу setTimeout, через 500мс window.setTimeout(() => { // скрываем кнопку загрузки, если все карточки показаны result.remain { let html = result.template; Object.keys(item).forEach((field) => { html = html.replaceAll(`{{${field}}}`, item[field]); }) return html; }); // устанавливаем в качестве содержимого элемента .cards-count количество показанных карточек cardsElem.querySelector('.cards-count').textContent = result.total - result.remain; // устанавливаем в качестве содержимого элемента .cards-total общее количество карточек cardsElem.querySelector('.cards-total').textContent = result.total; // обновляем ширину прогресс-бара, отвечающего за количество показанных карточек cardsElem.querySelector('.progress-bar').style.width = `${(result.total - result.remain) / result.total * 100}%`; // вставляем карточки в контейнер document.querySelector('.card-container').insertAdjacentHTML('beforeend', cards.join('')); // удаляем анимацию иконки, с помощью удаления класса btn-more-loading targetElem.classList.remove('btn-more-loading'); // делаем кнопку доступной для нажатия targetElem.disabled = false; }, 500); } } catch (error) { console.error(error); } }
Этот код выполняет в следующем порядке вот эти действия:
переводит кнопку в неактивное состояние, чтобы пользователь не мог выполнить это действие ещё раз пока не завершится текущее;
включает анимацию для иконки, расположенной в кнопке, посредством установки класса btn-more-loading ;
отправляет с помощью fetch на сервер запрос методом POST и передаёт в его теле номер запрашиваемой страницы;
ждёт ответа от сервера в формате JSON;
отключает видимость кнопки «Загрузить ещё», если мы показали все записи;
обновляет значение атрибута data-page у кнопки;
формирует HTML-код карточек, используя полученный шаблон от сервера и данные;
вставляет сформированный HTML-код карточек в контейнер, используя метод insertAdjacentHTML ;
обновляет прогресс-бар и количество показанных карточек;
удаляет класс btn-more-loading , который использовался для включения анимации иконки;
переводит кнопку в активное состояние, то есть делаем её доступной для следующего нажатия;
Теперь созданную функцию loadMoreCards укажем в качестве обработчика события click :