Поддержка Проблемы и решения Выключение циклической прокрутки плейлиста

  • При использовании шорткода [playlist] на основе wp_playlist_shortcode плейлист после проигрывания последнего трека переходит к проигрыванию первого и так до бесконечности. Этот алгоритм реализован здесь: /wp-includes/js/mediaelement/wp-playlist.min.js :
    ended : function () {
    if ( this.index + 1 < this.tracks.length ) {
    this.next();
    } else {
    this.index = 0;
    this.setCurrent();
    }
    },
    Требуется отключить эту возможность, желательно опционно.
    Примитивное решение — удалить else{…}, но это криво.

    Требуется хак (а лучше хук :), позволяющий встроить возможность отключить циклическую прокрутку плейлиста программными средствами. Второе, что приходит на ум это слушать событие ended, перехватывать его, определять не является ли трек последним в списке и т.д., то есть по сути повторить кусок алгоритма mediaelement.

    Надеюсь, что существует более красивое решение. Подозреваю, что я не первый, кто столкнулся с такой задачей.

    Благодарю за помощь и внимание.

    • Тема изменена 6 лет, 2 месяца назад пользователем Vadim Bogaiskov.
    • Тема изменена 6 лет, 2 месяца назад пользователем Vadim Bogaiskov.
Просмотр 1 ответа (всего 1)
  • Вот каким получился хак с отловом события ended. Я постарался подробно описать каждый шаг в комментариях.

    /*** НАЧАЛО: Хак - прерываем бесконечный цикл прокрутки плейлиста ***/
    	jQuery(function () {
    		// Ожидаем событие окончания проигрывания трека
    		jQuery('.mejs-mediaelement audio').on('ended', function (e) {
    			// Найдем первый элемент в списке плейлиста, 
    			// которому принадлежит проигрыватель (mejs-mediaelement audio) 
    			first_item = jQuery(this).closest("div.wp-playlist").find('.wp-playlist-item').first();
    			// Если первый элемент должен сейчас начать проигрываться (содержит класс wp-playlist-playing), 
    			// то есть завершился последний, то останавливаем плеер
    			if(first_item.hasClass('wp-playlist-playing')) {
    				e.preventDefault();				// Предотвратить стандартное действие
    				// Дождемся завершения загрузки трека, которая уже выполняется асинхронно 
    				this.addEventListener('loadeddata', function() {
    					loaded = true; 				// Загружен
    					this.pause();				// Стоп!!!
    				}, false);				
    			}
    		});
    	});
    /*** КОНЕЦ: Хак - прерываем бесконечный цикл прокрутки плейлиста ***/

    Однако хочется верить, что будет найдено более правильное решение (хак — есть хак). А еще лучше, если разработчики WP предусмотрят такую опцию в стандартном плеере.

Просмотр 1 ответа (всего 1)
  • Тема «Выключение циклической прокрутки плейлиста» закрыта для новых ответов.