使用javascript旋转图像

The*_*heQ 44 javascript jquery

我需要以90度的间隔使用javascript旋转图像.我尝试了一些像jQuery rotateRaphaël这样的库,但它们有同样的问题 - 图像围绕它的中心旋转.我在图像的各个方面都有一堆内容,如果图像不是完全正方形的,那么它的一部分将最终位于该内容之上.我希望图像保持在其父div中,其中设置了max-with和max-height.

使用jQuery这样旋转(http://jsfiddle.net/s6zSn/1073/):

var angle = 0;
$('#button').on('click', function() {
    angle += 90;
    $("#image").rotate(angle);
});
Run Code Online (Sandbox Code Playgroud)

结果如下:

jQuery旋转如何工作

这是我想要的结果:

我希望它如何工作

任何人都知道如何实现这一目标?

Nie*_*sol 64

你使用CSS的transform组合(必要时带有供应商前缀)transform-origin,像这样:( 也在jsFiddle上)

var angle = 0,
  img = document.getElementById('container');
document.getElementById('button').onclick = function() {
  angle = (angle + 90) % 360;
  img.className = "rotate" + angle;
}
Run Code Online (Sandbox Code Playgroud)
#container {
  width: 820px;
  height: 100px;
  overflow: hidden;
}
#container.rotate90,
#container.rotate270 {
  width: 100px;
  height: 820px
}
#image {
  transform-origin: top left;
  /* IE 10+, Firefox, etc. */
  -webkit-transform-origin: top left;
  /* Chrome */
  -ms-transform-origin: top left;
  /* IE 9 */
}
#container.rotate90 #image {
  transform: rotate(90deg) translateY(-100%);
  -webkit-transform: rotate(90deg) translateY(-100%);
  -ms-transform: rotate(90deg) translateY(-100%);
}
#container.rotate180 #image {
  transform: rotate(180deg) translate(-100%, -100%);
  -webkit-transform: rotate(180deg) translate(-100%, -100%);
  -ms-transform: rotate(180deg) translateX(-100%, -100%);
}
#container.rotate270 #image {
  transform: rotate(270deg) translateX(-100%);
  -webkit-transform: rotate(270deg) translateX(-100%);
  -ms-transform: rotate(270deg) translateX(-100%);
}
Run Code Online (Sandbox Code Playgroud)
<button id="button">Click me!</button>
<div id="container">
  <img src="http://i.stack.imgur.com/zbLrE.png" id="image" />
</div>
Run Code Online (Sandbox Code Playgroud)

  • 添加`filter:progid:DXImageTransform.Microsoft.BasicImage(rotation = 1);`用于IE8和IE7支持."旋转= 1"为90度,"2"为180度,"3"为270度. (2认同)
  • 没有!这种转变使OP遇到了同样的问题.应用转换但不是OP想要的方式 (2认同)
  • 这几乎可以工作,但看看这个:http://jsfiddle.net/bhN6e/.即使在旋转之后,我希望图像下方的文字保持在图像下方.就像现在一样,图像最终会出现在文本的顶部. (2认同)

Har*_*ram 7

var angle = 0;
$('#button').on('click', function() {
    angle += 90;
    $('#image').css('transform','rotate(' + angle + 'deg)');
});
Run Code Online (Sandbox Code Playgroud)

试试这个代码.


Anu*_*uga 7

不再需要 jQuery 和大量 CSS(请注意,某些浏览器需要额外的 CSS

类似于@Abinthaha 发布的内容,但是纯 JS,不需要 jQuery。

let rotateAngle = 90;

function rotate(image) {
  image.setAttribute("style", "transform: rotate(" + rotateAngle + "deg)");
  rotateAngle = rotateAngle + 90;
}
Run Code Online (Sandbox Code Playgroud)
#rotater {
  transition: all 0.3s ease;
  border: 0.0625em solid black;
  border-radius: 3.75em;
}
Run Code Online (Sandbox Code Playgroud)
<img id="rotater" onclick="rotate(this)" src="https://upload.wikimedia.org/wikipedia/en/e/e0/Iron_Man_bleeding_edge.jpg"/>
Run Code Online (Sandbox Code Playgroud)