【发布时间】:2020-07-28 14:53:00
【问题描述】:
我一直在我的 PC 上基于 HTML、SVG 和 Javascript 开发网页“游戏”。它通过 SVG
起初,我以为它只是 SVG 视口中的图像,但后来我意识到除了右下象限之外,整个 SVG 视口都是黑色的。 SVG 视口的大小正确无误,它看起来好像在它的 3/4 上(或只有 1/4 渲染)有一些黑色蒙版。
以下是我认为相关的 HTML 代码行,包含第一个 SVG 视图的 Div 标记(第 67 行):
<div id="divSvg1"
style="position:relative; z-index:1; margin:15px;
top:100px;
width:640px; height:640px;
background-color:black;
float:left;"
>
SVG 标签(第 104 行):
<svg id="svgEa"
style="width:100%; height:100%;"
viewBox="-7500 -7500 15000 15000"
preserveAspectRatio="xMidYMid meet"
clip-path="url(#svgEaClip)"
transform="scale(1.0,1.0)"
version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- NOTE: All internal units are in KM (or %) -->
以及嵌入的 Image 标签(从第 160 行开始):
<g id="gEaAll" transform="scale(1.0,1.0)" >
<!-- ... -->
<g id="gEaSurfaceFacingBottom" class="eaSurfaceFacing">
<g id=gEarthImage>
<!-- ... -->
<image x="-6413" y="-6413" width="12826" height="12826" href="eosImages/globe-arctic 8bit.png" />
</g>
</g>
第二个 SVG 视图是一个带阴影的(
我已经在我的 PC 上测试了这个,在 Chrome、Edge 和 IE 的两个屏幕上都可以正常工作。我还在我的 iPhone 上用 Safari 和 Edge 测试过这个,我的 iPad 上用 Safari、Chrome 和 Edge 测试过,所有这些都失败了。我只尝试了 SVG 之外的 PNG 文件的裸 标记,并且在这些平台上运行良好。
我没有任何 Android 平台可供测试,所以如果有人想尝试并告诉我,我可以在此处添加这些结果。
我对此进行了研究,虽然有很多关于 iOS 不渲染图像的东西,但大多数是完全无法渲染,而不是这个非常具体的部分渲染,更不用说关于 SVG 差异的具体内容。最终我没有发现任何似乎是相同问题的东西。
总结一下,我的问题是:是什么导致了这个问题或者我做错了什么,我该如何解决? (我确实知道我需要为移动设备设置不同的样式/CSS 布局,但我仍然需要知道需要更改哪些内容才能正确渲染)
【问题讨论】:
-
在您的主页,第 114 行和第 301 行
<clipPath id="svgEaClip"><rect width="100%" height="100%" /></clipPath>。这条特定的行有什么作用。如果我删除了<cliPath>之后的内容,那就是渲染。而且你的<image />标签没有问题。 -
在安卓上完美运行。似乎是 Safari 问题
-
@Fussionweb 这是一个 clipPath,用于防止 SVG 视口中位于视图框之外的元素在网页上显示。我在 Windows 上测试的浏览器之一就是这样做的。也就是说,有一些大元素部分位于视口之外,因此它们应该被隐式裁剪,但事实并非如此。所以我添加了这个 clipPath 来显式剪辑所有元素,使其仅在视口中可见。
-
进入开发工具,检查剪辑路径是否超出您的内容。您的剪辑路径也工作正常,它只是在其路径上显示内容,只需尝试修复剪辑的 x 和 y。
-
检查此链接可能会对您有所帮助clipPath。它在 Safari 中没有问题