我正在尝试使用JS更新顶部和左侧CSS属性,在页面上为一些绝对定位的DIV设置动画。在Chrome,FF甚至是IE8中都不是问题但是在Safari 5中尝试它们只是坐在那里......奇怪的是,如果我调整Safari窗口的大小,它们将更新它们的位置......
你可以在这里看到它的演示:
http://www.bikelanebrakes.com/tests/flyingThing1.html
更新DIV的代码非常简单,只需要一点jQuery(也可以更新旋转,在Safari中运行得很好):
$(this.elem).css({
'-webkit-transform': 'rotate(' + (( this.angle * (180 / Math.PI) ) * -1) +'deg)',
'-moz-transform': 'rotate(' + (( this.angle * (180 / Math.PI) ) * -1) +'deg)',
'transform': 'rotate(' + (( this.angle * (180 / Math.PI) ) * -1) +'deg)',
'left': Math.round(this.xPos) + 'px',
'top': Math.round(this.yPos) + 'px'
});
我添加了位置:相对于身体......我添加了'px'并向下舍入数字,因为Safari不喜欢长浮点数值......没什么,他们只是坐在那里直到窗口调整大小...
任何想法或帮助,非常赞赏!
谢谢, 克里斯。
答案 0 :(得分:3)
将top
和left
属性替换为transform
CSS property的translate
子属性。对我来说,这解决了Safari 5中的问题。
另外,不使用setInterval
的字符串参数。
Bird.prototype.draw = function() {
var transform = 'rotate(' + (( this.angle * (180 / Math.PI) ) * -1) +'deg)' +
' translate('+ this.xPos + 'px,' + this.yPos + 'px)';
$(this.elem).css({
'-webkit-transform': transform,
'-moz-transform': transform,
'transform': transform
});
};
// ...
var timer1 = setInterval(function(){bird1.animate();}, 50);
var timer2 = setInterval(function(){bird2.animate();}, 50);
var timer3 = setInterval(function(){bird3.animate();}, 50);
50毫秒是一个非常小的延迟。考虑优化您的函数,使动画执行更顺畅,例如,通过使用vanilla JavaScript替换jQuery方法:
Bird.prototype.draw = function() {
this.elem.style.cssText = ['-webkit-', '-moz-', '', ''].join(
'transform:rotate(' + (( this.angle * (180 / Math.PI) ) * -1) +'deg)' +
' translate(' + this.xPos + 'px,' + this.yPos + 'px);'
); // Result: -webkit-transform: ...;-moz-transform:...;transform:...;
};
答案 1 :(得分:1)
我知道这可能不是您正在寻找的,但您可以尝试使用jQuery的.offset()来更改其位置,而不是手动更改其CSS属性。您的代码看起来像这样:
$(this.elem).css({
'-webkit-transform': 'rotate(' + (( this.angle * (180 / Math.PI) ) * -1) +'deg)',
'-moz-transform': 'rotate(' + (( this.angle * (180 / Math.PI) ) * -1) +'deg)',
'transform': 'rotate(' + (( this.angle * (180 / Math.PI) ) * -1) +'deg)'
})
.offset({
top: Math.round(this.yPos),
left: Math.round(this.xPos)
});
我希望有所帮助!
PS:如果您要设置相对位置,请使用jQuery的.position()。