需求分析
哈哈,上动态图真的是一下就明了了。
就是滚动么滚动,那么制作这个有什么方法呢?我们来总结一下:
html骨架
其实很简单,最外面的 先把基本的css样式实现 可以看看大致的样式: 参数: 看看效果: 通过css3中的关键帧,可以得到跳步的效果。先通过一个短的看一下思路。 如果个数不确定,那么就需要动态的计算,用js动态地添加
控制运动,里面是展示动画
基本css样式
*{
margin:0;
padding:0;
}
.roll{
margin: 100px auto;
width: 200px;
height: 40px;
overflow:hidden;
border: 1px solid aquamarine;
}
.roll ul{
list-style: none;
}
.roll li{
line-height:20px;
font-size:14px;
text-align:center;
}
实现思路
一、使用jquery的animate动画
animate()方法
$(selector).animate(styles,speed,easing,callback)
styles:必需参数,需要产生动画的css样式(使用驼峰式命名)
speed: 规定动画的速度
@number:1000(ms)
@string:"slow","normal","fast"
easing:动画速度(swing,linear)
callback:函数执行完之后的回调函数
$(document).ready(function(){
setInterval(function(){ // 添加定时器,每1.5s进行转换
$("#roll").find("ul:first").animate({
marginTop:"-40px" //每次移动的距离
},500,function(){ // 动画运动的时间
//$(this)指的是ul对象,
//ul复位之后把第一个元素和第二个元素插入
//到ul的最后一个元素的位置
$(this).css({marginTop:"0px"}).find("li:first").appendTo(this);
$(this).find("li:first").appendTo(this);
});
},1500)
});
二、使用css3的animation动画
初步
animation
的时间是5s。那么@keyframe
需要分成几份呢?因为是停顿,每一个滚动都需要两份,最后一个要跳动所以只有一份,所以需要5 * 2 - 1 = 9份
,看代码就晓得了:/*这里不做兼容性处理*/
.roll ul{
list-style: none;
animation: ani 5s linear infinite; /*动画ani,5s,循环匀速播放*/
}
@keyframes ani{
0%{
margin-top: 0;
}
12.5%{
margin-top: 0;
}
25%{
margin-top: -40px;
}
37.5%{
margin-top: -40px;
}
50%{
margin-top: -80px;
}
62.5%{
margin-top: -80px;
}
75%{
margin-top: -120px;
}
87.5%{
margin-top: -120px;
}
100%{
margin-top: -160px; /*最后是一个,这样可以打断动画*/
}
}
进阶
@keyframes
,到时候只要自己可以计算清楚间隔还有移动的距离就好。
@keyframes
,0~length,包括length,因为多一个,双数和单数分开。中的第一个和第二个克隆到
的最后