Сделайте диаграмму кликабельной при размещении под другим SVG <View>

У меня проблемы с работой SVG в React Native. У меня есть диаграмма, на которую можно кликать и которая работает хорошо, затем мне нужно было поместить еще один SVG поверх диаграммы, чтобы нарисовать линию, которая представляла бы значение предельной оценки. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я больше не могу нажимать на график, так как поверх него расположен вид SVG. Я сделал цвет фона SVG прозрачным, чтобы я мог хотя бы видеть диаграмму позади него, но я не знаю, как сделать его кликабельным снова.

Есть ли какая-нибудь работа, где я могу сделать диаграмму кликабельной в прозрачном виде, расположенном сверху?

Это может быть глупый вопрос, но я довольно плохо знаком с реакцией и JS в целом, поэтому я мог бы использовать любую помощь.:)

Вот изображение диаграммы:

Полярная диаграмма и SVG круг

И здесь тот же Svg с непрозрачным фоном, который, как вы можете видеть, покрывает почти диаграмму дырок.

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 ответ

Решение

Или:

  1. Переместите лимитную линию в график SVG, вместо того, чтобы класть ее отдельно сверху, или
  2. Задавать pointer-events: none на вершине SVG. Это заставит клики проходить прямо через него.
Другие вопросы по тегам