在前面,我们已经讲解了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的颜色改变,以及高度和宽度都改变的效果。

实现代码:

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属性支持多值,多值部分稍后介绍);而空格隔开的代表不同属性的四个关于过渡的子属性。

二、案例:扇形导航

实现代码:

扇形导航

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个子菜单分别平均分布在扇形中。那么首先,我们是不是应该先来计算一下角度以及半径的关系。

至于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事件将在元素的每个样式属性值发生改变之后触发一次。

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

  1. c语言图形学画扇形代码,WPF画图の利用Path画扇形(仅图形)(示例代码)

    原文:WPF画图の利用Path画扇形(仅图形) 一.画弧 Path继承自Sharp,以System.Windows.Shapes.Shape为基类,它是一个具有各种方法的控件. 我们先看一段xaml代 ...

  2. html5一键导航代码,网页端利用百度地图接口,制作一键导航功能

    百度地图标点功能 调用该接口可调起PC或web地图,且在指定坐标点上显示点的名称和内容信息 服务地址 http://api.map.baidu.com/marker     //PC&WebA ...

  3. 利用3D效果制作立体导航栏

    利用3D效果制作立体导航栏 文章目录 使用3D效果制作3D导航栏 一.3D的旋转以及位移 二.使用步骤 1.搭建html骨架 2.添加css样式 前言 利用3D效果制作导航栏: 制作一个好玩的3D导航 ...

  4. 动态导航多级下拉菜单 html,css3实现的多级渐变下拉菜单导航效果代码

    本文实例讲述了css3实现的多级渐变下拉菜单导航效果代码.分享给大家供大家参考.具体如下: 这是一款基于css3实现的下拉菜单导航,是非常漂亮的动画菜单,而且是多级菜单的形式,测试时发现可支持5级,估 ...

  5. IE8上面的旋转和透明度,利用滤镜属性去处理(兼容css3的transform和rgba())

    1.关于在IE浏览器上面的一个旋转问题 IE8不支持css3的transform属性,因此在兼容ie8的时候需要用到滤镜来进行兼容 语法: 兼容c3属性的浏览器在设置旋转属性的时候: transfor ...

  6. 一款由css3和jquery实现的响应式设计导航

    2014年响应式设计成为设计主流.今天要给大家带来一款由css3和jquery实现的响应式设计导航.当显示器为pc时,导航为横条.当客户端为移动端时,呈现坚形导航.我们一起看下效果图: 在线预览    ...

  7. CSS3: 利用分层动画让元素沿弧形路径运动

    原文:Moving along a curved path in CSS with layered animation 翻译:涂鸦码龙 译者注:部分代码示例在原文中可以看效果(作者写在博文里面了-), ...

  8. 毛玻璃效果 php,CSS3教程之制作倾斜导航条和毛玻璃效果

    这篇文章主要介绍了使用CSS3制作倾斜导航条和毛玻璃效果,需要的朋友可以参考下 导航条对于每一个Web前端攻城狮来说并不陌生,但是毛玻璃可能会相对陌生一些.简单的说,毛玻璃其实就是让图片或者背景使用相 ...

  9. css3怎么实现筛子的效果??transform得常用属性??

    核心思路: 将六个平面正方形包裹在一个大的div盒子里面,通过定位将盒子都重叠起来,在设想一下正方体的一个立体感,那怎样就实现将六个正方性围城一个正方体??? 1.通过translate平移将五个正方 ...

最新文章

  1. AS插件-Android Drawable Importer
  2. c++ explicit 修饰构造函数
  3. STM32 基于正电原子开发板,改换芯片为STM32F103R6,Proteus仿真的一些问题
  4. c 连接mysql数据库查询_C语言实现访问及查询MySQL数据库的方法
  5. 使用mysql数据库与go进行交互
  6. 百度万人协同规模下的代码管理架构演进
  7. 最速下降法极小化rosenbrock函数 代码_典型算法思想与应用9|分支限界法与电路布线问题
  8. Navitas GaN IC 驱动 Vivo 可折叠手机
  9. MT7628学习笔记(4)——固件烧录(TFTP方式)
  10. GMSK调制解调(一)
  11. Python 制作动态图
  12. 计算机对操作系统函数的调用失败,解决win7提示“远程过程调用失败且未执行”的方案...
  13. HTML页面转PDF导出加水印并解决字被截断的问题
  14. 【不忘初心】Windows11 22000.168 X64 四合一[纯净精简版][2.77G](2021.8.29)
  15. 创建一个DAPP的全流程
  16. WOS(Web of Science)检索规则
  17. matlab 椭圆方程拟合,matlab中如何插值拟合求椭圆方程
  18. 常见短信平台发送的号码有哪些?95开头、106开头短信发送号码区别说明
  19. 逆向经验 + 逆向工具
  20. 2010数据库大事记

热门文章

  1. 【渝粤教育】电大中专沟通技巧作业 题库
  2. Semtech的LoRa技术实现智能化工业应用管理
  3. php mysql_query预处理,php+mysqli使用预处理技术进行数据库查询的方法
  4. mysql 传统数据恢复_mysql 数据恢复实例
  5. 工业机器人 答案 韩建海_中国将连续8年成为工业机器人第一大市场,还将持续多久?...
  6. 基于代价函数小波脊相位的MFSK信号符号速率估计MATLAB仿真及代码(2020.12.14更新)
  7. (1.3)HarmonyOS鸿蒙启动程序运行流程
  8. python和sql_Python和SQL 2017的强大功能
  9. swfobject.embedSWF属性与用法
  10. 从客户的角度看网站涉及的第一要素