Подтвердить что ты не робот

Поворот изображения с помощью javascript

Мне нужно повернуть изображение с помощью JavaScript с интервалом в 90 градусов. Я пробовал несколько библиотек, таких как jQuery rotate и Raphaël, но у них одна и та же проблема - изображение вращается вокруг своего центра. У меня есть куча контента со всех сторон изображения, и если изображение не совсем квадратное, его части окажутся поверх этого контента. Я хочу, чтобы изображение оставалось внутри родительского элемента div, для которого установлены max-with и max-height.

Используя jQuery, вращайте вот так (http://jsfiddle.net/s6zSn/1073/):

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

Результаты в этом:

How jQuery rotate works

И вот результат, который я хотел бы получить:

How I would like it to work

У кого-нибудь есть идея, как этого добиться?

4b9b3361

Ответ 1

Вы используете комбинацию 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;
}
#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%);
}
<button id="button">Click me!</button>
<div id="container">
  <img src="http://i.stack.imgur.com/zbLrE.png" id="image" />
</div>

Ответ 2

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

Попробуйте этот код.

Ответ 3

Я видел ваш работающий код. В вашем коде есть одна строка исправления.

Запись:

$("#wrapper").rotate(angle); 

вместо:

$("#image").rotate(angle);

и вы получите желаемый результат, надеюсь, это то, что вы хотите.

Ответ 4

CSS может применяться, и вам нужно будет правильно установить transform-origin, чтобы получить прикладное преобразование так, как вы хотите

Смотрите скрипку:

http://jsfiddle.net/OMS_/gkrsz/

Основной код:

/* assuming that the image height is 70px */

img.rotated {
    transform: rotate(90deg);
    -webkit-transform: rotate(90deg);
    -moz-transform: rotate(90deg);
    -ms-transform: rotate(90deg);

    transform-origin: 35px 35px;
    -webkit-transform-origin: 35px 35px;
    -moz-transform-origin: 35px 35px;
    -ms-transform-origin: 35px 35px;
}

jQuery и JS:

$(img)
    .css('transform-origin-x', imgWidth / 2)
    .css('transform-origin-y', imgHeight / 2);

// By calculating the height and width of the image in the load function

// $(img).css('transform-origin', (imgWidth / 2) + ' ' + (imgHeight / 2) );

Логика

Разделите высоту изображения на 2. Значениями transform-x и transform-y должно быть это значение

Ссылка:

transform-origin в CSS | MDN

Ответ 5

Надеюсь, это поможет вам!

<input type="button" id="left"  value="left" />
<input type="button" id="right" value="right" />
<img src="https://www.google.com/images/srpr/logo3w.png" id="image">

<script>
 var angle = 0;
    $('#left').on('click', function () {  
        angle -= 90;
        $("#image").rotate(angle);
    });

    $('#right').on('click', function () {  
        angle += 90;
        $("#image").rotate(angle);
    });
</script>

Попробуйте

Ответ 6

Вы всегда можете применить класс CCS с свойством rotate - http://css-tricks.com/snippets/css/text-rotation/

Чтобы сохранить развернутое изображение в ваших измерениях div, вам нужно также настроить CSS, нет необходимости использовать JavaScript, кроме добавления класса.

Ответ 7

Нет необходимости в jQuery и много CSS больше (обратите внимание, что некоторым браузерам нужен дополнительный CSS)

Вид того, что @Abinthaha отправил, но чистый JS, без необходимости jQuery.

let rotateAngle = 90;

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

Ответ 8

Основываясь на ответе Anuga, я расширил его до нескольких изображений.

Следите за углом поворота изображения как атрибутом изображения.

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

Ответ 9

Я думаю, что это будет работать.

    document.getElementById('#image').style.transform = "rotate(90deg)";

Надеюсь, это поможет. Это работает со мной.