Search code examples
javascriptjqueryrotationjquery-animatejquery-rotate

How do I rotate an image on hover using jquery?


I am trying to rotate a 'back to top' button 360 degrees on hover WITHOUT un-rotating on mouseleave. I have tried multiple variations of jQuery code that I've found but I still can't seem to get it working. Here's the real example of where I've gotten so far (CSS hover between images as well).

I have tried changing the jQuery to mouseenter, mouseover, hover as well as including and omitting the ; after the rotate number, to no avail. Is it a simple jQuery syntax mistake that I'm making?

HTML:

<div class="scrollup">
  <img src="https://static1.squarespace.com/static/56b92ff8e707ebc576b99166/t/57e099d215d5dbdafb6373aa/1474337234028/top-circleonly.png" class="scrollImg1 scrollup-circle"/>
  <img src="https://static1.squarespace.com/static/56b92ff8e707ebc576b99166/t/57e09a11f5e2318fad09f16f/1474337297146/top-hover-circleonly.png" class="scrollImg2 scrollup-circle"/>
  <img src="https://static1.squarespace.com/static/56b92ff8e707ebc576b99166/t/57e099f3f5e2318fad09f010/1474337267982/top-textarrowonly.png" class="scrollImg1 scrollup-textarrow"/>
  <img src="https://static1.squarespace.com/static/56b92ff8e707ebc576b99166/t/57e09a17f5e2318fad09f1a5/1474337303397/top-hover-textarrowonly.png" class="scrollImg2 scrollup-textarrow"/>
</div>

CSS:

.scrollup {
  width: 45px;
  height: 45px;
  display: block;
  margin-left: auto;
  position: relative;
  cursor: pointer;
}
.scrollup img {
  position: absolute;
}
.scrollImg2 {
  opacity: 0;
}
.scrollup:hover > .scrollImg1 {
  opacity: 0;
}
.scrollup:hover > .scrollImg2 {
  opacity: 1;
}

JQuery:

$(".scrollup").mouseover(function() {
    $(".scrollup-circle").rotate(360);
});

Solution

  • you can do it using jQuery like below

    <!DOCTYPE html>
    <html>
    <head>
    	<title></title>
    	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    	
    </head>
    
    <style type="text/css">
    
    div.main{
    	width: 100px;
    	height: 100px;
    	
    }
    
    div.main img{
    	width: 100%;
    	height: 100%;
    }
    
    .change{
    	-ms-transform: rotate(360deg); /* IE 9 */
        -webkit-transform: rotate(360deg); /* Chrome, Safari, Opera */
        transform: rotate(360deg);
        transition-duration: 5s;
    }
    
       
    
    </style>
    
    
    <body>
    
    <div class="main">
    <img src="https://image.freepik.com/free-icon/apple-logo_318-40184.jpg">
    </div>
    
    <p id="dis"></p>
    
    <script type="text/javascript">
    
    
    $("div.main").mouseenter(function(){
    	$(this).addClass("change").delay(5000).queue(function(){
    		$(this).removeClass("change").dequeue();
    	});
    	
    });
    
    
    
    </script>
    
    
    
    
    </body>
    
    
    </html>

    NOTE:(AFTER) ---> I didn't get what you ask really in your last comment. but try this for your comment question :) .hope it will help to you.

    <!DOCTYPE html>
    <html>
    <head>
    	<title></title>
    	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    	
    </head>
    
    <style type="text/css">
    
    div.main{
    	width: 100px;
    	height: 100px;
    	
    }
    
    div.main img{
    	width: 100%;
    	height: 100%;
    }
    
    .change{
    	-ms-transform: rotate(360deg); /* IE 9 */
        -webkit-transform: rotate(360deg); /* Chrome, Safari, Opera */
        transform: rotate(360deg);
        transition-duration: 5s;
    }
    
    .myopacity{
    	opacity: 0.6;
    }
    
    
    
    </style>
    
    
    <body>
    
    <div class="main">
    <img src="https://image.freepik.com/free-icon/apple-logo_318-40184.jpg">
    </div>
    
    <p id="dis"></p>
    
    <script type="text/javascript">
    
    var thevalue = 1;
    $("div.main").mouseenter(function(){
    
    	thevalue = thevalue+1;
    	if(thevalue%2==0)
    	{
    		$(this).addClass("myopacity");
    	}
    	else
    	{
    		$(this).removeClass("myopacity");
    	}
    
    	$(this).addClass("change").delay(5000).queue(function(){
    		$(this).removeClass("change").dequeue();
    	});
    	
    });
    
    
    
    </script>
    
    
    
    
    </body>
    
    
    </html>