Сделайте диаграмму кликабельной при размещении под другим SVG <View>
У меня проблемы с работой SVG в React Native. У меня есть диаграмма, на которую можно кликать и которая работает хорошо, затем мне нужно было поместить еще один SVG поверх диаграммы, чтобы нарисовать линию, которая представляла бы значение предельной оценки. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я больше не могу нажимать на график, так как поверх него расположен вид SVG. Я сделал цвет фона SVG прозрачным, чтобы я мог хотя бы видеть диаграмму позади него, но я не знаю, как сделать его кликабельным снова.
Есть ли какая-нибудь работа, где я могу сделать диаграмму кликабельной в прозрачном виде, расположенном сверху?
Это может быть глупый вопрос, но я довольно плохо знаком с реакцией и JS в целом, поэтому я мог бы использовать любую помощь.:)
Вот изображение диаграммы:
И здесь тот же Svg с непрозрачным фоном, который, как вы можете видеть, покрывает почти диаграмму дырок.
Вот код SVG:
export class NutritionChartSvg extends Component {
render() {
return (
<View style={styles.container} >
<Svg height={height * 0.5} width={width * 0.5} viewBox="0 0 100 100">
<Svg.Circle
id="circle"
cx="50"
cy="13"
r="40"
stroke="gray"
strokeWidth="0.6"
fill="none"
/>
<Text fill="black" fontSize="8" dy="-2">
<TextPath href="#circle" startOffset='181'>
100
</TextPath>
</Text>
</Svg>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignContent: 'center',
justifyContent: 'center' ,
position: 'absolute',
left: '25%',
height: 'auto',
width: 'auto',
},
});'
Это форма диаграммы chartjs:
export const NutritionChart = (props) => {
return (
<Chart
chartConfiguration={
{
type: 'polarArea',
data: {
labels: ['Fiber', 'Protein', 'Healthy Oil', 'Good Energy', 'Immune
Defense'],
datasets: [
{
label: '# of Votes',
data: [
50,
140,
90,
120,
100,
],
backgroundColor: backgroundColor,
borderColor: borderColor,
borderWidth: datasets.border,
hoverBackgroundColor: hoverBackgroundColor,
},
],
},
options: {
layout: {
padding: {
top: options.layout.padding.top,
bottom: options.layout.padding.bottom,
}
},
legend: {
display: false,
fullWidth: false,
labels: {
fontSize: options.legend.labels.fontSize,
boxWidth: options.legend.labels.boxWidth,
padding: options.legend.labels.padding,
}
},
scale: {
display: false,
ticks: {
min:0,
max:200,
}
},
responsive: true,
maintainAspectRatio: false,
},
}
}
defaultFontSize={10}
/>
);
};
и они вместе в представлении:
<View style={styles.nutritionChart} key={3}>
<NutritionChart/>
<NutritionChartSvg/>
</View>
1 ответ
Или:
- Переместите лимитную линию в график SVG, вместо того, чтобы класть ее отдельно сверху, или
- Задавать
pointer-events: none
на вершине SVG. Это заставит клики проходить прямо через него.