本篇文章将通过对css3中的2d变化以及过渡进行分析设计

先放上最终效果图

               

功能实现:1.给扇形home元素设置点击事件并添加2d旋转

     2.给导航栏设置2d旋转 并通过三角函数计算出各个导航位置

     3.设置导航单击事件 并添加过渡结束事件transitonend  完成点击放大并恢复的动画

注  意:transitonend事件需要及时移除 假如没有内部自杀

     则这个事件一直伴随着点击时间存在 则会导致其进行其他过渡时仍会触发

    导致右图变化

                          在过渡结束后存在多余操作

        正确示意应是

                            内容清晰  无多余操作

css部分代码

	*{
padding: 0;
margin: 0;
} body,html{
height: 100%;
overflow: hidden;
} #wrap{
position: absolute;
bottom: 8px;
right: 8px;
width:50px ;
height: 50px;
/* background: pink; */ } #wrap > #content>img{
position: absolute;
left: 0;
top: 0;
margin: 4px;
border-radius:50% ; }
#wrap > #content{
height: 100%;
} #wrap > #home{
/* margin-top: 100px; */
position: absolute;
z-index: 1;
/* height: 50px */
background: url(img/home.png) no-repeat;
width: 100%;
height: 100%;
border-radius:50% ;
top: 0;
left: 0; transition: 1s; }
/* #wrap > #home:hover{
transform: rotate(720deg);
}
*/

  html代码如下

<div id="wrap">
<div id="content">
<img src="img/clos.png" >
<img src="img/full.png" >
<img src="img/open.png" >
<img src="img/prev.png" >
<img src="img/refresh.png" >
</div>
<div id="home"></div>
</div>

  JavaScript代码如下

	<script type="text/javascript">
window.onload=function(){
  var c=130;
  var home=document.getElementById("home");
  var imgs=document.querySelectorAll("#wrap > #content > img");
  var flag=true;
  home.onclick = function(){     function fun(){
this.style.transition=".1s";
this.style.transform="rotate(-720deg) scale(1) ";
this.style.opacity="1";
this.removeEventListener("transitionend",fun);
}
//给所有的img绑定点击属性 需要遍历
for(i=0;i<imgs.length;i++){
imgs[i].addEventListener("click",function(){
this.style.transform="rotate(-720deg) scale(1.5) ";
this.style.transition=".4s";
this.style.opacity="0.1";
this.addEventListener("transitionend",fun);
});
//在运行结束后希望能触发一个新的事件 并移除它
//imgs[i].addEventListener("transitionend",fun);
} if(flag){  var distance=getpoint(c,90*i/(imgs.length-1));
this.style.transform= "rotate(-720deg)";
for(i=0;i<imgs.length;i++){
//因为是逐个出现 所以要算不同的过渡延迟 还要有空格进行区分两个属性
imgs[i].style.transition=".5s "+(i*0.1)+"s ";
//因为有旋转
imgs[i].style.transform=" rotate(-720deg) scale(1)";
imgs[i].style.left = -distance.left+"px";
imgs[i].style.top = -distance.top+"px";
}
}else{
for(i=0;i<imgs.length;i++){
imgs[i].style.transition=".5s "+((imgs.length-1-i)*0.1)+"s ";
imgs[i].style.transform=" rotate(0) scale(1)";
imgs[i].style.left = "0px";
imgs[i].style.top = "0px";
}
this.style.transform= "rotate(0deg)";
}
flag=!flag;
}
} //已知一条边和一个角 求它的x y
function getpoint(c,deg){
                   //角度转弧度公式  三角函数
var left=Math.round(c*Math.sin(deg*Math.PI/180));
var top=Math.round(c*Math.cos(deg*Math.PI/180));
return {
left:left,
top:top
}
} </script>

  

最新文章

  1. 关于SVN链接服务器Unable to connect to a repository at URL*报错问题
  2. 自己用C语言写dsPIC / PIC24 serial bootloader
  3. BZOJ2229—— [Zjoi2011]最小割
  4. BestCoder13 1001.Beautiful Palindrome Number(hdu 5062) 解题报告
  5. Jqplot使用总结之二(双Y轴)
  6. ylbtech-dbs:ylbtech-3,BarCode(条码资源系统)
  7. startUML常用的组合片段
  8. Mybatis简单的入门之增删改查
  9. iOS View 模糊效果(毛玻璃)
  10. cesium编程入门(一)cesium简介
  11. Django web框架-----视图与网址的不同请求方式
  12. Python中parameters与argument区别
  13. struts2_Action的三种实现方式
  14. 关于ajax返回数据处理
  15. spring mvc context-param init-param 区别
  16. Python 可命名元祖
  17. SSE图像算法优化系列一:一段BGR2Y的SIMD代码解析。
  18. Linux/Centos下安装部署phantomjs 及使用
  19. 查看tomcat运行日志
  20. Android_ 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法

热门文章

  1. 只运行一个loop脚本
  2. 一起学vue指令之v-text
  3. wordpress 更新时需要FTP 服务器账户密码的解决方法
  4. ListView 中如何优化图片?
  5. internetwork 与 the Internet的区别
  6. 【3】火狐中: radio被点击以后,重刷页面,不会选择默认的radio
  7. Selenium 2自动化测试实战18(上传文件)
  8. 一键发布shell脚本
  9. 52N皇后II
  10. loadrunner 场景设计-手工场景方案(Schedule)设计 Part 2