#reactjs #react-native #react-animated
#reactjs #react-native #react-анимированный
Вопрос:
У меня есть список задач, каждый элемент списка имеет флажок. Когда я устанавливаю флажок, анимированный сквозной эффект должен отображаться слева направо. Как это сделать?
Ответ №1:
К сожалению, вы не можете анимировать удар напрямую, но я использовал несколько приемов для достижения того же эффекта.
import React from 'react';
import { Animated, Easing, Text, View, StyleSheet } from 'react-native';
export default function App() {
const ref = React.useRef(View.prototype);
const animatedValue = React.useRef(new Animated.Value(0)).current;
const [textWidth, setTextWidth] = React.useState(0);
const [textHeight, setTextHeight] = React.useState(0);
React.useEffect(() => {
ref.current.measure((x, y, w, h) => {
setTextWidth(w);
setTextHeight(h);
animateStrike();
});
}, []);
const animateStrike = () => {
Animated.timing(animatedValue, {
toValue: 1,
duration: 2000,
easing: Easing.linear,
useNativeDriver: false,
}).start();
};
const strikeWidth = animatedValue.interpolate({
inputRange: [0, 1],
outputRange: [0, textWidth],
extrapolate: 'clamp',
});
return (
<View style={styles.container}>
<View>
<Text style={styles.text} ref={ref}>
Some Dummy Text
</Text>
<Animated.View
style={[
styles.strike,
{ width: strikeWidth, top: textHeight / 2 1 },
]}
/>
</View>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
text: {
fontSize: 20,
fontWeight: '400',
},
strike: {
position: 'absolute',
height: 2,
backgroundColor: 'red',
},
});
Вы можете проверить демонстрацию здесь.
Комментарии:
1. Я не знаю, почему этот код не работает на моем локальном компьютере
2. @SupriyaGorai Ты проверял snack?
3. @SupriyaGorai Я рад. Спасибо. Удачи.
4. @J.Dow как я могу снова сбросить анимацию? как будто у меня есть флажок при нажатии на флажок, анимация выполняется правильно. но когда я снимаю флажок и снова проверяю, анимация не отображается, она отображается как обычная простановка
5. @SupriyaGorai Это помогло мне, когда я был новичком. Если вы предпочитаете react-native-reanimated, то это хорошая отправная точка.
Ответ №2:
Невозможно создать strikethough
текст с анимацией, но вы можете настроить его так, как это делается здесь Текстовая анимация с помощью CSS — strike through line
Вы можете создать пользовательскую горизонталь ProgressBar
и анимировать ее с помощью absolute on Text
, чтобы она выглядела так, как вы хотите.