想要旋转一个div元素...这可能是DOM的亵渎,但使用canvas元素可能会奏效吗?我不确定 - 如果有人知道如何让它起作用或者为什么它不能起作用,我很想知道。谢谢。
尝试旋转一个 div 元素,这可能被视为 DOM 的亵渎。不过,使用 canvas 元素或许可以解决问题。我不确定。如果有人有任何想法或者知道原因,请告诉我。谢谢。
想要旋转一个div元素...这可能是DOM的亵渎,但使用canvas元素可能会奏效吗?我不确定 - 如果有人知道如何让它起作用或者为什么它不能起作用,我很想知道。谢谢。
尝试旋转一个 div 元素,这可能被视为 DOM 的亵渎。不过,使用 canvas 元素或许可以解决问题。我不确定。如果有人有任何想法或者知道原因,请告诉我。谢谢。
要旋转一个DIV,请使用WebkitTransform / -moz-transform: rotate(Xdeg)
。
这在IE中不起作用。Raphael库可以与IE一起使用,并且它可以旋转。我相信它使用canvas
。
如果您想要动画旋转,可以使用递归的setTimeout()
您甚至可以使用jQuery的.animate()
来完成部分旋转。
确保考虑元素的宽度。如果旋转具有比其可见内容更大的宽度的元素,则会出现奇怪的结果。但是,您可以缩小元素的宽度,然后旋转它们。
这是一个简单的jQuery代码片段,可以旋转jQuery对象中的元素。旋转可以启动和停止:
$(function() {
var $elie = $(selectorForElementsToRotate);
rotate(0);
function rotate(degree) {
// For webkit browsers: e.g. Chrome
$elie.css({ WebkitTransform: 'rotate(' + degree + 'deg)'});
// For Mozilla browser: e.g. Firefox
$elie.css({ '-moz-transform': 'rotate(' + degree + 'deg)'});
// Animate rotation with a recursive call
setTimeout(function() { rotate(++degree); },5);
}
});
注意:
将度数增加,会使图像顺时针旋转。减少旋转度数将使图像逆时针旋转。
rotate(++degree)
,问题在于您不断地增加度数值。例如:rotate(70531deg)
等等。最终我假设会达到最大值。该脚本应该建立一个机制,在度数达到360时重新开始于0。因此它永远不会超过360,只会在0-360之间。 - Nope我认为你可能会遇到一些困难。通常在主流浏览器使用的3种绘图方法(Canvas、SVG、VML)中,文字支持较差。如果你想旋转一张图片,那就没问题了,但如果你有混合内容包括格式和样式,可能就不行了。
建议尝试使用跨浏览器绘图APIRaphaelJS。
var elementToRotate = $('#rotateMe');
var degreeOfRotation = 33;
var deg = degreeOfRotation;
var deg2radians = Math.PI * 2 / 360;
var rad = deg * deg2radians ;
var costheta = Math.cos(rad);
var sintheta = Math.sin(rad);
var m11 = costheta;
var m12 = -sintheta;
var m21 = sintheta;
var m22 = costheta;
var matrixValues = 'M11=' + m11 + ', M12='+ m12 +', M21='+ m21 +', M22='+ m22;
elementToRotate.css('-webkit-transform','rotate('+deg+'deg)')
.css('-moz-transform','rotate('+deg+'deg)')
.css('-ms-transform','rotate('+deg+'deg)')
.css('transform','rotate('+deg+'deg)')
.css('filter', 'progid:DXImageTransform.Microsoft.Matrix(sizingMethod=\'auto expand\','+matrixValues+')')
.css('-ms-filter', 'progid:DXImageTransform.Microsoft.Matrix(SizingMethod=\'auto expand\','+matrixValues+')');
编辑于 13/09/13 15:00。这是一个美观易用的链式JQuery插件。
使用示例:
$.fn.rotateElement = function(angle) {
var elementToRotate = this,
deg = angle,
deg2radians = Math.PI * 2 / 360,
rad = deg * deg2radians ,
costheta = Math.cos(rad),
sintheta = Math.sin(rad),
m11 = costheta,
m12 = -sintheta,
m21 = sintheta,
m22 = costheta,
matrixValues = 'M11=' + m11 + ', M12='+ m12 +', M21='+ m21 +', M22='+ m22;
elementToRotate.css('-webkit-transform','rotate('+deg+'deg)')
.css('-moz-transform','rotate('+deg+'deg)')
.css('-ms-transform','rotate('+deg+'deg)')
.css('transform','rotate('+deg+'deg)')
.css('filter', 'progid:DXImageTransform.Microsoft.Matrix(sizingMethod=\'auto expand\','+matrixValues+')')
.css('-ms-filter', 'progid:DXImageTransform.Microsoft.Matrix(SizingMethod=\'auto expand\','+matrixValues+')');
return elementToRotate;
}
$element.rotateElement(15);
JSFiddle: http://jsfiddle.net/RgX86/175/
编辑:已更新至jQuery 1.8
jQuery 1.8将添加针对特定浏览器的转换。jsFiddle演示
var rotation = 0;
jQuery.fn.rotate = function(degrees) {
$(this).css({'transform' : 'rotate('+ degrees +'deg)'});
return $(this);
};
$('.rotate').click(function() {
rotation += 5;
$(this).rotate(rotation);
});
编辑:添加了代码以使其成为jQuery函数。
对于那些不想继续阅读的人,这里是代码。要获取更多详细信息和示例,请继续阅读。jsFiddle演示。
var rotation = 0;
jQuery.fn.rotate = function(degrees) {
$(this).css({'-webkit-transform' : 'rotate('+ degrees +'deg)',
'-moz-transform' : 'rotate('+ degrees +'deg)',
'-ms-transform' : 'rotate('+ degrees +'deg)',
'transform' : 'rotate('+ degrees +'deg)'});
return $(this);
};
$('.rotate').click(function() {
rotation += 5;
$(this).rotate(rotation);
});
编辑:在本帖的评论中,有人提到了jQuery Multirotation。这个jQuery插件基本上执行了上述功能,并支持IE8。如果您想要最大兼容性或更多选项,可以考虑使用它。但是为了最小开销,我建议使用上述函数。它将适用于IE9+、Chrome、Firefox、Opera和许多其他浏览器。
Bobby...这是给那些真正想在JavaScript中实现它的人。这可能需要在JavaScript回调上进行旋转。
这里有一个jsFiddle。
如果您想要按自定义间隔旋转,可以使用jQuery手动设置CSS而不是添加类。像this!我在答案底部包含了两个jQuery选项。
HTML
<div class="rotate">
<h1>Rotatey text</h1>
</div>
/* Totally for style */
.rotate {
background: #F02311;
color: #FFF;
width: 200px;
height: 200px;
text-align: center;
font: normal 1em Arial;
position: relative;
top: 50px;
left: 50px;
}
/* The real code */
.rotated {
-webkit-transform: rotate(45deg); /* Chrome, Safari 3.1+ */
-moz-transform: rotate(45deg); /* Firefox 3.5-15 */
-ms-transform: rotate(45deg); /* IE 9 */
-o-transform: rotate(45deg); /* Opera 10.50-12.00 */
transform: rotate(45deg); /* Firefox 16+, IE 10+, Opera 12.10+ */
}
jQuery
确保这些被包裹在$(document).ready函数中。
$('.rotate').click(function() {
$(this).toggleClass('rotated');
});
var rotation = 0;
$('.rotate').click(function() {
rotation += 5;
$(this).css({'-webkit-transform' : 'rotate('+ rotation +'deg)',
'-moz-transform' : 'rotate('+ rotation +'deg)',
'-ms-transform' : 'rotate('+ rotation +'deg)',
'transform' : 'rotate('+ rotation +'deg)'});
});
这里有两个jQuery补丁可以帮助你(也许在你阅读此文时已经包含在jQuery中了):
filter
来解决问题更好,因为它使用相同的旋转原点 - 而filter
旋转则是围绕与常规 CSS 不同的点旋转。在这个问题中查看更多信息和实时演示。 - user56reinstatemonica8