博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
css3关键帧动画实现轮播效果
阅读量:6564 次
发布时间:2019-06-24

本文共 4112 字,大约阅读时间需要 13 分钟。

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

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

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

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

 

1 2     
3
头部4
5
6
7

 

   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 }

 

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

题外话:

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

 

 

 

转载于:https://www.cnblogs.com/CodeShero/p/7265855.html

你可能感兴趣的文章
PDF中添加页面/合并 PDF 内容
查看>>
JS仿FLASH特效可跳转回首页的CSS二级联动菜单
查看>>
页面导入样式时,使用link和@import有什么区别?
查看>>
类成员与类的实例成员
查看>>
Spark源码编译并在YARN上运行WordCount实例
查看>>
Spring AOP + AspectJ annotation example
查看>>
Spring VS EJB 3 的若干认识误区(转)
查看>>
React.js初探(一)
查看>>
Neo4j CQL -(17)- NULL值
查看>>
BZOJ4554: [Tjoi2016&Heoi2016]游戏 luoguP2825 loj2057
查看>>
json_encode后的中文不编码成unicode
查看>>
修改纵断面图标注栏
查看>>
Flex创建带有空间信息的椭圆(Polygon)
查看>>
【转】参照protobuf,将json数据转换成二进制在网络中传输。
查看>>
Python中的str与bytes之间的转换的三种方法
查看>>
java异常常见面试问题
查看>>
课后作业5
查看>>
Centos7.1环境下搭建BugFree
查看>>
共用y轴的双图形绘制
查看>>
(错误) Eclipse使用Maven创建Web时错误
查看>>