🌈 Основан на CSS3 Animation, использует React для построения, расширяемый и высокопроизводительный.
👉zerosoul.github.io/rc-bullets/
npm install --save rc-bullets
import React, { useEffect, useState } from 'react';
import BulletScreen, { StyledBullet } from 'rc-bullets';
const headUrl = 'https://zerosoul.github.io/rc-bullets/assets/img/heads/girl.jpg';
export default function Demo() {
// Экран субтитров
const [screen, setScreen] = useState(null);
// Содержание субтитра
const [bullet, setBullet] = useState('');
useEffect(() => {
// Инициализация экрана субтитров для определенного элемента страницы, обычно это большой блок. Настройки здесь применяются глобально
let s = new BulletScreen('.screen', { duration: 20 });
// или
// let s = new BulletScreen(document.querySelector('.screen'));
setScreen(s);
}, []);
// Обработка события изменения содержания субтитра
const handleChange = ({ target: { value } }) => {
setBullet(value);
};
// Отправка субтитра
const handleSend = () => {
if (bullet) {
// Добавление чистого текста
screen.push(bullet);
// или использование StyledBullet
}
};
}
``` screen.push(
<StyledBullet
head={headUrl}
msg={bullet}
backgroundColor={'#fff'}
size='large'
/>
);
// or you can use this way, the effect is similar to using the StyledBullet component
screen.push({msg: bullet, head: headUrl, color: "#eee", size: "large", backgroundColor: "rgba(2,2,2,.3)"})
}
};
return (
<main>
<div className="screen" style={{ width: '100vw', height: '80vh' }}></div>
<input value={bullet} onChange={handleChange} />
<button onClick={handleSend}>Отправить</button>
</main>
);
}
```## Возможности
- Поддерживает передачу React-компонентов, что позволяет гибко контролировать содержание и внешний вид субтитров, а также предоставляет встроенную компоненту стилей `<StyledBullet />`.
- Управление экраном субтитров: очистка, приостановка, скрытие (в будущем могут быть добавлены возможности управления отдельными субтитрами).
- Параметризация анимации субтитров: функции движения (постоянная скорость/ease/шаговая/cubic-bezier), длительность (в секундах), количество повторений, задержка и т.д.
- При наведении указателя мыши на субтитр он приостанавливается.
## Часто используемые API
- Инициализация экрана с буллетами: `const screen = new BulletScreen(<queryString>|<HTMLElement>, [<option>])`, где параметр `option` используется также в других местах, обычно для глобальной инициализации. Если параметр `option` не указан, используются значения по умолчанию. При отправке каждого нового сообщения буллета, если параметр `option` не передается, используются либо значения по умолчанию, либо глобальные настройки.
- Отправка буллета: `const bulletId = screen.push(<string>|<ReactElement>, [<option>])````markdown
`option`:| Опция | Значение | Тип значения | По умолчанию | Примечание |
| -------------- | -------------------- | ----------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------|
| top | Расположение субтитров | строка | неопределено | Устанавливает расстояние от верха, аналогично CSS свойству `top` |
| trackHeight | Высота дорожки | строка | 50px | Указывает высоту каждой дорожки |
| onStart | Функция начала анимации | функция | null | Например, `(bulletId, screen) => { // выполните что-то }`. Можно задать свои действия, такие как воспроизведение звука или приостановка субтитра: `screen.pause(bulletId)` |
| onEnd | Функция завершения анимации | функция | null | Например, `(bulletId, screen) => { // выполните что-то }`. Можно задать свои действия, такие как воспроизведение звука |
| pauseOnClick | Приостановление по клику | логическое значение | false | Второй клик продолжает |
| pauseOnHover | Приостановление по наведению мыши | логическое значение | true | При входе в область приостановка, при выходе продолжение |
| loopCount | Количество повторений | число/строка | 1 | Значение 'infinite' указывает на бесконечное количество повторений | | duration | Длительность прокрутки | число/строка | 10 | Число указывает длительность в секундах, строка поддерживает единицы времени '10s' и '300ms' | | delay | Задержка | число/строка | 0 | Число указывает задержку в секундах, строка поддерживает единицы времени '10s' и '300ms'. Поддерживает все значения CSS свойства animation-delay| | direction | Анимационное направление | string | normal | animation-direction поддерживает все значения | | animateTimeFun | Анимационная функция | string | linear | animation-timing-function поддерживает все значения |
Замечено, что некоторые строки содержали лишние символы после закрывающей скобки ]
, они были удалены для корректного отображения таблицы.Примечание: В данном случае "linear" было переведено как "линейная", что является наиболее подходящим термином в контексте CSS анимаций.
screen.clear([<bulletId>])
. Если аргумент не указан, очистит весь экран.screen.pause([<bulletId>])
. Если аргумент не указан, приостановит все буллеты.screen.resume([<bulletId>])
. Если аргument не указан, продолжит все буллеты.screen.hide([<bulletId>])
. Если аргумент не указан, скроет все буллеты.screen.show([<bulletId>])
. Если аргумент не указан, покажет все буллеты.<StyledBullet msg="<текст буллета>" head="<адрес аватара>" color="<цвет шрифта>" backgroundColor="<цвет фона>" size="<размер: small | normal | large | huge | пользовательский размер, основан на em, значение по умолчанию - normal>">
useBulletScreen
git clone https://github.com/zerosoul/rc-bullets.git && cd rc-bullets
npm i && npm run start
cd example && npm i && npm run start
MIT © zerosoul
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )