zoukankan      html  css  js  c++  java
  • css3实践之图片轮播(Transform,Transition和Animation)

      楼主喜欢追求视觉上的享受,虽常以牺牲性能无法兼容为代价却也乐此不疲。本文就通过一个个的demo演示来简单了解下css3下的Transform,Transition和Animation。

      本文需要实现效果:(请用chrome打开

    1. 图片轮播
    2. 图片自动轮播

    Transform

      根据我的理解,transform和width、height、background一样,都是dom的属性,不同的是它是css3旗下的,比较屌,能够对原来的dom元素进行移动、缩放、转动、拉长或拉伸,跟canvas上的某些api神似,这么说来transform好像能干些js才能干的事。

      transform分2D变换和3D变换,w3school中有很好的介绍和例子,具体请猛戳:CSS3 2D 转换  CSS3 3D 转换

      为了方便查找,我把w3school上的截图在这里保存一份:

    Transition

      transition的解释是过渡,我的理解是css之间的变换,但是这个变换很屌很平滑,类似动画。举个栗子,一开始某个dom的类是classA,通过某种操作(比如被点击了)后变成了classB,如果没有transition,类之间的变换是很快的,机械般瞬间完成,但是有了transition,这便会是一个很缓和平滑的过程。

      我们通过demo来讲解transition的使用方式。

      写好如下的html文件:

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css">
    </style>  
    <img src='http://hanzichi.github.io/img/img0.png' />

      打开来是非常简单的一张图,加上css:

    img {
      -webkit-transition: all 1s ease-in-out 0s;
    }
    
    img:hover {
      -webkit-transform: 
        rotate(360deg)
        scale(0.5, 0.5);
    
      opacity: 0;
    }

      效果请猛戳:transition变换 (ps:所有demo都没有做兼容 请用chrome打开

      是否很简单?demo中,你只需设定好图片(img标签)原先的属性和hover后的属性,中间的变换过程全由transition搞定!而transition加在某个元素下(demo的transition加在img标签下),仿佛设置了一个监听器,一旦该元素的属性值即将要发生变化,就会自动检查transition中的设定的属性,一旦发现相匹配,则进行平滑的过渡。

      transition有4个属性,语法:transition: property duration timing-function delay  从前到后4个属性依次可理解成“过渡动画变换的属性”、“过渡花费时间”、“过渡过程的速度变化”和“过渡开始前的等待时间”(默认值:all 0 ease 0 前两个是必须的 后两个可省略)。

      如果不是所有属性都要进行平滑过渡,或者各属性过渡的时间、速度等设置各有需求,可以把要过渡的属性用逗号隔开,demo可写成:

    img {
      -webkit-transition: 
        -webkit-transform 1s ease-in-out 0s,
        opacity 1s ease-in-out 1s;
    }
    
    img:hover {
      -webkit-transform: 
        rotate(360deg)
        scale(0.5, 0.5);
    
      opacity: 0;
    }

      如果非得把transition的四个属性分开来写,可以这样:

    img {
      -webkit-transition-property: -webkit-transform, opacity;
      -webkit-transition-duration: 1s;
      -webkit-transition-timing-function: ease-in-out;
      -webkit-transition-delay: 0s;
    }
    

      我把后三个属性放在一起只写了一个值(因为值一样),你也可以像property一样分开来写用逗号隔开。

      这里再介绍下timing-function的取值。六大取值:(还是盗图w3cschool)

    • transition中的hover

      相信大家实践了transition后,对于transition到底是直接写在选择器上,还是写在选择器的hover上会表示疑惑,似乎效果一样。其实不然,如果对于一般的hover,也就是鼠标hover前后的过程是为逆过程的话,两种写法效果一致,但是如果hover前后效果不一样的话,transition需要分别加在选择器的hover前后,比如这个demo:猛戳看demo

      也就是说如果hover前后需要不一样的效果,就可以分别写两个transition。比如鼠标hover时颜色渐入2s,hover后渐出5s->猛戳demo

       

      小结:一般transition应用在dom的class变换中,可先行写好机械的变换,然后添加过渡效果。

    Animation

      Animation的解释是动画,加强版的transition。

      如果说transition能实现某些js效果,animation就更像是js了。类似于写一个canvas特效,特效总共比如说多少时间,我们能规定在什么时候该出现什么样的场景,而各个场景间的转换则完全由css3本身负责,而keyframes好比定义了一个js方法。

       主要应用在某个元素需要进行连续的n次css变换。一个简单的demo如下:animation动画

      我们在@keyframes 中创建动画时,请把它捆绑到某个选择器,否则不会产生动画效果。

      通过规定至少以下两项 CSS3 动画属性,即可将动画绑定到选择器:

    1. 规定动画的名称
    2. 规定动画的时长

    demo代码:

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css">
      img {
        /*-webkit-animation: myfirst 5s;*/
      }
      
      @-webkit-keyframes myfirst
      {
        0% {
          -webkit-transform: 
            rotate(0deg)
            scale(1, 1);
          opacity: 1;
        }
        
        50% {
          -webkit-transform: 
            rotate(360deg)
            scale(0.5, 0.5);
          opacity: 0.5;
        }
        
        100% {
          -webkit-transform: 
            rotate(0deg)
            scale(1, 1)
            translate(300px, 200px);
          opacity: 1;
        }
      }
    
      img {
        -webkit-animation: myfirst 5s linear 0s 1 alternate;
        /*停在结束位置*/
        -webkit-animation-fill-mode: forwards;
      }
    </style>  
    <img src='http://hanzichi.github.io/img/img0.png' />
    View Code

    更多请猛戳 CSS3 动画

    具体应用:图片轮播

      类似应用可先写好无过渡的代码,然后再在class转换之间添加transition。

      该demo(图片自动轮播)和transition有关的核心代码就几行,而js只是简单的对元素的class进行赋值,动画过程全由css3完成!

    img {
      position: absolute;
      -webkit-transition: all 2s ease-out;
    }
    
    .disappear {
      opacity: 0;
    }
    
    .show {
      opacity: 1;
    }
    

      当img的class从show转换成disappear或者从disappear转换成show时(img标签下的class变换),就会执行transition设置的过渡动画。

      另一个demo的实现也大同小异,有兴趣的可以参考源码:源码请猛戳

    总结

      总的来说,transform只是为dom增添一些属性,而如果搭配transition或者animation则能完成一些动画效果,我觉得实际应用较多的应该还是transition,可配合伪类或者click等事件。

      楼主对以上的理解不深,如有出入,还请指出。

      如需了解更多,可以参考这篇 CSS3 Transitions, Transforms和Animation使用简介与应用展示

  • 相关阅读:
    体检套餐管理系统
    在这个与金沂同桌的日子里,我在北大青鸟学习了 第四章 深入类的方法 下面是我的上机3
    总结
    今天晚上雨夹雪,爱人狠心把我撇。今夜孤独一个人,只好来把代码写。 欢迎阅读我的第四章笔记 深入类的方法
    我在北京写代码 写出心中悲与喜 写出人间的悲欢离合 欢迎阅读 我的第三章 使用集合组织相关数据(泛型集合)
    在那个春暖花开的季节 今天微微的小雨 伴着轻轻的晚风我们一起来编写 员工考勤信息管理
    非泛型集合
    经理评分系统
    模仿魔兽登录界面 编程小练习
    【BZOJ 3524】【Poi2014】Couriers 可持久化线段树
  • 原文地址:https://www.cnblogs.com/lessfish/p/4316731.html
Copyright © 2011-2022 走看看