我有一个 SVG 文件加载到<object>
标签中。我正在使用 javascript 来操作这个 svg 中的一些元素。例如:
var theSvgXml = document.getElementById('theObject').contentDocument;
theSvgXml.getElementById('theElementId').style.display = 'inline';
theSvgXml.getElementById('theElementId').style.fill = 'red';
theSvgXml.getElementById('anotherElement').style.display = 'none';
这完美地工作,一切都很好。但我想知道是否可以用画布做同样的事情。我也阅读了有关 kinetic js、fabric js、canvg js 的信息,并且我看到了通过文件目录、xml 或通过图像将 svg 文件加载到画布中的各种方法。
但是在将这个 svg 文件绘制到画布中之后,我可以通过它们的 ID 来操作元素吗?
SVG 是使用 Adove Illustrator 创建的,每个图层或组都被赋予一个 ID,可以使用 css 选择器访问。同样,这可以在画布上绘制 SVG 后在画布上完成吗?(请注意,SVG 是巨大的,我考虑画布解决方案的唯一原因是因为 svg 没有显示插画家的乘法效果来创建阴影)
任何帮助将不胜感激。谢谢你。
代码片段:
<g id="Pockets">
<g id="Pen__x26__Radio_Arm_Pocket" class="st791"> … </g>
<g id="Pen_Pocket_Arm" class="st791"> … </g>
<g id="Card_Zipper_Arm_Pocket" class="st791"> … </g>
<g id="Radio_Pocket_Arm_Pocket" class="st791"> … </g>
<g id="Angled_Chest_Pocket_Right" class="st791"> … </g>
<g id="Angled_Chest_Pocket_Left" class="st791"> … </g>
<g id="Angled_Chest_Pocket_left_and_Right" class="st791"> … </g>
<g id="Chest_Pocket_Right" class="st791"> … </g>
<g id="Chest_Pocket_Left" class="st791"> … </g>
<g id="Chest_Pocket_left_and_Right" class="st791"> … </g>
<g id="Tool_Pocket" class="st791"> … </g>
<g id="Cargo_x2F_Mobile_Pocket_Velcro" class="st791"> … </g>
<g id="Cargo_x2F_Mobile_Pocket_Zip" class="st791"> … </g>
<g id="Cargo_x2F_Mobile_Pocket_Button" class="st791"> … </g>
<g id="Cargo_Pocket_Velcro" class="st791"> … </g>
<g id="Cargo_Pocket_Button" class="st791"> … </g>
<g id="Cargo_Pocket_Zip" class="st791"> … </g>
<g id="Back_Pocket_Right_Velcro" class="st791"> … </g>
<g id="Back_Pocket_left_Velcro" class="st791"> … </g>
<g id="Back_Pocket_left_and_Right_Velcro" class="st791"> … </g>
<g id="Back_Pocket_Right_Velcro_Button" class="st791"> … </g>
<g id="Back_Pocket_left_Velcro_Button" class="st791"> … </g>
<g id="Back_Pocket_left_and_Right_Button" class="st791"> … </g>
<g id="Back_Pocket_Right_Zip" class="st791"> … </g>
<g id="Back_Pocket_left_Zip" class="st791"> … </g>
<g id="Back_Pocket_left_and_Right_Zip" class="st791"> … </g>
</g>
从 adobe illustrator 导出文件后,您可以从 xml 片段中看到,每个组都设置了一个 ID。如何将这些作为对象保存在画布中(如 Fabrics.js 建议使用 getObjects() 方法)?有没有办法做到这一点?如果是,我如何引用这些组?此外,阴影是一个关键问题,我不想使用闪光灯。谢谢