События

Readmore.js генерирует два основных события: readmore:beforeToggle и readmore:afterToggle. Эти события можно слушать и использовать для добавления кастомной логики в процессе переключения состояния элемента.

readmore:beforeToggle

Это событие вызывается перед изменением состояния элемента. Оно предоставляет возможность настроить поведение до того, как состояние элемента будет изменено.


					element.addEventListener('readmore:beforeToggle', function(event) {
						// Пример: изменяем стиль кнопки перед переключением состояния
						event.target.style.backgroundColor = 'gray';
					});
				

readmore:afterToggle

Это событие вызывается после изменения состояния элемента. Оно позволяет выполнить действия, как только состояние элемента изменится.


					element.addEventListener('readmore:afterToggle', function(event) {
						// Пример: изменяем текст кнопки после переключения состояния
						const button = event.target;
						button.textContent = button.textContent === 'Читать далее' ? 'Скрыть' : 'Читать далее';
					});
				

Обратные вызовы (Callbacks)

Readmore.js поддерживает использование callback-функций, которые можно передать в параметрах конфигурации. Это позволяет выполнять определенные действия на различных этапах работы плагина.

Обратные вызовы beforeToggle и afterToggle получают следующие аргументы: trigger, element и isExpanded.

  • trigger — элемент, который инициирует действие (например, кнопка «Читать далее» или «Закрыть»).
  • element — элемент, содержащий контент, который сворачивается или раскрывается.
  • isExpanded — значение, указывающее на состояние контента: (true — развернут, false — свернут).

beforeToggle

Срабатывает до переключения состояния элемента. Он позволяет выполнить действия перед изменением состояния.


					beforeToggle: function(trigger, element, isExpanded) {
						// Пример: делаем элемент полупрозрачным перед переключением состояния
						element.style.opacity = 0.5;
					}
				

afterToggle

Срабатывает после переключения состояния элемента. Он позволяет вернуть элемент в исходное состояние после изменения.


					afterToggle: function(trigger, element, isExpanded) {
						// Пример: восстанавливаем непрозрачность элемента после изменения состояния
						element.style.opacity = 1;
					}
				

blockProcessed

Вызывается после завершения обработки элемента, но до его отображения. Это полезно для выполнения первоначальных настроек или анализа.

Обратный вызов blockProcessed получает следующие аргументы: element и isExpandable

  • element — текущий элемент, который обрабатывается.
  • isExpandable — логическое значение, указывающее, нужно ли сворачивание.

					blockProcessed: function(element, isExpandable) {
						// Пример: если элемент можно развернуть, скрываем кнопку «Читать далее»
						if (isExpandable) {
							const button = element.querySelector('.cs_readmore-btn');
							if (button) {
								button.style.display = 'block';
							}
						} else {
							// Если элемент нельзя развернуть, скрываем кнопку
							const button = element.querySelector('.cs_readmore-btn');
							if (button) {
								button.style.display = 'none';
							}
						}
					}
				

Пример комплексного использования

Этот пример демонстрирует использование callback-функций для изменения внешнего вида и текста кнопки в зависимости от состояния элемента. В данном примере показано, как можно изменить стиль кнопки до и после переключения состояния:


					initReadMore('.content', {
						beforeToggle: function(trigger, element, isExpanded) {
							// Пример: изменяем цвет фона кнопки до переключения состояния
							trigger.style.backgroundColor = isExpanded ? '#90EE90' : '#FF7F7F';
						},
						afterToggle: function(trigger, element, isExpanded) {
							// Пример: обновляем текст кнопки после переключения состояния
							trigger.textContent = isExpanded ? 'Скрыть' : 'Читать далее';
						},
						blockProcessed: function(element, isExpandable) {
							// Пример: добавляем класс, если элемент можно развернуть
							if (isExpandable) {
								element.classList.add('expandable');
							}
						}
					});