我正在制作圆形菜单,因此我使用SVG创建了一个圆形,现在我想在圆形的一部分内显示带有某些图像的链接。我该怎么办?我的代码-
render(){ return( <svg id={"menuLevel" + index} width={200} height={200}> <path fill="white" stroke="rgba(0,0,0,0.2)" strokeWidth="2" d={"M"+width+","+width+" L"+previousX+", "+previousY+" A"+width+","+width+" 0 0,0 "+x+", "+y+" z"}></path> </svg> ) }
我尝试过这样的事情-
<path fill="white" stroke="rgba(0,0,0,0.2)" strokeWidth="2" d={"M"+width+","+width+" L"+previousX+", "+previousY+" A"+width+","+width+" 0 0,0 "+x+", "+y+" z"}> <foreignobject x="120" y="120" width="180" height="180"> <Link ...><Image .../></Link> </foreignobject> </path>
但这是行不通的,该异物仍然具有0宽度和0高度,并且内容不显示。
更新
我需要将链接组件分配给所有路径对象
<svg id={"menuLevel" + index} width={width*2+2} height={width*2+2}> {arr.map(function(item){ let angleInRadians = -item * Math.PI / 180.0; let previousX = x; let previousY = y; x = width + width * Math.cos(angleInRadians); y = width + width * Math.sin(angleInRadians); return( <path fill="white" stroke="rgba(0,0,0,0.2)" strokeWidth="2" d={"M"+width+","+width+" L"+previousX+", "+previousY+" A"+width+","+width+" 0 0,0 "+x+", "+y+" z"}> </path> ) })} </svg>
请在这里检查它JSFiddle。使用image元素将图像添加到SVG:https://developer.mozilla.org/zh- CN/docs/Web/SVG/Tutorial/SVG_Image_Tag
image
<svg width="5cm" height="4cm" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink"> <circle x="0" y="0" r="200"></circle> <image xlink:href="https://www.google.co.uk/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png" x="0" y="0" height="200px" width="200px"/> </svg>
请注意:
如果未设置x或y属性,则将它们设置为0。 如果未设置高度或宽度属性,则将它们设置为0。 将height或width属性设置为0将禁用图像渲染。
如果未设置x或y属性,则将它们设置为0。
如果未设置高度或宽度属性,则将它们设置为0。
将height或width属性设置为0将禁用图像渲染。
这是一个将React组件与图像一起添加的工作示例:JSFiddle。但是我将Link组件作为SVG的同级组件,然后absolute用于放置它们。不是一个完美的解决方案。
Link
absolute
要使路径可单击:JSFiddle。
这是具有可单击路径的图像,与ReactJS:JSFiddle集成在一起:
var Link = React.createClass({ render: function() { return <a className="link" href={this.props.href} target="_blank">{this.props.children}</a> } }); var Hello = React.createClass({ render: function() { return <div id="container"><svg xmlns="http://www.w3.org/2000/svg" width="300px" height="300px"> <Link href="http://www.google.com"> <g transform="translate(100, 100)"><image href="https://www.google.co.uk/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png" x="0" y="0" height="200px" width="200px"/></g> </Link> <Link href="http://www.facebook.com"> <g><image href="https://www.facebook.com/images/fb_icon_325x325.png" x="0" y="0" height="100px" width="100px"/></g> </Link> </svg></div> } });