• Как убрать зацикливание при включении видео?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    Когда ты ловишь "play" событие от сокета, ты вызываешь метод play() на своем плеере. Это побуждает плеер кинуть событие "play", которое ты тоже ловишь и отправляешь обратно на сервер. В итоге это зацикливается и бесконечно продолжается.

    Но это можно пофиксить. Введи какой-нибудь флаг, который будет показывать, вызван ли метод play() (или другие) твоим кодом или же пользователем. Потом этот флаг ты будешь проверять перед тем, как отправить событие на сервер.

    $(document).ready(function() {
        var socketio = io();
    
        let player = new Playerjs({
            id: "player",
            file: JSON.parse($("#player").attr("data-links"))
        });
    
        const playerFrame = $("#player"),
              messagesBox = $(".chat-box .messages"),
              messagesScroll = $(".chat-box"),
              chatInputs = $(".chat-inputs");
    
        let isApiCall = false; // флаг для отслеживания источника вызова
    
        socketio.on("play", (data) => {
            if (!player.api("playing")) {
                isApiCall = true; // устанавливаем флаг, что это вызов через API
                player.api("play");
                isApiCall = false; // сбрасываем флаг
            }
            player.api("seek", data.time);
        });
    
        socketio.on("pause", (data) => {
            if (player.api("playing")) {
                isApiCall = true; // устанавливаем флаг, что это вызов через API
                player.api("pause");
                isApiCall = false; // сбрасываем флаг
            }
        });
    
        socketio.on("seek", (data) => {
            isApiCall = true; // устанавливаем флаг, что это вызов через API
            player.api("seek", data.time);
            isApiCall = false; // сбрасываем флаг
        });
    
        playerFrame.on("play", (event) => {
            console.log(event.type)
            if(!isApiCall){ // отправляем событие только если это не вызов через API
                socketio.emit("play", { time: player.api("time") });
            }
        });
    
        playerFrame.on("pause", (event) => {
            console.log(event.type)
            if(!isApiCall){ // отправляем событие только если это не вызов через API
                socketio.emit("pause", {});
            }
        });
    
        playerFrame.on("seek", (event) => {
            console.log(event.type)
            if(!isApiCall){ // отправляем событие только если это не вызов через API
                socketio.emit("seek", { time: player.api("time") });
            }
        });
    });
    Ответ написан
  • Как удалить блок с таким-же textContent?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    Чтобы решить эту задачу, вы можете использовать следующий подход:

    Создайте функцию, которая будет принимать строку и возвращать часть строки до символа ":".
    Пройдитесь по всем элементам с классом "result_text_item" и сравните начало textContent текущего элемента с началом textContent всех предыдущих элементов, используя созданную функцию.
    Если найдено совпадение, удалите текущий элемент.
    Вот пример кода на JavaScript, который можно использовать для решения этой задачи:

    // Функция для получения начала строки до символа ":"
    function getStartOfText(text) {
      return text.split(":")[0];
    }
    
    // Получаем все элементы с классом "result_text_item"
    let items = Array.from(document.getElementsByClassName("result_text_item"));
    
    // Проходимся по всем элементам с конца (так как нам нужно удалять последний созданный элемент)
    for (let i = items.length - 1; i >= 0; i--) {
      // Получаем начало textContent текущего элемента
      let currentItemStart = getStartOfText(items[i].textContent);
      
      // Проверяем, есть ли совпадения с началом textContent других элементов
      for (let j = 0; j < i; j++) {
        if (getStartOfText(items[j].textContent) === currentItemStart) {
          // Если найдено совпадение, удаляем текущий элемент и прерываем цикл
          items[i].remove();
          break;
        }
      }
    }

    Обратите внимание, что этот код удаляет все последующие элементы, которые начинаются так же, как и любой предыдущий элемент. Если вам нужно проверять только совпадения с предыдущим элементом, вы можете слегка изменить этот код.
    Ответ написан
  • Как устранить ошибку в .ts файле?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    Проблема, по-видимому, связана с опечаткой в коде. В строке Vue.config.procutionTip = false; слово "procutionTip" скорее всего должно быть "productionTip".

    Vue.js использует свойство productionTip для вывода предупреждений о разработке в консоли при запуске приложения. Если вы установите его в false, то эти предупреждения будут отключены.

    Попробуйте исправить эту опечатку и снова запустите свой код. Ваш исправленный код должен выглядеть так:

    import Vue from "vue";
    import App from "./App.vue";
    
    Vue.config.productionTip = false;
    
    new Vue({ render: (h) => h(App) }).$mount("#app");


    Если вы все еще столкнётесь с ошибками после исправления этой опечатки, это может быть связано с конфигурацией TypeScript в вашем проекте, и вам, возможно, придется проверить файл tsconfig.json. Но исправление опечатки должно помочь устранить описанную вами проблему
    Ответ написан
  • Как добавить декоратор в storybook?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    В Storybook декораторы - это способ обеспечения произвольных компонентов-оберток для историй. Они могут быть использованы для обертывания историй в "декораторы" (то есть контекст компонента), предоставления данных и создания или изменения поведения каким-то образом.

    Из предоставленного файла preview.ts видно, что были попытки использовать декоратор (styleDecorator). Однако использование, похоже, неверное.

    Вот исправленный способ использования декоратора:
    import type { Preview } from '@storybook/react';
    import { styleDecorator } from '../../src/shared/config/storybook/styleDecorator/styleDecorator';
    
    const preview: Preview = {
        parameters: {
            actions: { argTypesRegex: '^on[A-Z].*' },
            controls: {
                matchers: {
                    color: /(background|color)$/i,
                    date: /Date$/,
                },
            },
        },
    
        decorators: [(Story) => (
            <styleDecorator>
                <Story />
            </styleDecorator>
        )],
    }
    export default preview;

    В этой исправленной версии Story отображается как дочерний элемент styleDecorator, предполагая, что styleDecorator - это компонент React, который применяет желаемые стили.

    Если styleDecorator - это функция, которая возвращает компонент React, код будет выглядеть так:
    decorators: [(Story) => {
        const DecoratorComponent = styleDecorator();
        return <DecoratorComponent><Story /></DecoratorComponent>
    }],


    Убедись, что styleDecorator правильно определён и экспортирован из указанного пути файла.

    Помните, что декоратор, определенный в preview.ts, будет применен ко всем историям в вашем Storybook. Если вы хотите применить декоратор к определенным историям, вы должны определить его в конкретном файле истории.

    Не забудь заменить styleDecorator на реальную реализацию вашего декоратора. styleDecorator должен предоставлять глобальные стили, которые хочешь применить
    Ответ написан
  • Как вставить видео с instagram в html?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    Вставить видео с Instagram напрямую на ваш сайт может быть сложно, так как Instagram не предлагает настраиваемые встраиваемые коды для видео, как это делают некоторые другие платформы, такие как YouTube.
    Тем не менее, вы можете использовать сторонние сервисы для получения прямой ссылки на видеофайл Instagram и использовать его на вашем веб-сайте с помощью тега . Вот шаги, которые вы можете выполнить:

    Сначала найдите видео, которое вы хотите вставить, на Instagram.
    Скопируйте URL этого видео.
    Используйте сторонний сервис или инструмент для скачивания видео с Instagram. Вы можете использовать сервисы, такие как "DownloadGram", "InstaOffline", "SaveFromWeb" и т.д.
    После скачивания видео вы можете загрузить его на ваш сервер или любое место хранения в Интернете, где оно будет доступно для публичного доступа.

    После загрузки видео используйте тег для его вставки на ваш веб-сайт. Например:

    <video controls autoplay muted loop>
      <source src="URL_ВАШЕГО_ВИДЕО" type="video/mp4">
      Ваш браузер не поддерживает HTML5 видео.
    </video>

    Замените URL_ВАШЕГО_ВИДЕО на URL видео, которое вы загрузили. В этом примере атрибуты controls, autoplay, muted и loop позволяют воспроизводить видео автоматически, без звука и зацикленно. Вы можете удалить или изменить эти атрибуты в соответствии с вашими потребностями.
    Ответ написан
    1 комментарий
  • Что должен знать senior frontend developer?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    Читайте лучше Д. Кнута, лучше в старом издании, правда про черно-красные деревья там их нет, но это можете погуглить. А потом у же переходить к js
    Ответ написан
    Комментировать
  • Как сохранять данные в object что бы потом циклом их выводить в поля?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    В объект можно засунуть массив и про нему пробегаться а в массив еще можно объектов накидать. Можно задать как свойство и к нему обращаться.. Слишком расплывчата задача
    Ответ написан
    Комментировать
  • Как структуризировать стили в приложении?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    Прочтика это друг по CSS модули во вью

    https://vue-loader.vuejs.org/ru/guide/css-modules....
    Ответ написан
    Комментировать
  • Как объединить два массива объектов в один массив?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    Предлагаю прогулятся до MDN

    Метод concat() возвращает новый массив, состоящий из массива, на котором он был вызван, соединённого с другими массивами и/или значениями, переданными в качестве аргументов.

    Соединение двух массивов
    Следующий код соединяет два массива:

    var alpha = ['a', 'b', 'c'],
        numeric = [1, 2, 3];
    
    var alphaNumeric = alpha.concat(numeric);
    
    console.log(alphaNumeric); // Результат: ['a', 'b', 'c', 1, 2, 3]
    Ответ написан
  • Как правильно спарсить DOM элемент с помощью Cheerio?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    1) Возьми экстешн для хрома jqueryinject и поработать с ней.
    2) request асинхронная функция должна быть и результат ждать await конечно как ты получишь если у тебя функция срабатывает, раньше, чем получает ответ
    3) А что ты хочешь вернуть в этом реквесте наверное контент юзай там еще цикл
    Ответ написан
  • Нужен совет по созданию игры 2d (runner)?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    на udemy есть курс по геймдеву на js рекомендую потратить месяца 2-3 на изучение работы с контекстами канвасов
    Ответ написан
  • По какому принципу взаимодействия с сервером работает React js?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    Есть реакт - это фронтээнд сервер и есть к примеру JSON- server или сервер с БД. т.е два сервера
    Ответ написан
    Комментировать
  • Является ли плохим приёмом скрывать h1 тэг с помощью vissualy-hidden, если дизайнер не добавил его в макет?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    Нет, если ты не отдаешь пользователю и поисковому роботу разные данные.
    Клоакинг - это когда простыня текста, а div с ней скрыт, те пользователь и робот видят разные вещи.
    Но сейчас темы с простыней и h1 \ h2 изжила себя, потому, как более чем 100 факторов сейчас играют роль.
    Сюда
    Ответ написан
    Комментировать
  • Можно ли создать "Студенческий портал" только с HTML/CSS + JS?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    Можно SPA на Vue сделать или React || Angular
    Ответ написан
    Комментировать
  • Почему не подключаются внешние скрипты?

    lookreciuspin
    @lookreciuspin
    Data recovery and truth revelation hacker
    попробуй и запусти из-под live server
    Ответ написан
    Комментировать