За последние 24 часа нас посетили 22799 программистов и 1269 роботов. Сейчас ищут 794 программиста ...

Реализация аудио-стрима на сайте под Yii2

Тема в разделе "Yii", создана пользователем 118_64, 16 июн 2020.

  1. 118_64

    118_64 Активный пользователь

    С нами с:
    8 янв 2015
    Сообщения:
    84
    Симпатии:
    2
    Добрый день. Необходимо добавить на сайт прослушивание аудио-композиций, которое не будет обрываться при переходе между страницами.

    Первое, что приходит в голову - весь сайт сделать на ajax, в том числе переходы между страницами, но это переделывание работающего функционала. Прошу совета, существуют ли другой подход и решения?
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Да ,переход между страницами на js.
     
    118_64 нравится это.
  3. 118_64

    118_64 Активный пользователь

    С нами с:
    8 янв 2015
    Сообщения:
    84
    Симпатии:
    2
    Если быть более точным, pjax.
     
  4. 118_64

    118_64 Активный пользователь

    С нами с:
    8 янв 2015
    Сообщения:
    84
    Симпатии:
    2
    Обернул код в
    PHP:
    1. <?php Pjax::begin(); ?>
    2.    // some code
    3. <?php Pjax::end(); ?>
    Возникла странная ситуация, хотя достаточно логичная: при перемещении по истории браузера или переходе на ранее посещенные страницы перестают работать все js-обработчики. Насколько я понимаю, из-за перестройки DOM. Изначально JavaScript подключался так:

    PHP:
    1.     <?php
    2.         $js = '$(function(){alert(123);})';
    3.         $this->registerJs($js, $this::POS_END);
    4.     ?>
    Существуют ли способы повторного включения JavaScript в обработку страницы после её перестройки посредством pjax?
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Да, вешать обработчики на вышестоящие элементы. У вас всё равно jQuery, так что так делается:
    Код (Javascript):
    1. $("body").click(".element-class", function () {/* ... */});
    --- Добавлено ---
    Вместо body можно любой элемент, который не затирается пиджаком при работае
     
    118_64 нравится это.
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Лучше уж через делегирование тогда:
    Код (Javascript):
    1. $(document).on('click', '.element-class', function() {/* ... */});
     
    118_64 нравится это.
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    @Artur_hopf Точно, давно не писал на jQuery, забыл. Сейчас всё больше на ангулярке фронты делаю на работе

    @118_64 См. ответ @Artur_hopf, я ошибся.
     
  8. 118_64

    118_64 Активный пользователь

    С нами с:
    8 янв 2015
    Сообщения:
    84
    Симпатии:
    2
    @mkramer, @Artur_hopf, спасибо большое, про это я и забыл. Заработало!
     
  9. 118_64

    118_64 Активный пользователь

    С нами с:
    8 янв 2015
    Сообщения:
    84
    Симпатии:
    2
    Возникла интересная ситуация при работе с Pjax:

    страница А, на которую ставятся обработчики, корректно отрабатывает скрипты, если изначально загружали её, затем переходили на страницу Б, а потом возвращались на А. Но если изначально загружать страницу Б, то страница А скрипты не видит, за исключением скриптов, размещенных внутри dropDownList и внутри Html::script

    Убил на это почти два дня, проблему решить не смог. Кто-то может подсказать решение?
     
  10. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    include страницу S на которой будут скрипы которая будет всегда подключатся с остальными страницами))
     
    118_64 нравится это.
  11. 118_64

    118_64 Активный пользователь

    С нами с:
    8 янв 2015
    Сообщения:
    84
    Симпатии:
    2
    спасибо! ) Перенёс js-скрипты со всех страниц в один общий и подключил его за пределами pjax. Всё заработало как нужно.
     
  12. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    ну все таки бездумно делать это не нужно, только общие скрипты объединяйте. Когда все в одном месте, потом тяжело это обслуживать.
     
    118_64 нравится это.