CSS-трансформация вращается в одном и том же направлении каждый раз

Я хочу, чтобы элемент на веб-странице поворачивался на 360 градусов против часовой стрелки при каждом нажатии кнопки. Я нашел пример кода, показывающий, как это сделать, но единственная проблема заключается в том, что в настоящее время он вращается в разных направлениях.

Есть ли простой способ убедиться, что элемент каждый раз вращается в одном и том же направлении?

Вот пример кода: http://codepen.io/impressivewebs/pen/niurC

.

ура

3 ответа

Решение

В вашем примере добавляется и удаляется класс, который применяет преобразование, что дает эффект применения преобразования при добавлении класса, а затем отмены его при удалении класса, что приводит к изменению поворота при втором щелчке.

Чтобы увеличивать вращение каждый раз, вы можете использовать JavaScript, чтобы вести подсчет текущего значения вращения и увеличивать его при нажатии кнопки. Я написал ваш пример на CodePen здесь: http://codepen.io/anon/pen/aObMYK для иллюстрации. Обратите внимание, что я изменил приращение на 30 градусов, чтобы вы могли видеть, что происходит более четко. Если вы хотите, чтобы он вращался на 360 градусов каждый раз, просто измените значение, установленное в counter += 30; до 360

Хитрость заключается в том, чтобы увеличить вращение, а не сбрасывать его. В следующем коде мы продолжим увеличивать вращение на 360, это заставит его вращаться в одном направлении при каждом нажатии.

Я только изменил вашу функцию JavaScript, чтобы добиться этого:

var angle =0;
$('button').click(function () {
   angle += 360;
  $(".box").css({'transform': 'rotate(' + angle + 'deg)'});

});

Полный код

var angle =0;

$('button').click(function () {

  //$('.box').toggleClass('box-rotate');
  angle += 360;
    $(".box").css({'transform': 'rotate(' + angle + 'deg)'});

});
.box {
  background: lightblue;
  width: 100px;
  height: 100px;
  margin: 20px auto;
  transition: transform 1s linear;
  transform-origin: top left;
  transform-style: preserve-3D;
}

.box-rotate {
  transform: rotate(360deg);
}

button {
  display: block;
  margin: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<div class="box"></div>

<button>click me</button>

Вы используете toggleClass в своем скрипте JS. Метод переключения используется для переключения между двумя значениями. Когда вы используете toggleClass для этого элемента, вы добавляете и удаляете box-rotate класс на каждом нажатии кнопки. Чтобы повторить функцию на DOM, вам понадобится JavaScript, и в этом случае ваш код будет выглядеть

var counter = 0;

$('button').click(function () {
    var box = $('.box');
  // box.toggleClass('box-rotate');
    counter += 360;
  $('.box').css('transform', 'rotate(' + counter + 'deg)')
});

Вот рабочий код.

Другие вопросы по тегам