【发布时间】:2013-07-21 10:03:06
【问题描述】:
如何为 Raphael 元素提供一个随元素移动而移动的填充,就像 position: absolute; HTML 元素的 CSS background-image 如何在移动时相对于其位置保持相同的位置?
这是一个示例演示:如何使 Raphael 元素(三角形路径)的背景图像图案在拖动时与 HTML 元素(方形 div)表现相同?
http://jsbin.com/oxuyeq/8/edit
这个问题本质上与 How to make a pattern “fixed” in Raphael.js / IE? 的偏光眼镜模拟器相反 - 我想让他们试图避免的特定于 IE 的行为在所有浏览器(包括 IE8)中始终如一地发生.
正如其他问题中详述的那样,仅在 IE8 (VML) 中,Raphael 元素的行为符合我的要求;但即使这样也是不稳定的:各种事情,比如在 paper 元素上调用 setSize 或重新定义填充(本质上是任何强制重绘)都会导致它切换到其他行为。
有一个question similar to this for pure SVG,但在撰写本文时没有任何好的答案,当然也没有适合 Raphael 的答案。
编辑 2:观察 SVG 模式下发生的情况,似乎每个 Raphael 变换也会自动对 svg <pattern> 元素进行相同的矩阵变换。我认为这是导致我试图避免的行为的原因 - 我认为 patternContentUnits 和 patternUnits 是不相关的。这里似乎有一个未解决的问题(突出显示与剪辑矩形相同的问题,在this.pattern && updatePosition(this); 行旁边)-https://github.com/DmitryBaranovskiy/raphael/issues/638
所以一种可能性可能是to define a custom attribute 将变换应用于元素而不将其应用于模式。听起来很难——可能需要破解 Raphael 或复制大量 Raphael 转换代码。希望还有别的办法。还有god help us making this work in VML...
编辑 3: 一些可能相关的信息,不仅仅是路径填充有这个问题。 Raphael image 使用paper.image() 创建的元素在 SVG 模式下没有这个问题,但在 IE8 VML 模式下有一个非常相似的问题。 Here's a demo 几种使图像元素移动的方法,下面是一个并排比较,显示它们在非 IE 中如何完美地工作,而在 IE 中都失败:
【问题讨论】:
标签: svg raphael background-image