Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在某些情况下,Firefox是否会在对flash对象应用-moz转换之前将其光栅化?_Flash_Firefox_Jquery Ui Draggable_Css Transforms - Fatal编程技术网

在某些情况下,Firefox是否会在对flash对象应用-moz转换之前将其光栅化?

在某些情况下,Firefox是否会在对flash对象应用-moz转换之前将其光栅化?,flash,firefox,jquery-ui-draggable,css-transforms,Flash,Firefox,Jquery Ui Draggable,Css Transforms,我有一个简单的.swf,每隔几帧在两种颜色之间来回闪烁。swf使用SwfObject嵌入,并位于包装器div内,包装器div使用跨浏览器转换定位在屏幕上,如下所示: // HTML: <div id="wrapper"> <div id="swf" /> // Replaced with swf by SwfObject </div> // CSS: #wrapper { width: 210pt; height: 120pt; -

我有一个简单的.swf,每隔几帧在两种颜色之间来回闪烁。swf使用SwfObject嵌入,并位于包装器div内,包装器div使用跨浏览器转换定位在屏幕上,如下所示:

// HTML:
<div id="wrapper">
 <div id="swf" /> // Replaced with swf by SwfObject
</div>

// CSS:
#wrapper
{
    width: 210pt;
    height: 120pt;
    -moz-transform: matrix(1,0,0,1,36,36);
    -ms-transform: matrix(1,0,0,1,36,36);
    -webkit-transform: matrix(1,0,0,1,36,36);
    transform: matrix(1,0,0,1,36,36);
}
同样,这很好,除了一个奇怪的地方:每当我在Firefox中将swf拖动到其原始边界之外时,舞台就会停止重新绘制,颜色会粘在它当前具有的任何值上。通过跟踪swf内部,我可以看到函数仍在被调用,形状仍在重新绘制——只是在浏览器中,整个对象没有被重新绘制。(这仅在Firefox-IE和Chrome中适用)但是,如果我修改代码,以便不使用转换移动包装器,我只需更新
top
left
属性,一切都按预期工作,并且后台会不断更新

有人知道为什么会这样吗?我最好的猜测是,
-moz transform
对一个对象进行某种光栅变换,然后对其进行操作,而不是对原始对象进行操作,但我不明白为什么只有当您移动到原始对象的边界之外时才会发生这种情况?更奇怪的是,如果我右键单击转换后的swf,上下文菜单会如您所料出现,但在Firefox中它位于swf的原始位置,这表明转换可能隐藏了原始swf并创建了副本:


任何人能发出的任何光都是最受欢迎的。尽管解决方法(使用top/left而不是transform)非常简单,但如果可能的话,我希望继续使用transforms,因为这将更清晰地与我的应用程序的其他部分交互。此外,我还希望能够应用更复杂的转换:Firefox(或其他浏览器)会对旋转的swf进行光栅化吗?

我将自己回答这个问题,只是想整理一下:是的,看起来是这样。实验表明,旋转的swf一旦在原始边界外变换,就会停止更新阶段。按预期改变swf的x/y坐标

var dx = currentBounds.x - lastBounds.x; // delta x
var dy = currentBounds.y - lastBounds.y; // delta y
for (var i = 0; i < selectedItems.length; i++) {
    var selectedItem = selectedItems[i];
    var matrix = parseMatrix(selectedItem.css("transform")); // utility to read a matrix into an object
    matrix.tx += dx;
    matrix.ty += dy;
    var newMatrix = unparseMatrix(matrix); // reverse utility
    selectedItem.css("transform", newMatrix);
    selectedItem.css("-moz-transform", newMatrix);
    selectedItem.css("-ms-transform", newMatrix);
    selectedItem.css("-webkit-transform", newMatrix);
}