他们是如何使用SVG';s、 静态图像、热点和javascript

他们是如何使用SVG';s、 静态图像、热点和javascript,javascript,animation,svg,Javascript,Animation,Svg,在下一个站点的大约一半的地方,有一个房子的图像,上面有SVG动画和热点 我看到了所有单独的元素,但我不明白它们是如何组合在一起的。元素使用小数点后5位的百分比进行定位。我假设他们使用了一些软件来创建SVG,更重要的是,布局。知道那个软件是什么吗?现在有了他们手工编码布局和计算定位的方法。您可以使用SVG和属性维护与javascript动画计时器具有相同的功能,我通常使用javascript来执行这种类型的动画/SVG操作,但您也可以纯用javascript来执行,下面是一个由Noah Velt

在下一个站点的大约一半的地方,有一个房子的图像,上面有SVG动画和热点


我看到了所有单独的元素,但我不明白它们是如何组合在一起的。元素使用小数点后5位的百分比进行定位。我假设他们使用了一些软件来创建SVG,更重要的是,布局。知道那个软件是什么吗?现在有了他们手工编码布局和计算定位的方法。

您可以使用SVG和属性维护与javascript动画计时器具有相同的功能,我通常使用javascript来执行这种类型的动画/SVG操作,但您也可以纯用javascript来执行,下面是一个由Noah Veltman编写的关于:


路径{
填充:无;
行程:#d3008c;
笔画宽度:2px;
}
#箭头{
填充:#d3008c;
中风:无;
}
var path=document.querySelector(“路径”),
totalLength=path.getTotalLength(),
组=总长度/20,
开始
变量箭头=d3。选择(“svg”)。选择全部(“使用”)
.data(d3.range(20.map)(函数(d){returnd*group+50;}))
.输入()
.append(“使用”)
.attr(“xlink:href”,“箭头”);
path.style.strokeDasharray=“50”,+(组-50);
requestAnimationFrame(更新);
功能更新(t){
如果(!开始){
开始=t;
}
var偏移=-组*((t-开始)%900)/900;
path.style.strokedashcoffset=偏移量;
箭头.attr(“变换”,函数(d){
var l=d-偏移量;
if(l<0){
l=总长度+l;
}否则,如果(l>总长度){
l-=总长度;
}
var p=点长度(l);
返回“平移(“+p+”)旋转(“+angleAtLength(l)+”);
});
requestAnimationFrame(更新);
}
函数点长度(l){
var xy=路径。getPointAtLength(l);
返回[xy.x,xy.y];
}
//近似切线
功能角度长度(l){
var a=pointAtLength(Math.max(l-0.01,0)),//这可能是稍微负的
b=点长度(l+0.01);//全长
返回Math.atan2(b[1]-a[1],b[0]-a[0])*180/Math.PI;
}

也许他们是用类似的工具来实现的:我总是用手来实现这一点,VGator会处理单个SVG,但是所有的绝对定位都是5位小数之类的。让我感到困惑的是布局。你知道他们是如何确定单个SVG等的所有绝对位置的吗?不知道他们是如何做到这一点的,除非他们使用了一些布局工具,然后导出东西。不,对于这样的事情,他们使用矢量图形编辑器制作了整个SVG(包括路径),然后将其导出到web,动画是使用javascript制作的,因为SVG是某种程度上类似于HTML的XML文件。这并不难,我开发了比这更难的布局,其中之一是机场表面可视化。Illustrator将所有单独的元素与相关的HTML一起导出。这个例子有闪烁按钮的热点,房子的背景图像,一堆CSS来定位单个SVG,这些SVG随着浏览器窗口的缩小而动态移动。好的,这是有意义的。我认为某些应用程序必须做一些广泛的工作,因为手工创建绝对位置为5位小数的布局是困难的/不可能的。谢谢