在Scaling CSS3上旋转重置为0deg

时间:2017-05-29 08:13:02

标签: jquery css css3 css-transforms

我在图片上执行旋转缩放操作时遇到问题。

在stackOverflow上提出了一些类似的问题,我也引用了它们但没有成功。所以我提出这个问题。

我添加了一个代码段,其中有3个按钮和一个图像。

旋转 + & - 效果非常好,但是当您在旋转后缩放( + - )时,它会将旋转重置为最初的状态。类似地,旋转操作将比例缩小为1。

我也试过旋转图像的容器div,但工作正常但是在拖动操作中产生了问题所以也不能使用这个想法..

那么有没有办法阻止SCALE不重置旋转?

感谢任何帮助。



var curScale = 1;
var zoomFactor = 1.2;
var rotateAngle = 0;

// ZOOMING
function zoomIn(){
	curScale *= zoomFactor;
	$("#previewImg").css({"transform":'scale('+curScale+')'})
}
function zoomOut(){
	curScale /= zoomFactor;
	$("#previewImg").css({"transform":'scale('+curScale+')'})
}




// ROTATION
function doRotate(){
	rotateAngle += 90;
	$("#previewImg").css("transform","rotate("+rotateAngle+"deg)");
}

#previewImg{
  width:300px;
  height:auto;
  position:absolute;
  top:15%;
  left:15%;
}

button{
  position:fixed;
  top:10;
  margin-left:20px;
  z-index:1000;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onClick='zoomIn()' style="left:5px">+</button>
<button onClick='zoomOut()' style="left:30px">-</button>
<button onClick='doRotate()' style="left:60px">Rotate</button>
<div>
  
  <img src="http://www.gettyimages.co.uk/gi-resources/images/Embed/new/embed2.jpg" id='previewImg'>


</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:4)

是的,但需要对代码稍作修改。

您需要设置所需的更改,然后应用转换,同时考虑以下两个属性:

var curScale = 1;
var zoomFactor = 1.2;
var rotateAngle = 0;

// ZOOMING
function zoomIn() {
  curScale *= zoomFactor;
  applyTransformation();
}

function zoomOut() {
  curScale /= zoomFactor;
  applyTransformation();
}

// ROTATION
function doRotate() {
  rotateAngle += 90;
  applyTransformation();
}

function applyTransformation() {
  $('#previewImg').css({
    'transform': 'scale(' + curScale + ') rotate(' + rotateAngle + 'deg)'
  })
}
#previewImg {
  width: 300px;
  height: auto;
  position: absolute;
  top: 15%;
  left: 15%;
}

button {
  position: fixed;
  top: 10;
  margin-left: 20px;
  z-index: 1000;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onClick='zoomIn()' style="left:5px">+</button>
<button onClick='zoomOut()' style="left:30px">-</button>
<button onClick='doRotate()' style="left:60px">Rotate</button>
<div>

  <img src="http://www.gettyimages.co.uk/gi-resources/images/Embed/new/embed2.jpg" id='previewImg'>


</div>

答案 1 :(得分:2)

&#13;
&#13;
var curScale = 1;
var zoomFactor = 1.2;
var rotateAngle = 0;

// ZOOMING
function zoomIn() {
  curScale *= zoomFactor;
  $('#previewImg').css({
    'transform': 'scale(' + curScale + ') rotate(' + rotateAngle + 'deg)'
  });
}

function zoomOut() {
  curScale /= zoomFactor;
  $('#previewImg').css({
    'transform': 'scale(' + curScale + ') rotate(' + rotateAngle + 'deg)'
  });
}

// ROTATION
function doRotate() {
  rotateAngle += 90;
  $('#previewImg').css({
    'transform': 'scale(' + curScale + ') rotate(' + rotateAngle + 'deg)'
  });
}
&#13;
#previewImg {
  width: 300px;
  height: auto;
  position: absolute;
  top: 15%;
  left: 15%;
}

button {
  position: fixed;
  top: 10;
  margin-left: 20px;
  z-index: 1000;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onClick='zoomIn()' style="left:5px">+</button>
<button onClick='zoomOut()' style="left:30px">-</button>
<button onClick='doRotate()' style="left:60px">Rotate</button>
<div>

  <img src="http://www.gettyimages.co.uk/gi-resources/images/Embed/new/embed2.jpg" id='previewImg'>


</div>
&#13;
&#13;
&#13;

很抱歉,我迟到了。