Krishnan S
Krishnan S

Reputation: 23

Rotate image horizontally like flip

Rotate image horizontally like Flipping Right to Left in button onclick function. i am try to flip the image in simple functions.

    var looper;
        var degrees = 0;
        function SetTransform(el,speed)
        {
            degrees = 0;
            Transform(el,speed);
        }       

        function Transform(el,speed){ 
            var cog1 = document.getElementById(el);
            cog1.style.WebkitTransform = "rotate("+degrees+"deg)";
            if(degrees <=359)
            {
            looper = setTimeout('Transform(\''+el+'\','+speed+')',speed);
            }
             degrees++;
            
            document.getElementById("status").innerHTML = "rotate("+degrees+"deg)";
        } 

Upvotes: 2

Views: 1036

Answers (4)

Atul Rajput
Atul Rajput

Reputation: 4178

As I commeneted above just use transfrom: scaleX(-1); on click

Note: if you do not want the transition then remove it from image.

document.getElementById('flip').onclick  = function(){
  document.getElementById('img').classList.toggle("flipped");
}
img.flipped {transform: scaleX(-1)}


/*just for demo purpose*/
button {margin-left: 30px;}
body {display: flex; align-items: center;}
img {height: 180px; width: 270px; transition: transform 1s;}
<img id="img" src="https://images.freeimages.com/images/large-previews/7bc/bald-eagle-1-1400106.jpg">

<button id="flip">Flip Image</button>

Upvotes: 1

ostapische
ostapische

Reputation: 1592

var rotate_interval;
document.addEventListener("DOMContentLoaded", function() {
  var button = document.getElementById("rotate_button");
  button.addEventListener("click", function() {
    var rotate = parseInt(this.dataset.rotate, 10);
    if (rotate == 0) {
      this.dataset.rotate = 1;
      this.innerText = "Stop rotate";
      rotate_interval = setInterval(rotateElement, 10);
    } else {
      this.dataset.rotate = 0;
      this.innerText = "Start rotate";
      clearInterval(rotate_interval);
    }
  });
});

function rotateElement() {
  var img = document.getElementById("rotate_img");
  var angle = parseFloat(img.dataset.angle, 10);
  var speed = parseFloat(img.dataset.speed);
  var new_angle = angle + speed;
  if (new_angle < -1 || new_angle > 1){
    speed = -speed;
    new_angle = angle + speed;
  }
  img.dataset.angle = new_angle;
  img.dataset.speed = speed;
  img.style.transform = 'scaleX(' + new_angle + ')';
}
img#rotate_img {
  width: 100px;
  height: 100px;
}
<img src="https://lh3.googleusercontent.com/-_Zp3yhfoB3w/AAAAAAAAAAI/AAAAAAAAAAA/ACHi3rftojcGs3QomG3vHceiX8VtM98v6g/photo.jpg" id="rotate_img" data-angle="1.0" data-speed="-0.01" />
<button type="button" id="rotate_button" data-rotate="0">Start rotate</button>

You can store current angle in data- attributes and access to it via element.dataset.ATTRIBUTE_NAME

Upvotes: 0

benhatsor
benhatsor

Reputation: 2033

Quick and simple:

function flip(el) {
  el.classList.toggle('flipped');
}
.flipped {
  transform: scaleX(-1);
}
<img src="https://source.unsplash.com/random/500x500" onclick="flip(this)">

Upvotes: 0

Tushar saxena
Tushar saxena

Reputation: 327

You can achieve the same by just a simple event handler and a one line style using tranform property

Example here

const myFunction=()=>{
    document.getElementById('target').style.transform='scaleX(-1)';
}
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>

<h2>Flip an Image</h2>
<button onclick="myFunction()">Click to Flip the Image</button>
<div>
<img src="https://www.cameraegg.org/wp-content/uploads/2015/06/canon-powershot-g3-x-sample-images-1.jpg" alt="Paris" width="400" height="300" id="target">
</div>
</body>
</html> 

Also If you want the Image to Flip from right to left and vice-versa , every time you click the button than you can add a simple condition in your Js like shown below.

const myFunction=()=>{
    var styles=document.getElementById('target').style;
    if(styles.transform==='scaleX(-1)')
        styles.transform='scaleX(1)';
    else
        styles.transform='scaleX(-1)';
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>

<h2>Flip an Image</h2>
<button onclick="myFunction()">Click to Flip the Image</button>
<div>
<img src="https://www.cameraegg.org/wp-content/uploads/2015/06/canon-powershot-g3-x-sample-images-1.jpg" alt="Paris" width="400" height="300" id="target">
</div>
</body>
</html> 

Do tell me whether I was of any help :)

Upvotes: 2

Related Questions