jquery 图片360度旋转效果详解编程语言

其中js类库,图片都自己去找,不影响

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>jquery制作一个漂亮的手机软件</title> 
<link href="css/basic.css" rel="stylesheet" type="text/css" /> 
<script src="http://libs.baidu.com/jquery/1.4.2/jquery.min.js"></script> 
</head> 
<body> 
 
<div class="weiduduan clearfix"> 
  <div id="phoneCarousel"> 
    <div class="previous arrow">&nbsp;</div> 
    <div class="next arrow">&nbsp;</div> 
    <div id="stage"> 
         <a href="http://www.jq22.com/" target="_blank" ><img width="270" height="400" src="images/iphone.png" alt="iPhone" id="iphone" class="default" /></a> 
         <a href="http://www.jq22.com/" target="_blank" ><img width="270" height="400" src="images/nexus_one.png" alt="Nexus One" id="nexus" /> </a> 
         <a href="http://www.jq22.com/" target="_blank" ><img width="270" height="400" src="images/nokia.png" alt="Nokia" id="nokia" /> </a> 
         <a href="http://www.jq22.com/" target="_blank" ><img width="270" height="400" src="images/blackberry.png" alt="BlackBerry" id="blackberry" /></a></div> 
  </div> 
  <script type="text/javascript" src="js/script.js"></script>  
</div>  
 
</body> 
</html>

basic.css

@charset "utf-8"; 
 
 
/* reset */ 
body{font:12px/18px arial,sans-serif;color:#585858;} 
 
body,div,p,span,form,iframe,table,td,th,input,textarea,button,label,ul,ol,li,dl,dt,dd,h1,h2,h3,h4,h5,h6{margin:0;padding:0;} 
h1,h2,h3,h4,h5,h6{font-size:100%; } 
ul,ol,li,dl{list-style-type:none;} 
em,i,dfn,cite,strong,small{font-style:normal;}  
img{border:0;} 
fieldset,button,input,select,option{vertical-align:middle;font:12px/18px arial,sans-serif;} 
table{border-collapse:collapse;border-spacing:0} 
textarea{resize:none} 
 
/* color */ 
a:link,a:visited{color:#575757;text-decoration:none;} 
a:hover{color:#ef4165;text-decoration:none;} 
a:active{color:#1d7400;} 
 
/* clearfix */ 
.clearfix{ *zoom:1;} 
.clearfix:after{display:table; line-height:0; content:""; clear:both;} 
 
/* public.omission */ 
.fl{ float:left;}            .fr{ float:right;}            .tc{ text-align:center;}      .tr{ text-align:right;}  
.fb{ font-weight:bold;}      .f12{ font-size:12px;}        h3{ font-weight:normal;}      .listop{ padding-top:15px;} 
.mr10{ margin-right:10px;}   .mr15{ margin-right:15px;}    .mL10{ margin-left:10px;}     .mL15{ margin-left:15px;} 
.mt10{ margin-top:10px;}     .mt15{ margin-top:15px;}      .mb10{ margin-bottom:10px;}   .mb15{ margin-bottom:15px;} 
 
 
.weiduduan{ width:800px; margin:50px auto 0 auto;} 
#phoneCarousel{height:390px;margin:0 auto;position:relative;width:800px;} 
#phoneCarousel .arrow{width:44px;height:44px;background:url(../images/arrows.png) no-repeat;position:absolute;top:50%;margin-top:-22px;left:0;cursor:pointer;} 
 
#phoneCarousel .next{background-position:right top;left:auto;right:0;} 
#phoneCarousel .arrow:hover{background-position:left bottom;} 
#phoneCarousel .next:hover{background-position:right bottom;} 
#stage{left:50%;margin-left:-350px;position:absolute;width:700px;height:100%;} 
#stage img{display:none;} 
#stage .default{display:block;left:50%;margin-left:-135px;position:absolute;} 
#stage .animationReady{display:block;position:absolute;top:0;left:0;}

script.js

$(document).ready(function(){ 
    var deg=0; 
    /* Storing all the images into a variable */ 
 
    var images    = $('#stage img').removeClass('default').addClass('animationReady'); 
    var dim        = { width:images.width(),height:images.height()}; 
     
    var cnt = images.length; 
     
    /* Finding the centers of the animation container: */ 
    var centerX = $('#stage').width()/2; 
    var centerY = $('#stage').height()/2 - dim.height/2; 
 
    function rotate(step,total){ 
        // This function loops through all the phone images, and rotates them 
        // with "step" degrees (10 in this implementation) until total has reached 0 
     
        /* Increment the degrees: */ 
        deg+=step; 
         
        var eSin,eCos,newWidth,newHeight,q; 
         
        /* Loop through all the images: */ 
        for(var i=0;i<cnt;i++){ 
             
            /* Calculate the sine and cosine for the i-th image */ 
             
            q = ((360/cnt)*i+deg)*Math.PI/180; 
            eSin        = Math.sin(q); 
            eCos        = Math.cos(q); 
             
            /* 
            /    With the sine value, we can calculate the vertical movement, and the cosine  
            /    will give us the horizontal movement. 
            */ 
             
            q = (0.6+eSin*0.4); 
            newWidth    = q*dim.width; 
            newHeight    = q*dim.height; 
             
            /* 
            /    We are using the calculated sine value (which is in the range of -1 to 1) 
            /    to calculate the opacity and z-index. The front image has a sine value 
            /    of 1, while the backmost one has a sine value of -1. 
            */ 
             
            images.eq(i).css({ 
                top            : centerY+15*eSin, 
                left        : centerX+200*eCos, 
                opacity        : 0.8+eSin*0.2, 
                marginLeft    : -newWidth/2, 
                zIndex        : Math.round(80+eSin*20) 
            }).width(newWidth).height(newHeight); 
        } 
 
        total-=Math.abs(step); 
        if(total<=0) return false; 
         
        // Setting the function to be run again in 40 seconds (equals to 25 frames per second): 
        setTimeout(function(){rotate(step,total)},40); 
     
    } 
     
    // Running the animation once at load time (and moving the iPhone into view): 
    rotate(10,360/cnt); 
     
    $('#phoneCarousel .previous').click(function(){ 
        // 360/cnt lets us distribute the phones evenly in a circle 
        rotate(-10,360/cnt); 
    }); 
     
    $('#phoneCarousel .next').click(function(){ 
        rotate(10,360/cnt); 
    }); 
    $('#phoneCarousel .previous,#phoneCarousel .next').hover(function(){ 
        clearInterval(timer); 
        },function(){ 
        timer=setInterval(function(){rotate(10,360/cnt);},4000); 
        }); 
    var timer=null; 
     
        timer=setInterval(function(){rotate(10,360/cnt);},4000); 
});

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/8607.html

(0)
上一篇 2021年7月18日
下一篇 2021年7月18日

相关推荐

发表回复

登录后才能评论