【发布时间】:2013-08-09 01:32:19
【问题描述】:
在 Raphael 中有三种基本的路径移动方式。
如果该路径有一个具有 PNG 透明度的填充图像,并且您需要 IE8 (VML),那么这三个都是有缺陷的。
JSBin demo
如果你使用简单的变换...
path1.animate({transform: 't20,100'},1000);
...然后在IE8中,填充中的png透明度中断,半透明像素变黑。边缘变得像素化和丑陋,并且根据图像的不同,您可能会在图像的半透明边缘周围出现磨损的黑色轮廓。不好,而且在事件发生后似乎没有任何可靠的方法来解决这个问题。
有时,不一致的是,背景图像也不会相对于元素保持不变(更多内容见下文)。
如果为路径属性设置动画,例如这样:
path2.animate({path: Raphael.transformPath( path2.attr('path'), 't100,20') },1000);
...IE8 不会破坏图像背景。但是,fix for making background images relative to the element not the paper 不适用于此方法(并且我尝试使用改进的背景图像偏移和额外的“M-20,-20”元素来阻止它的各种方法似乎不起作用),我也找不到任何方法使 工作。
此外,在旅途中进行大量转换可能会破坏 VML 模式下背景图像修复依赖的微妙 IE8 错误,从而导致背景移动。这似乎与上面的 JSBin 不一致,在 IE8 中,有时它们都移动,有时只移动顶部的一个。
如果你使用翻译...
path3.translate(42,42);
...结果与变换相同(大概都使用相同的翻译函数)。
使用 Raphael image 元素,可以使用 fix this broken alpha by applying opacity with the transform in an attr or animate call。这不适用于路径填充。此外,关闭填充并将其从原始 URL 字符串重置不会消除损坏的 alpha 污染。你可以看到这个in this demo。
所以,我正在寻找一种方法来移动 Raphael 路径,该路径的背景图像具有 PNG 透明度,a) 始终保持图像相对于元素,b) 不t 通过将部分透明度变为像素化黑色来破坏 IE8 中的 PNG 透明度。
任何形式的变换都会出现类似的问题 - 例如缩放、旋转等。
【问题讨论】:
标签: svg internet-explorer-8 raphael opacity vml