- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
需要提前道歉:对于篇幅和我的无知。我正在尝试自学新概念:d3.js 和 Sprite 表。 Sprite 表的概念很容易理解,但我很困惑如何将其集成到 d3 中。基本上我想做的是从 Sprite 表中选择我想用作图像的 Sprite ,然后使用 d3 在页面的其他地方显示这个选定的 Sprite ,并且很可能是同一个 Sprite 的多个副本。
供引用的实际 sprite 表(见下面的免责声明):
问题如下:1) 我将 sprite 表添加到我的 html 中,硬编码 <clipPath>
现在,这显示了我想要的特定 Sprite ,但是, Sprite 的尺寸/定位就像显示了整个 Sprite 表一样。我怎样才能只“捕获” Sprite 本身,而不仅仅是隐藏未使用的 Sprite ?在下图中,我想在 d3 鼠标悬停事件(第 2 部分)中使用单个“图标”。
修改此示例:SO: Display CSS image sprite in SVG without using foreignObject
HTML
<svg id="mySvg1" width="100%" height="100%">
<defs>
<clipPath id="c">
<rect x="135" y="0" width="150" height="150"/>
</clipPath>
</defs>
<image transform="scale(1.0)" x="0" y="0" width="550" height="420" xlink:href="static/img/iconSheet.png" clip-path="url(#c)"/>
<svg>
结果
2) 我可以使用 <pattern>
确定要在 d3 对象/事件中显示的图像。就像在矩形中显示图形一样。但这似乎不适用于大图像( Sprite 表)?如果我尝试在图案中使用 sprite 表本身及其原始尺寸,它会变得奇怪和模糊。如果我们解决了第 1 部分,我们可能会忽略第 2 部分,但这对于一般知识/ future 使用来说是很好的理解。
修改此示例:SO: Adding an image within a circle object in d3 javascript?
HTML
<svg id="mySvg" width="550" height="420">
<defs id="mdef">
<pattern id="image" x="0" y="0" height="550" width="420">
<image transform="scale(1.0)" x="0" y="0" width="550" height="420" xlink:href="static/img/iconSheet.png"></image>
</pattern>
</defs>
</svg>
Javascript:
var svgContainer = d3.select("div#content-main").append("svg")
.attr("width", 740)
.attr("height", 760)
.attr("class", "mySvg")
.style("border", "none");
svgContainer.append("rect")
.attr("class", "logo")
.attr("x", 0)
.attr("y", 0)
.attr("width", 550)
.attr("height", 420)
.style("fill", "transparent")
.style("stroke", "black")
.style("stroke-width", 0.25)
.on("mouseover", function(){
d3.select(this)
.style("fill", "url(#image)");
})
.on("mouseout", function(){
d3.select(this)
.style("fill", "transparent");
});
结果
3) 如果有更有效的方法来完成此任务,我愿意接受建议。我只是坚持使用 d3 模型,因为我已经渲染了一个 svg 对象,我只需要向它添加东西。
免责声明:图标不是我的作品!我将这些图标仅用于教育目的。作者链接在这里:Fitness Icons
最佳答案
我不确定 <pattern>
发生了什么例如,但是你的问题 <image>
元素是您没有翻译图像,因此您想要的图标位于 SVG 的 (0,0) 点。
这是你需要的:
<svg id="mySvg1" width="100%" height="100%" viewBox="0 0 150 150">
<defs>
<clipPath id="c">
<rect x="135" y="0" width="150" height="150"/>
</clipPath>
</defs>
<image transform="translate(-135,0)" width="550" height="420"
xlink:href="static/img/iconSheet.png" clip-path="url(#c)"/>
<svg>
当然,如果你要制作很多图标并在多个地方使用它们,我建议:
<defs>
中定义图标元素,然后在需要时使用 <use>
引用它们元素;<use>
元素将图像定位在每个图标中,因此您只需定义一次图像 url、高度和宽度;<g>
中元素,并将剪切路径应用到它,这样您只需定义一次剪切路径(假设所有图标大小相同)。此处示例:http://codepen.io/AmeliaBR/pen/mwzBD
定义图标的关键代码:
<svg class="icon-defs">
<defs>
<!-- The icons are defined in an SVG <defs> element;
it could be in a different file,
since the icons will be referenced by url. -->
<!-- One clipping path defines icon size -->
<clipPath id="icon-cp" >
<rect x="0" y="0" width="150" height="100" />
</clipPath>
<!-- One image element imports the file -->
<image id="icon-sprite" width="969" height="293"
xlink:href="http://i.stack.imgur.com/TPx5h.png" />
<!-- Each icon fragment uses the same image
with a different translation -->
<g id="icon1" clip-path="url(#icon-cp)">
<use xlink:href="#icon-sprite"
transform="translate(0,0)" />
</g>
<g id="icon2" clip-path="url(#icon-cp)">
<use xlink:href="#icon-sprite"
transform="translate(-240,0)" />
</g>
<g id="icon3" clip-path="url(#icon-cp)">
<use xlink:href="#icon-sprite"
transform="translate(-240,-193)" />
</g>
</defs>
然后你像这样引用图标:
<svg class="icon" viewBox="0 0 150 100" height="4em" width="6em">
<use xlink:href="#icon3"/>
</svg>
viewBox
属性设置图像布局的内部尺寸,每次使用图标时都相同;高度和宽度可以是任何你想要的(尽管缩小当然比放大看起来更好)。如果高度/宽度比与图标不匹配,它将被压扁或拉伸(stretch),但您可以使用 preserveAspectRatio
来防止这种情况发生。属性。
现在,进入 d3。提前定义表示图标的 SVG 片段可能是最简单的方法,可能在单独的文件中,尽管您可以动态构建该 DOM。当你真正想要插入一个图标时,你
例如,要在每个带有“警告”类的元素末尾添加一个内联图标图像,您可以这样做:
d3.selectAll(".warning")
.append("svg")
.attr("viewBox", "0 0 "+ iconWidth + " " + iconHeight)
.style("display", "inline")
.style("height", "1em")
.style("width", (iconWidth/iconHeight) + "em")
.append("use")
.attr("xlink:href", "#warning");
当然,如果您使用的是 d3,您可能有一些数据变量告诉您要使用哪个图标,而不是一个类,但您明白了。
关于javascript - svg + Sprite 表 + d3 + clipPath + 位置 + 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21193447/
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我试图用这种形式简单地获取数字 28 integer+space+integer+integer+space+integer我试过这个正则表达式 \\s\\d\\d\\s 但我得到了两个数字11 和
最近一直在学习D语言。我一直对运行时感到困惑。 从我能收集到的关于它的信息中,(这不是很多)我知道它是一种有助于 D 的一些特性的运行时。像垃圾收集一样,它与您自己的程序一起运行。但是既然 D 是编译
想问一下这两个正则表达式有区别吗? \d\d\d 与 \d{3} 我已经在我的本地机器上使用 Java 和 Windows 操作系统对此进行了测试,两者都工作正常并且结果相同。但是,当在 linux
我正在学习 Go,而且我坚持使用 Go 之旅(exercise-stringer.go:https://tour.golang.org/methods/7)。 这是一些代码: type IPAddr
我在Java正则表达式中发现了一段令我困惑的代码: Pattern.compile( "J.*\\d[0-35-9]-\\d\\d-\\d\\d" ); 要编译的字符串是: String string
我在 ruby 代码上偶然发现了这个。我知道\d{4})\/(\d\d)\/(\d\d)\/(.*)/是什么意思,但是\1-\2-\3-\4 是什么意思? 最佳答案 \1-\2-\3-\4 是 b
我一直在努力解决这个问题,这让我很恼火。我了解 D 运行时库。它是什么,它做什么。我也明白你可以在没有它的情况下编译 D 应用程序。就像 XoMB 所做的那样。好吧,XoMB 定义了自己的运行时,但是
我有两个列表列表,子列表代表路径。我想找到所有路径。 List> pathList1 List> pathList2 当然是天真的解决方案: List> result = new ArrayList>
我需要使用 Regex 格式化一个字符串,该字符串包含数字、字母 a-z 和 A-Z,同时还包含破折号和空格。 从用户输入我有02-219 8 53 24 输出应该是022 198 53 24 我正在
目标是达到与this C++ example相同的效果: 避免创建临时文件。我曾尝试将 C++ 示例翻译为 D,但没有成功。我也尝试过不同的方法。 import std.datetime : benc
tl;dr:你好吗perfect forwarding在 D? 该链接有一个很好的解释,但例如,假设我有这个方法: void foo(T)(in int a, out int b, ref int c
有什么方法可以在 D 中使用abstract auto 函数吗? 如果我声明一个类如下: class MyClass { abstract auto foo(); } 我收到以下错误: mai
有没有人为内存中重叠的数组切片实现交集?算法在没有重叠时返回 []。 当 pretty-print (使用重叠缩进)内存中重叠的数组切片时,我想要这个。 最佳答案 如果您确定它们是数组,那么只需取 p
我已经开始学习 D,但我在使用 Andrei Alexandrescu 所著的 The D Programming Language 一书中提供的示例时遇到了一些麻烦。由于 int 和 ulong 类
如何创建一个不可变的类? 我的目标是创建一个实例始终不可变的类。现在我只是用不可变的方法和构造函数创建了一个“可变”类。我将其称为 mData,m 表示可变。然后我创建一个别名 alias immut
不久前我买了《The D Programming Language》。好书,很有教育意义。但是,我在尝试编译书中列出的语言功能时遇到了麻烦:扩展函数。 在这本书中,Andrei 写了任何可以像这样调用
我在 D http://www.digitalmars.com/d/2.0/lazy-evaluation.html 中找到了函数参数的惰性求值示例 我想知道如何在 D 中实现可能的无限数据结构,就像
这个问题在这里已经有了答案: 12 年前关闭。 Possible Duplicate: Could anyone explain these undefined behaviors (i = i++
当前是否可以跨模块扫描/查询/迭代具有某些属性的所有函数(或类)? 例如: source/packageA/something.d: @sillyWalk(10) void doSomething()
我是一名优秀的程序员,十分优秀!