当放置在另一个SVG下时,使图表可单击<view>

时间:2018-09-24 09:49:03

标签: react-native svg chart.js react-chartjs react-native-svg

在React Native中使用某些SVG时遇到麻烦。 我有一个可单击且运行良好的图表,然后需要在图表上方放置另一个SVG,以便绘制一条表示极限得分值的线。我现在面临的问题是,由于SVG的视图位于其上方,因此我无法再单击该图表。 我将SVG的背景色设为透明,以便至少可以看到其后面的图表,但是,我不知道如何再次使其可单击。

是否有什么方法可以使图表可点击槽通过顶部的透明视图显示?

这可能是一个愚蠢的问题,但是我通常对React和JS都是陌生的,所以我真的可以使用任何类型的帮助。 :)

这是图表的图片:

Polar Chart and Svg circle

在这里,同样的Svg具有不透明的背景,如您所见,几乎覆盖了整个孔图。

Svg covering the chart

这是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 个答案:

答案 0 :(得分:0)

要么:

  1. 将极限线移到图表SVG中,而不是将其单独放在顶部,或者
  2. 在顶部的SVG上设置pointer-events: none。这将使点击直接通过。