• Как сделать автоматическую смену качества видео в js?

    @g_s_e
    <<< Как можно реализовать динамическую смену качества видео зависящую от скорости интернет соединения, как на ютюбе?
    Если я верно понимаю, то, что Вам нужно это HLS, https://ru.wikipedia.org/wiki/HLS. Суть такова, что изначально один и тот же видос разбивается на несколько копий, каждая из которых хранится в разном качестве, это все передается потоком в конструтор HLS плеера, который сам стримит видео из этого потока, проверяет скорость интернета и переключается в реалттайме между видео файлами разного качества. Вам нужно поресерчить по тегу HLS и полееру hls.js
  • Как сделать кроссдоменный запрос?

    @g_s_e
    я могу ошибаться, но если у Вас есть виртуальные, локальные хосты local1 и local2, и Вы пытаетесь достучаться именно к ним, к php файлам, то маловероятно что сработает эта строка header('Access-Control-Allow-Origin: localhost:3000'), поскольку на localhost:3000 обычно крутится запущенный локально Ror проект
  • Как реализовать автообновление страницы браузера клиента?

    @g_s_e
    New_Horizons, (ну либо websocket) маловероятно, websocket отрубает соединение, если пропал интернет, или терминал уйдет в гибернацию. После пробуждения/восстановления соединения обновленные данные не подтянутся, на клиент, без запроса клиента не сервер.
  • Почему переворачивается фото?

    @g_s_e
    Алексей Максимов: для полноты картины малоинфы, я частично просмотрел этот скрипт
    var max_reviews_page = 3;
    var max_album_photos = [];
    max_album_photos[4] = 57;
    max_album_photos[1] = 38;
    max_album_photos[2] = 13;
    max_album_photos[3] = 82;
    //
    var slide_active = 1;
    var slide_timer = 0;
    var slide_opacity = [];
    var reviews_page = 1;
    var page_opacity = 0;
    var photo_id = 1;
    var select_album = 0;
    var load_image = 0;

    var menu_block = document.getElementById('menu-block');
    var menu_SourceBottom = menu_block.getBoundingClientRect().bottom + window.pageYOffset;

    function slide_next(slide)
    {
    if (slide == slide_active) return 1;
    var old_slide = slide_active;
    if (slide == 0)
    {
    if (slide_active == 5) slide_active = 1;
    else slide_active++;
    }
    else slide_active = slide;
    document.getElementById('switch-'+old_slide+'').classList.remove('switch-active');
    document.getElementById('switch-'+slide_active+'').classList.add('switch-active');
    slide_opacity[old_slide] = 100;
    slide_opacity[slide_active] = 0;
    setTimeout("set_opacity("+old_slide+", "+slide_active+")", 10);
    clearInterval(slide_timer);
    slide_timer = setInterval("slide_next(0)", 5000);
    }

    function set_opacity(old_slide, new_slide)
    {
    slide_opacity[old_slide]--;
    slide_opacity[slide_active]++;
    document.getElementById("slide-"+old_slide+"").style.opacity = slide_opacity[old_slide]/100;
    document.getElementById("slide-"+slide_active+"").style.opacity = slide_opacity[slide_active]/100;
    if (slide_opacity[old_slide] != 0 && slide_opacity[slide_active] != 100) setTimeout("set_opacity("+old_slide+", "+slide_active+")", 10);
    }

    function service_hover(service_id)
    {
    document.getElementById("service-"+service_id+"-icon").src = "./assets/img/service_"+service_id+"_hover.png";
    document.getElementById("service-"+service_id+"-circle").style.backgroundColor = "#c09e7b";
    document.getElementById("service-"+service_id+"-name").style.textDecoration = "underline";
    }.......

    тут полный мрак, но если действовать в рамках костыля с классом "rotate_90", то через дебаггер, можно повернуть фотку в нормальное положение достаточно в стилькласса добавить св-во transform: rotate(270deg);