2016-12-15 1 views
1

Я пишу прокручивающийся тикер с переменным количеством компонентов, поэтому мне нужно его изменить, как далеко translate3d перемещает его в зависимости от количества компонентов. Единственный способ, которым я могу это сделать, - это как-то передать ему номер из файла JSX, но я не могу найти способ сделать это. Есть ли способ передать CSS переменную или какой-либо другой способ сделать то, что я хочу?Есть ли способ передать переменную из ReactJS в таблицу стилей CSS?

+2

Вы можете использовать javascript, чтобы вручную добавить встроенный стиль translate3d с необходимыми переменными, которые вы хотите. Это может помочь: https://facebook.github.io/react/docs/dom-elements.html#style –

+0

CSS не имеет * * переменных. Вы должны работать со свойствами элементов в дереве документов. –

+0

@Press Я пытался это сделать, но ключевой кадр не работает во встроенном стиле. – SaintWacko

ответ

3

Существует несколько библиотек « CSS in JS », которые позволяют добавлять keyframes в анимацию компонентов. Когда вы пишете стили в своем JavaScript, вы можете напрямую использовать компоненты/компоненты ваших компонентов или некоторые другие константы для создания стилей ваших компонентов.

3 Следующие библиотеки имеют ключевые кадры поддержки (я лично использую первый):

Styled-компоненты (GitHub)

import styled, { keyframes } from 'styled-components'; 

const rotate360 = keyframes` 
    from { transform: rotate(0deg); } 
    to { transform: rotate(360deg); } 
`; 

const Rotate = styled.div` 
    display: inline-block; 
    animation: ${rotate360} 2s linear infinite; 
`; 

Гламурная (GitHub)

import { css } from 'glamor' 

let bounce = css.keyframes('bounce', { 
    '0%': { transform: 'scale(0.1)', opacity: 0 }, 
    '60%': { transform: 'scale(1.2)', opacity: 1 }, 
    '100%': { transform: 'scale(1)' } 
}) 

<div {...css({ 
    animation: `${bounce} 2s`, 
    width: 50, height: 50, 
    backgroundColor: 'red' 
})}> 
    bounce! 
</div> 

Aphrodite (GitHub)

Больше чтения о «CSS в JS» шаблон

Надежда, что помогает! :)

0

Хотя не совсем то, на что я надеялся, я нашел способ заставить это работать. Оказывается, причина, по которой translate3d(100%, 0, 0) не работала, была из-за flexbox. Как только это было удалено из элемента, я смог контролировать скорость анимации, установив ширину элемента и время анимации, динамически создавая эти стили в React.

Смежные вопросы