使用 D3 为 svg 填充背景图像
Using D3 to fill an svg with a background image
我已经发布了一些关于此的其他问题,现在已经放弃了我以前的 bootstrap 使用 D3 的实体 svg 条带的框架。
我的目标是用 3 个三角形遮盖 3 个图像,这些图像可单击以仅在三角形内寻呼锚链接。 (理想情况下,我也想在悬停时添加过渡到圆形的效果,但我现在不担心了)。
到目前为止,我有下面的 jsfiddle,但无法取消旋转三角形内的图像,或使背景只是一个图像而不是像现在这样的封面。我也尝试了 CSS 背景图像,但没有成功。
这是我的一段 d3.js 代码,下面是完整的 jsfiddle。
var svg = d3.select(".mydiv").append("svg").attr("width",width).attr("height",height);
var defs= svg.append('defs')
defs.append('pattern')
.attr('id', 'pic1')
.attr('patternUnits', 'userSpaceOnUse')
.attr('width', 100)
.attr('height', 100)
.append('svg:image')
.attr('xlink:href', 'http://placehold.it/1749x1510')
.attr("width", 100)
.attr("height", 100)
.attr("x", 0)
.attr("y", -10);
svg.append("a")
.attr("xlink:href", "http://www.google.com")
.append('path')
.attr("overflow","hidden")
.attr("d", d3.svg.symbol().type("triangle-up").size(10000))
.attr("transform", function(d) { return "translate(" + 300 + "," + 200 + ") rotate(0)"; })
.attr("fill", "url(#pic1)");
http://jsfiddle.net/5Ldzk5w6/2/
感谢您花时间或帮助修复这些图像!
如果你想让图案填满三角形,让它们和三角形一样大。你的图案是 100x100,但你的三角形比那个大得多。所以模式在重复。
如果您不想旋转图案填充,请不要旋转三角形。
如果您不希望图案中的图像被压扁,请定义您的图案,使其具有相同的纵横比。您的图像是矩形的,但您将它们压缩成正方形 (100x100)。
下面是一个固定的演示示例。 Complete fiddle here
var width = 800;
var height = 200;
var svg = d3.select(".mydiv").append("svg")
.attr("width",width)
.attr("height",height)
.attr("viewBox", "0 0 250 100");
var defs= svg.append('defs')
defs.append('pattern')
.attr('id', 'pic1')
.attr('patternUnits', 'userSpaceOnUse')
.attr('width', 115.5)
.attr('height', 100)
.append('svg:image')
.attr('xlink:href', 'http://cammac7.github.io/img/portfolio/LRO.jpg')
.attr("width", 115.5)
.attr("height", 100)
.attr("x", 0)
.attr("y", 0);
svg.append("a")
.attr("xlink:href", "http://www.google.com")
.append('path')
.attr("d", "M 0,0, 57.7,-100, 115.5,0z")
.attr("transform", "translate(135.5, 100)")
.attr("fill", "url(#pic1)");
我已经发布了一些关于此的其他问题,现在已经放弃了我以前的 bootstrap 使用 D3 的实体 svg 条带的框架。
我的目标是用 3 个三角形遮盖 3 个图像,这些图像可单击以仅在三角形内寻呼锚链接。 (理想情况下,我也想在悬停时添加过渡到圆形的效果,但我现在不担心了)。
到目前为止,我有下面的 jsfiddle,但无法取消旋转三角形内的图像,或使背景只是一个图像而不是像现在这样的封面。我也尝试了 CSS 背景图像,但没有成功。
这是我的一段 d3.js 代码,下面是完整的 jsfiddle。
var svg = d3.select(".mydiv").append("svg").attr("width",width).attr("height",height);
var defs= svg.append('defs')
defs.append('pattern')
.attr('id', 'pic1')
.attr('patternUnits', 'userSpaceOnUse')
.attr('width', 100)
.attr('height', 100)
.append('svg:image')
.attr('xlink:href', 'http://placehold.it/1749x1510')
.attr("width", 100)
.attr("height", 100)
.attr("x", 0)
.attr("y", -10);
svg.append("a")
.attr("xlink:href", "http://www.google.com")
.append('path')
.attr("overflow","hidden")
.attr("d", d3.svg.symbol().type("triangle-up").size(10000))
.attr("transform", function(d) { return "translate(" + 300 + "," + 200 + ") rotate(0)"; })
.attr("fill", "url(#pic1)");
http://jsfiddle.net/5Ldzk5w6/2/
感谢您花时间或帮助修复这些图像!
如果你想让图案填满三角形,让它们和三角形一样大。你的图案是 100x100,但你的三角形比那个大得多。所以模式在重复。
如果您不想旋转图案填充,请不要旋转三角形。
如果您不希望图案中的图像被压扁,请定义您的图案,使其具有相同的纵横比。您的图像是矩形的,但您将它们压缩成正方形 (100x100)。
下面是一个固定的演示示例。 Complete fiddle here
var width = 800;
var height = 200;
var svg = d3.select(".mydiv").append("svg")
.attr("width",width)
.attr("height",height)
.attr("viewBox", "0 0 250 100");
var defs= svg.append('defs')
defs.append('pattern')
.attr('id', 'pic1')
.attr('patternUnits', 'userSpaceOnUse')
.attr('width', 115.5)
.attr('height', 100)
.append('svg:image')
.attr('xlink:href', 'http://cammac7.github.io/img/portfolio/LRO.jpg')
.attr("width", 115.5)
.attr("height", 100)
.attr("x", 0)
.attr("y", 0);
svg.append("a")
.attr("xlink:href", "http://www.google.com")
.append('path')
.attr("d", "M 0,0, 57.7,-100, 115.5,0z")
.attr("transform", "translate(135.5, 100)")
.attr("fill", "url(#pic1)");