我怎样才能给 Raphael 元素一个随着元素移动而移动的填充,就像 HTML 元素的 CSS 如何在移动时background-image
相position: absolute;
对于它的位置保持相同的位置?
这是一个示例演示:如何使 Raphael 元素(三角形路径)的背景图像模式在拖动时与 HTML 元素(方形 div)表现相同?
http://jsbin.com/oxuyeq/8/edit
这个问题本质上与如何在 Raphael.js / IE 中“固定”模式相反?使用偏光眼镜模拟器 - 我想让他们试图避免的特定于 IE 的行为在所有浏览器(包括 IE8)中始终如一地发生。
正如其他问题中详述的那样,仅在 IE8 (VML) 中,Raphael 元素的行为符合我的要求;但即使这样也是不稳定的:诸如调用元素或重新定义填充(本质上是任何强制重绘的东西)等各种事情都会导致它切换到其他行为setSize
。paper
对于纯 SVG有一个与此类似的问题,但在撰写本文时没有任何好的答案,当然也没有对 Raphael 有用。
编辑 2:观察 SVG 模式下发生的情况,似乎每个 Raphael 变换也会自动对 svg<pattern>
元素进行相同的矩阵变换。我认为这是导致我试图避免的行为的原因 - 我认为patternContentUnits
并且patternUnits
是无关的。这里似乎有一个未解决的问题(突出显示与剪辑矩形相同的问题,在该行旁边this.pattern && updatePosition(this);
) - https://github.com/DmitryBaranovskiy/raphael/issues/638
因此,一种可能性可能是定义一个自定义属性,该属性将转换应用于元素而不将其应用于模式。听起来很难——可能需要破解 Raphael 或复制大量 Raphael 变换代码。希望还有别的办法。上帝帮助我们在 VML 中完成这项工作......
编辑3:一些可能相关的信息,不仅仅是路径填充有这个问题。创建的Raphaelimage
元素paper.image()
在 SVG 模式下没有这个问题,但在 IE8 VML 模式下有一个非常相似的问题。这是使图像元素移动的几种方法的演示,这是一个并排比较,显示它们如何在非 IE 中完美地工作,而在 IE 中都失败: