使用 D3 用背景图像填充 svg

sin*_*tor 5 html javascript css svg d3.js

我已经发布了一些关于此的其他问题,现在已经放弃了我以前使用 D3 的固体 svg 条的引导框架。

我的目标是让 3 个三角形掩盖 3 个图像,这些图像可单击以仅在三角形内翻页锚链接。(理想情况下,我还想在悬停时添加过渡到圆圈的效果,但我现在并不担心)。

到目前为止,我有下面的 jsfiddle,但无法设法取消旋转三角形内的图像,或者使背景只是一张图像,而不是像现在这样的封面。我也尝试过 CSS background-image,但没有成功。

这是我的 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)");
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/5Ldzk5w6/2/

感谢您在任何时间或帮助您修复这些图像!

Pau*_*eau 5

如果您希望图案填充三角形,请将它们设置为与三角形相同的大小。您的图案是 100x100,但您的三角形比这大得多。所以这个模式一直在重复。

如果您不希望图案填充旋转,请不要旋转三角形。

如果您不希望图案中的图像被挤压,请定义图案,使其具有相同的纵横比。您的图像是矩形的,但您将它们压缩成正方形(100x100)。

下面是一个固定的演示示例。 在这里完成小提琴

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)");
Run Code Online (Sandbox Code Playgroud)