zoukankan      html  css  js  c++  java
  • css3关键帧动画实现轮播效果

    实现效果:打开手机京东,可以看到首页的头部,以这个头部为基础,仿写一个类似的样式。

    思路:仔细观察可以发现,手机京东的头部是以一个搜索栏和轮播特效组成的,而这个搜索栏是以轮播特效做为背景的,现在运用css3关键帧动画,可以实现这样的头部效果。

    测试:首先,写一个简单的测试来验证思路是否正确,这样可以排除其他样式的干扰;测试如下:

       1.两个嵌套的div,内部div1以简单的文字和图片模拟的搜索栏

    1 <body>
    2     <div class="diva">
    3         <div class="div1">头部
    4             <img src="../img/放大镜.png">
    5         </div>
    6     </div>
    7 </body>

       2.由于动画的主要原理在于改变背景图片的位置,这里先介绍一下background-img,知道的同学自行跳过吧

        由url插入图片

    1         div{
    2             width: 300px;
    3             height: 200px;
    4             background: red;
    5             background-image: url(../img/放大镜.png);
    6         }

        效果:

        很明显看到,背景图片的大小不适合div的宽高,所以,用background-size设置图片的宽高

    1 background-image: url(../img/放大镜.png);
    2 background-size: 20px 30px;

        效果:

        因为背景图默认的设置是重复背景图片,所以更改为禁止重复

    1 background-image: url(../img/放大镜.png);
    2 background-size: 20px 30px;
    3 background-repeat: no-repeat;        /*禁止图片重复*/

        效果:

        这个时候呢,假如想调整图片的位置,就需要设置图片的position

    1 background-image: url(../img/放大镜.png);
    2 background-size: 20px 30px;
    3 background-repeat: no-repeat;        /*禁止图片重复*/
    4 background-position: 100px 50px;        /*这里设置的是px坐标,也可以用left或者百分比的形式设置图片位置*/

        效果:

       3.给外部diva设置宽度、背景色和边框,便于观察;给内部div1添加宽高和背景图片,注意这里div1的宽度是背景图片宽度的总和;当然,div1中的图片也要适当调整宽高。

     1          .diva{
     2             width: 100%;
     3             background: red;
     4             border: 5px solid blue;
     5         }
     6         .div1{
     7             width: 900px;
     8             height: 200px; 
     9             background-image: url(../img/轮播1.jpg),url(../img/轮播2.jpg),url(../img/轮播3.jpg);
    10             background-repeat: no-repeat;
    11             background-size: 300px 200px;
    12             background-position: 0 0,300px 0,600px,0;
    13         }
    14         .div1 img{
    15             width: 20px;
    16             height: 20px;
    17         }

        大概就是这个效果啦

       4.将div1的宽度设置为一张图片的宽度,就定义一个相当于用户的可见窗口

    1               .div1{
    2             width: 300px;        /*设置div宽度为一张图片的宽度*/
    3             height: 200px; 
    4             border: 10px solid green;
    5             background-image: url(../img/轮播1.jpg),url(../img/轮播2.jpg),url(../img/轮播3.jpg);
    6             background-repeat: no-repeat;
    7             background-size: 300px 200px;
    8             background-position: 0 0,300px 0,600px,0;
    9         }

        效果:

        5.由于设置的窗口大小,剩余的两张图片不可见了,相当于屋子里面有三个人,你从一个窗口看进去,只看到了一个人,其他人被墙壁遮住了,这时如果这个人往左走,离开窗口,第二个人走到窗口位置,就可以看到第二个人了。

     1          .div1{
     2             width: 300px;        /*设置div宽度为一张图片的宽度*/
     3             height: 200px; 
     4             border: 10px solid green;
     5             background-image: url(../img/轮播1.jpg),url(../img/轮播2.jpg),url(../img/轮播3.jpg);
     6             background-repeat: no-repeat;
     7             background-size: 300px 200px;
     8             /*background-position: 0 0,300px 0,600px,0;*/
     9             background-position: -300px 0,0 0,300px,0;        /*图片左移*/
    10         }

        效果:

        6.当这三个人不断重复这种移动,就会对窗户外的你形成轮播效果,css3的关键帧动画就可以实现这种重复不断的移动,不了解的同学可以自行百度,这里就不细说关键帧动画原理了。

    css3关键代码:

     1 .home{
     2     width: 320px;        /*为了适应iphone5的分辨率设置的宽度*/
     3     height: 200px;
     4     background: url(../img/轮播1.jpg),url(../img/轮播2.jpg),url(../img/轮播3.jpg),url(../img/轮播1.jpg);
     5     /*第四张图片与第一张图片一致是为了轮播的时候效果更加自然,否则从最后一张播放到第一张会造成生硬的停顿*/
     6     
     7     background-repeat: no-repeat;
     8     background-size: 320px 200px;
     9     animation: kbg 9s linear infinite;
    10     /*调用kbg关键帧动画,动画时长为9s,匀速运动,无限循环播放(除非页面被关闭)*/
    11 }
    12 @keyframes kbg{
    13     0%{
    14         background-position: 0 0,320px 0,640px 0,960px 0;
    15     }
    16     5%{
    17         background-position: 0 0,320px 0,640px 0,960px 0;
    18     }
    19 
    20     30%{
    21         background-position: -320px 0,0 0,320px 0,640px 0;
    22     }
    23     40%{
    24         background-position: -320px 0,0 0,320px 0,640px 0;
    25     }
    26 
    27     60%{
    28         background-position: -640px 0,-320px 0,0 0,320px 0;
    29     }
    30     70%{
    31         background-position: -640px 0,-320px 0,0 0,320px 0;
    32     }
    33 
    34     95%{
    35         background-position: -960px 0,-640px 0,-320px 0,0 0;
    36     }
    37     100%{
    38         background-position: -960px 0,-640px 0,-320px 0,0 0;
    39     }
    40 }

    总结:关键帧轮播的视觉效果就和手机京东差不多,所缺的就是一些细节的地方。可能有人说网上的轮播器一大把,这样做是重复造轮子,但是我坚信学以致用,多练习才能理解和掌握知识要点。

    题外话:

        小妹初来乍到,望大家捧个人场,多多评论指正,最好加个关注呢,期待和各位的交流~

  • 相关阅读:
    硬盘安装windows2008的方法
    win7,win2008R2的vs2008 破解方法
    学习正则表达式
    C#里内置的DateTime基本功能
    jQuery Ajax 实例 全解析
    TreeView 部署后不能显示图标、js出错原因
    js 操作Listbox js 获取Listbox选择的值的代码
    ajax调用后台Datatable
    转:jquery刷新页面 页面跳转 js常用函数
    GridView多行表头的实现
  • 原文地址:https://www.cnblogs.com/CodeShero/p/7265855.html
Copyright © 2011-2022 走看看