$(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") });
}
});
});
// Функция для получения начала строки до символа ":"
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;
}
}
}
import Vue from "vue";
import App from "./App.vue";
Vue.config.productionTip = false;
new Vue({ render: (h) => h(App) }).$mount("#app");
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;
decorators: [(Story) => {
const DecoratorComponent = styleDecorator();
return <DecoratorComponent><Story /></DecoratorComponent>
}],
<video controls autoplay muted loop>
<source src="URL_ВАШЕГО_ВИДЕО" type="video/mp4">
Ваш браузер не поддерживает HTML5 видео.
</video>
var alpha = ['a', 'b', 'c'],
numeric = [1, 2, 3];
var alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric); // Результат: ['a', 'b', 'c', 1, 2, 3]