Как мне заставить мой currentProgresstext
следовать за индикатором выполнения, сейчас кажется, что установка для ProgressWidth значения 100 приводит к тому, что текст появляется слева (после индикатора выполнения). И текст индикатора выполнения исчезает, когда progressWidth
маленький. Мой вопрос: как я могу заставить текст следовать за индикатором выполнения?
Вот мой код
import { Text, View, StyleSheet } from 'react-native';
import React, {useState} from 'react';
import { responsiveWidth } from 'react-native-responsive-dimensions';
import { Feather } from '@expo/vector-icons';
type Props = { containerStyle?: object };
const CartStatusOverlay: React.FC<Props> = (): JSX.Element => {
const minTotalOrderQuantity = 18;
const maxTotalOrderQuantity = 20;
const width = responsiveWidth(90);
// Max would be 90
const [progressWidth, setProgressWidth] = useState(10);
const convertKgToPercentage = (kg: number) => {
return kg / maxTotalOrderQuantity * 100;
}
return (
<View
style = {[
styles.overlay,
{ width: width },
]} >
<View style = {styles.currentProgress}>
<View style = {[styles.content, {width: `${progressWidth}%`}]}>
{/*<Feather name = "shopping-cart" size = {24} color = "white" />*/}
<Text style = {styles.currentProgressText}>6 Kg</Text>
</View>
</View>
{/*<View style = {styles.line}>*/}
{/* <Text style = {styles.lineText}>18 Kg</Text>*/}
{/*</View>*/}
{/*<View style = {styles.separator}><Text></Text></View>*/}
{/*<View style = {styles.rightContainer}>*/}
{/*</View>*/}
</View>
);
};
const styles = StyleSheet.create({
overlay: {
flexDirection: 'row',
height: 60,
borderRadius: 24,
backgroundColor: '#cfebf7',
// justifyContent: 'space-between',
alignItems: 'center',
},
content: {
paddingHorizontal: 20
},
currentProgress: {
flexDirection: 'row',
height: 60,
borderRadius: 24,
backgroundColor: 'skyblue',
// justifyContent: 'space-between',
alignItems: 'center',
},
currentProgressText: {
width: "100%",
backgroundColor: "red",
color: "white",
fontSize: 16,
// flex: 1,
fontWeight: "bold",
textAlign: "right",
alignSelf: "flex-end"
},
line: {
padding: 0,
borderLeftWidth: 1,
height: "100%",
position: "absolute",
borderLeftColor: "black",
},
lineText: {
alignItems: "center"
},
rightContainer: {
width: '30%',
flex: 1,
marginLeft: 4,
},
});
export default CartStatusOverlay;
Вот как это выглядит сейчас, когда progressWidth
из 50
Вот чего я хочу добиться:
Jsfiddle: https://jsfiddle.net/psahmad/fxpmnh15/
🤔 А знаете ли вы, что...
JavaScript поддерживает работу с различными форматами данных, такими как JSON и XML.
Я поигрался с вашим fiddle
проектом и добился результата, настроив следующие классы
.content {
padding: 0 20px;
width: 100%;
display: flex;
flex-direction: row;
justify-content: flex-end
}
.currentProgressText {
width: 100%;
color: white;
font-size: 16px;
font-weight: bold;
text-align: right;
}
Я добавляю justify-content: flex-end
только в .currentProgress
и удаляю width: 100%
в .content
.
.currentProgress {
display: flex;
flex-direction: row;
height: 60px;
border-radius: 24px;
background-color: skyblue;
align-items: center;
width: 90%;
/* progressWidth */
justify-content: flex-end;
}
.content {
padding: 0 20px;
}
Я решил это, изменив CSS на .content
.
Перед редактированием:
.content {
padding: 0 20px;
width: 100%;
}
После редактирования:
.content {
margin-left: auto;
padding: 0 20px;
}
https://jsfiddle.net/65hc9da3/
вам нужно отрегулировать его положение относительно ширины индикатора выполнения. Всегда используйте абсолютное позиционирование текста. Я написал код в Expo Snack, вы можете изменить код.