html的扇形代码导航,CSS3--利用transform和transition属性制作扇形导航

在前面,我们已经讲解了transform这个属性以及案例,那么本文会进一步结合transform和transition两个属性,并制作一个简单的案例进行说明。

一、transition属性说明

接下来简单分析一下transition这个属性的定义以及子属性。

1)ansition-property  要运动的样式  (all || [attr] || none)

2)transition-duration 运动时间

3)transition-delay 延迟时间

4)transition-timing-function 运动形式

ease:(逐渐变慢)默认值

linear:(匀速)

ease-in:(加速)

ease-out:(减速)

ease-in-out:(先加速后减速)

cubic-bezier 贝塞尔曲线( x1, y1, x2, y2 ) http://matthewlein.com/ceaser/

[注意]IE9-不支持该属性,safari3.1-6、IOS3.2-6.1、android2.1-4.3需要添加-webkit-前缀;而其余高版本浏览器支持标准写法。

看一个简单的例子:

当鼠标经过div时,实现该div的颜色改变,以及高度和宽度都改变的效果。

0818b9ca8b590ca3270a3433284dd417.png

实现代码:

transition

.box{

width:100px;

height:100px;

background-color: blue;

transition-duration: 2s;

/* 以下三值为默认值,稍后会详细介绍 */

transition-property: all;

transition-timing-function: ease;

transition-delay: 0s;

}

.box:hover{

width:200px;

height:200px;

background-color: red;

}

过渡transition的这四个子属性只有是必需值且不能为0。其中,和都是时间。当两个时间同时出现时,第一个是,第二个是;当只有一个时间时,它是,而为默认值0。

transition: || || ||

transition的这四个子属性之间不能用逗号隔开,只能用空格隔开。因为逗号隔开的代表不同的属性(transition属性支持多值,多值部分稍后介绍);而空格隔开的代表不同属性的四个关于过渡的子属性。

二、案例:扇形导航

0818b9ca8b590ca3270a3433284dd417.png

实现代码:

扇形导航

html{

height:100%;

overflow:hidden;

}

body{

background:#f9f9f9;

}

#menu{

width:50px;

height:50px;

position:fixed;

right:20px;

bottom:20px;

}

#menu_list{

height:42px;

width:42px;

position:relative;

margin:4px;

}

#menu_list img{

border-radius:21px;

position:absolute;

left:0;

top:0;

}

#home{

width:50px;

height:50px;

background:url("images/home.png") no-repeat;

border-radius:25px;

position:absolute;

left:0;

top:0;

transition: 0.3s;

}

window.οnlοad= function () {

var oHome = document.getElementById("home");

var aImg = document.getElementById("menu_list").getElementsByTagName("img");

var iRadius=-150;

var onOff = true;

for(var i = 0; i< aImg.length;i++){

aImg[i].οnclick= function () {

this.style.transition="0.3s";

this.style.WebkitTransform="scale(2) rotate(-720deg)";

this.style.opacity=0.1;

addEnd(this,end);

};

};

function end(){

this.style.transition="0.1s";

this.style.WebkitTransform="scale(1) rotate(-720deg)";

this.style.opacity=1;

removeEnd(this,end);

};

oHome.οnclick=function(){

if (onOff){

this.style.webkitTransform="rotate(-360deg)";

for(var i = 0; i< aImg.length; i ++){

var oLt = getTL(iRadius,90/4*i);

aImg[i].style.transition="0.5s+"+i*100+"ms";

aImg[i].style.left = oLt.oLeft+"px";

aImg[i].style.top = oLt.oTop+"px";

aImg[i].style.webkitTransform="scale(1) rotate(-720deg)";

}

}else{

this.style.webkitTransform="rotate(360deg)";

for(var i = 0; i< aImg.length; i ++){

aImg[i].style.transition="0.5s+"+(aImg.length-i+1)*100+"ms";

aImg[i].style.left = 0+"px";

aImg[i].style.top = 0+"px";

aImg[i].style.webkitTransform="scale(1) rotate(0deg)";

}

}

onOff=!onOff;

};

function getTL(iRadius,iDeg){

var oLeft = Math.round(Math.sin(iDeg/180*Math.PI)*iRadius);

var oTop = Math.round(Math.cos(iDeg/180*Math.PI)*iRadius);

return {oLeft:oLeft,oTop:oTop};

};

function addEnd(obj,fn){

obj.addEventListener("WebkitTransitionEnd",fn,false);

obj.addEventListener("transitionend",fn,false);

};

function removeEnd(obj,fn){

obj.removeEventListener("WebkitTransitionEnd",fn,false);

obj.removeEventListener("transitionend",fn,false);

};

};

案例说明:

1、案例中涉及两个点击事件,一个是点击主菜单时会进行旋转,并出现扇形导航,另外一个是点击扇形导航时会使导航图片变大。

(1)首先是点击主菜单:我们在点击主菜单的时候,图片会旋转,在这个中,我们使用了webkitTransform="rotate(-360deg)";这个属性就可以实现,在这个过程中要记得当鼠标反复点击后者点击结束后的事件效果。所以,我在其中设置了一个变量onOff进行判断,初始值为true,首先进行判断,如果为true就可旋转,相反的,为了达到更好的效果,这里设置了旋转360度,最后记得加上onOff=!onOff;,否则这个操作还是错误的,达不到我们想要的效果。

oHome.οnclick=function(){

if (onOff){

this.style.webkitTransform="rotate(-360deg)";

}else{

this.style.webkitTransform="rotate(360deg)";

}

onOff=!onOff;

};

(2)其次是出现扇形导航,在这里使用的就是transform属性,我们以主菜单为中心进行旋转,将其他的5个子菜单分别平均分布在扇形中。那么首先,我们是不是应该先来计算一下角度以及半径的关系。

0818b9ca8b590ca3270a3433284dd417.png

至于sin和cos如何计算,以及边和角度如何计算这里就不详细说明。

附上我写的:

var oLeft = Math.round(Math.sin(iDeg/180*Math.PI)*iRadius);

var oTop = Math.round(Math.cos(iDeg/180*Math.PI)*iRadius);      round()函数是为了取整。

(3)最后是如何是点击图片的时候,让图片变大。为了实现这个效果,我采用了transform的scale()函数,

1)scale(X方向上的比率,Y方向上的比率)

使用scale()函数指定X方向与Y方向上的2D伸缩比率。可以省略第二个值,省略时与第一个值相同。

2)scaleX(x方向上的比率)

使用scaleX()函数指定X方向上的伸缩比率,这时Y与Z方向上的比率为1。

3)scaleY(Y方向上的比率)

使用scaleY()函数指定Y方向上的伸缩比率,这时X与Z方向上的比率为1。

4)scaleZ(Z方向上的比率)

当定义了一个3D变形时,使用scaleZ()函数指定Z方向上的伸缩比率。这时X与Y方向上的比率为1。

5)scale3d(X方向上的比率,Y方向上的比率,Z方向上的比率)

当定义了一个3D变形时,使用scaleZ()函数指定Z方向上的伸缩比率。这时X与Y方向上的比率为1。

注意:

默认值:none             使用对象:块元素和直列元素             值的继承:不继承

2、过渡完成事件

Webkit内核: obj.addEventListener('webkitTransitionEnd',function(){},false);

firefox: obj.addEventListener('transitionend',function(){},false);

当如果多使用一个样式属性,在每个动画执行的过程中webkitTransitionEnd事件的触发次数将多增加两次。也就是说webkitTransitionEnd事件将在元素的每个样式属性值发生改变之后触发一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UCI数据

http://archive.ics.uci.edu/ml/datasets.html?format&task&att&area&numAtt&numIns&type&sortinstDown&viewtable转载于:https://www.cnblogs.com/zangrunqiang/p/5999238.html

常见的误解:这会创建多少个对象?

总览 一个常见的问题是一段代码创建多少个对象或多少个字符串。 答案通常不是您的想法&#xff0c;也不是您真正需要知道的。 了解何时创建对象是很有用的&#xff0c;但是有很多其他因素通常要考虑的重要得多&#xff0c;这可能意味着应用程序总数不是您所想的。 字符串不是一…

cvs配电保护断路器_电工电器(三)-配电电器-断路器类-剩余电流保护断路器

本文文字836&#xff0c;阅读时间6分钟左右。此系列文章 从配电电器的大类等进行慢慢阐述&#xff0c;有不足的地方 欢迎大家相互探讨交流。配电电器&#xff0c;顾名思义就是进行电力分配的设备。电&#xff0c;从发电机出来之后&#xff0c;由总线输出&#xff0c;不可能直接…

html模块殃射,【Web前端问题】webpack打包后,module模块中的函数无法在html标签的事件中调用?...

折腾了好久&#xff0c;求大佬指点~~最近才开始接触webpack以及ES6的module&#xff0c;可能理解的有问题吧。。。希望大佬来指点一下我这个菜鸟。我的想法是在一个module中定义函数&#xff0c;在HTML的中用onclick事件调用这个函数。module模块代码&#xff1a;— base.js —…

Linux网络参数设置

1、ifconfig 查询、设定网络卡与ip 设置桥接网络 # vi /etc/sysconfig/network-script/ifcfg-br0DEVICEbr0 #设备名称BOOTPROTOstatic #设置静态地址IP6INITnoMTU1500 #设置MTU连接数 (可以设定不同的MTU数值)NM_CONTROLLEDnoONBOOTyesIPADDR…

delhpi7 tcombobox清楚重复项_专利数据统计中需要搞清楚的首要问题(2)

上一篇专利数据统计中需要搞清楚的首要问题(1)介绍了通过合并申请号避免重复统计&#xff0c;理清了专利篇数和专利件数的问题&#xff0c;那么还有一类统计就是对发明项数的统计&#xff0c;这里就涉及到对同一项发明的重复统计问题。上一篇介绍的相同申请号但不同公开号的专利…

【Electron】Electron开发入门(八):自定义electron框架外壳(shell)的菜单(Menu)...

1.自定义electron框架外壳&#xff08;shell&#xff09;的菜单&#xff08;Menu&#xff09; electron的main.js里代码&#xff1a; const Menu require(electron).Menu; var template [{label: 关闭,click: function () { win.close();console.log("关闭")},// s…

交通大数据应用细分_盈海科技 | 交通大数据可视化“掘金”数据价值

面对日益拥堵的交通状况智能交通布局虽在不断完善但交通管理依旧收效甚微问题究竟出在了哪里&#xff1f;数据独立存储难以融合应用数据内在规律难寻数据可视化程度低……问题繁多 困难重重怎么办&#xff1f;&#xff1f;&#xff1f;交通大数据可视化解决方案上岗啦&#xff…

书评– Kubernetes Up&Running,作者:Kelsey Hightower

欢呼&#xff01; 正如我在以前的帖子中所写的那样&#xff0c;当您开始研究和使用所有这些新颖的&#xff0c;有光泽的容器/编排技术时&#xff0c;很有可能最终导致您的翻译“迷失”。 很多信息&#xff0c;很多技术&#xff0c;很多开发 &#xff0c;很多承诺&#xff0c;很…

relative布局html,CSS的四种布局方式static/relative/fixed/absolute

staticstatic布局是HTML元素默认的布局方式&#xff0c;并且static布局的元素不会受到top/left/bottom/right属性的影响。布局元素的位置即其在标准文档流中的位置。relative相对布局是相对其在标准文档流中的位置而言的。设置其top/left/bottom/right属性会使该元素脱离标准文…

MFC CListCtrl

列名、行内容的添加、删除。 据列名、行内容长度设置列宽。 排序。 提升权限 BOOL CDemoListCtrlApp::EnableDebugPrivilege() { HANDLE token; if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token)) { return FALSE; } TOKEN_PRIVILEGES tkp…

快手用旺旺瓶子做机器人_100品牌入榜,在快手的品牌运营怎么做?|11月快手品牌新势力榜揭晓...

11月榜单见证了许多新入驻快手的品牌迅速成长。母婴品牌「安慕斯」实现垂类专业场景剧情化&#xff0c;引起用户发注&#xff0c;激发用户参与&#xff0c;单月涨粉突破60万&#xff1b;服饰箱包运动垂类下的珠宝品牌「DR钻戒」以“一生唯一真爱”的理念抢占消费者心智&#xf…

认识计算机ppt课件游戏,《认识计算机》PPT课件

《认识计算机》PPT课件 认知主义认为 学习是个体对环 境的作用&#xff0c;而并不仅是环境刺激引起的行为改变&#xff1b;环境只能提供潜在刺激&#xff0c;至于这些潜在刺激是否受到注意或被加工&#xff0c;这主要取决于学习者内部的认知结构。 认 识 计 算 机 认知主义认为…

UITextView: 响应键盘的 return 事件(收回键盘)

UITextView: 响应键盘的 return 事件&#xff08;收回键盘&#xff09; 此篇文章将要介绍UITextView: 响应键盘的 return 事件&#xff08;收回键盘&#xff09;的相关介绍&#xff0c;具体实例请看下文 UITextView: 响应键盘的 return 事件 UITextFieldDelegate代理里面响应re…

hashdos_调查HashDoS问题

hashdos近一个月前&#xff0c;我就如何在不与供应商互动的情况下临时解决 28C3上出现的HashDoS问题或其他代码缺陷发表了一些想法。 现在是时候更深入地研究复杂性攻击并查看源了。 我完全假设java.util.HashMap和java.util.Hashtable是受此攻击影响的最常用的Java数据结构&am…

ssb门限_画出滤波法ssb信号调制器模型,并说明低通和高通滤波器分别得到哪个边带信号...

匿名用户1级2016-05-25 回答如果输出已调信号的频谱和输入调制信号的频谱之间满足线性搬移关系&#xff0c;则称为线性调制&#xff0c;通常也称为幅度调制。线性调制的主要特征是调制前后的信号频谱从形状上看没有发生根本变化&#xff0c;仅仅是频谱的幅度和位置发生了变化。…

!doctype html报错h5,【Web前端问题】javascript import 报错

初学者, 想知道错误出在哪里&#xff0c;找到的资料都介绍的以下是我精简后的代码内容&#xff0c;错误提示在 main.js import那一行错误提示为&#xff1a;SyntaxError: Unexpected token ‘{‘. import call expects exactly one argumentindex.htmlLearnJavscriptbody{backg…

BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配

1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2375 Solved: 1005[Submit][Status][Discuss]Description Input Output Sample Input 1 3 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0Sample Output ˆ ˆHINT 对于30% 的数据满足1 ≤ n ≤ 12。对于100% 的…

idea 运行单个main方法_IntelliJ IDEA 运行你的第一个Java应用程序 idea运行main方法

打包文件 MANIFEST&period;MF 功能详解最近研究了如何在java工程打包,期间遇到的一些问题进行总结,如打包成test.jar 文件 Manifest-Version: 1.0 Main-Class: windows.VideoWindow ...第七课第四节&#xff0c;T语言流程语句(版本5&period;0)break语句 通常用在循环.遍…

Apache Spark中实现的MapReduce设计模式

该博客是该系列文章的第一篇&#xff0c;讨论了MapReduce设计模式一书中的一些设计模式&#xff0c;并展示了如何在Apache Spark&#xff08;R&#xff09;中实现这些模式。 在编写MapReduce或Spark程序时&#xff0c;考虑执行作业的数据流很有用。 即使Pig&#xff0c;Hive&a…