进度条实现的三种方式
一、鉴于我自己也是个初出茅庐的家伙,本文也只是作为自己学习中的一些实践吧!有什么好的想法也希望能和大家一起讨论学习~下面我将采用三种不同的方式来展示进度条。
二、js方式实现进度条
1、知识储备:本节中我们需要学习几个小知识,看起来内容好像很多,其实很少的哟,我们学习了js基础就会对这些概念很熟悉了。
(1)getElementsByClassName:根据类名来查找元素
(2)setInterval()方法和clearInterval()方法
(3)Math.floor()方法
(4)innerHTML
2、实现的思路:在基本的布局结束后,我们来思考一下,应该怎么样才能做出动态的进度条的效果呢?我首先想到的就是setInterval(),可能是因为这个我用的比较多~哈哈,总之,每隔固定的时间即使红色的div宽度增加。
3、上代码:
(1)js部分:
window.onload=function(){
var a2_1=document.getElementsByClassName("a2_1")[0];
var a2_2=document.getElementsByClassName("a2_2")[0].style.width;
var wid=setInterval(dodo,20);
function dodo(){
a2_2++;
var s1=Math.floor((a2_2/200)*100)+"%";
a2_1.innerHTML=s1;
document.getElementsByClassName("a2_2")[0].style.width=a2_2+"px";
a2_1.style.width=a2_2+"px";
while(a2_2>200){
clearInterval(wid);
}
}
}
(2)布局部分:
<div class="a2"> <div class="a2_2"></div> <div class="a2_1"></div> </div>
(3)css部分:
.a2{ height:14px; width:200px; position:relative; margin: 10px 0px; font-size: 12px; border:1px solid #ccc; } .a2 .a2_1{ text-align: center;} .a2 div{ height:14px; position:absolute; } .a2 .a2_2{ background-color:red; }
4、效果图:(抱歉,动态效果图我还不会做..后续补充 只能大家自己运行看看了)
三、jQuery方式实现进度条
1、知识储备:对jQuery稍有一些了解的话就一定听说过jQuery中的animate方法了,只是听过没有用过?没关系,我之前也没怎么用过。小百一下发现资料好多,听到动画就觉得很难,没有心情看下去了?没关系,我也这么觉得,所以其他我们统统不看,只需要知道两点:一是使用animate方法可以制作动画的效果;二是animate方法怎么用。便于大家理解,我们来看一个小例子~
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <script type="text/javascript" src="jquery.min.js"></script> 6 <script type="text/javascript"> 7 $(function(){ 8 $(".try").animate({width:"600px"},3000); 9 }) 10 </script> 11 <title></title> 12 <style type="text/css"> 13 .try{ 14 width:100px; 15 height:100px; 16 background-color:yellow; 17 border:1px solid #ccc; 18 } 19 </style> 20 </head> 21 <body> 22 <div class="try"></div> 23 </body> 24 </html>
是不是觉得代码仍旧很长呢,其实大家只看我用金黄色标记的三行就可以了。首先我们设置一个元素,并把它设成定宽,在jQuery中我们则为它设置了不一样的宽度!这里也是制作动画效果的重点,最开始的某一个属性和用animate设置的属性值一定要不一样,这样才能看出来有动画效果的哟~看到这里我想一定有很多小朋友和我一样,想要试试改变一下背景颜色吧,这样是不是就能做出淡变的效果呢?听起来很酷的样子~于是我修改了如下js代码:
$(function(){
$(".try").animate({backgroundColor:"red"},3000);
})
猜猜结果会怎么样呢?没错,我失败了!!!这时候我也迷茫了,不是说好会有动画效果的么...骗纸.....于是再次去w3c网站看了一遍,有明确的说,animate只对数值可以产生动画效果~(不可粗心大意)。同时,你也可以去网上小百一下,看看animate到底可以设置哪些css属性!
ps:3000是规定动画在多长时间内完成,没记错的话单位应该是毫秒。
呐,到此为止,我们已经学习了animate的简单用法,其他的暂时都不需要考虑,准备实现效果!
2、在最开始我们就讲过了基本的布局思想,此处不再赘述。上一小节的例子也基本实现了进度条的动画效果。下面我们来看一下完整的代码:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <script type="text/javascript" src="jquery.min.js"></script> 6 <script type="text/javascript"> 7 $(function(){ 8 $(".b").animate({width:"20%"},600); 9 $(".c").animate({width:"50%"},1500); 10 $(".d").animate({width:"80%"},2400); 11 $(".e").animate({width:"100%"},3000); 12 }); 13 </script> 14 <title>进度条</title> 15 <style type="text/css"> 16 .a1{ 17 height:14px; 18 width:200px; 19 position:relative; 20 margin: 10px 0px; 21 font-size: 12px; 22 border:1px solid #ccc; 23 } 24 .a1 .a1_1{ 25 text-align: center; 26 } 27 .a1 div{ 28 height:14px; 29 position:absolute; 30 } 31 .a1 .a1_2{ 32 background-color:red; 33 } 34 </style> 35 </head> 36 <body> 37 <h2>实现进度条的几种方式</h2> 38 <div> 39 <div style="width:500px;margin:0 auto;"> 40 <h4>实现方式一</h4> 41 <div class="a1"> 42 <div class="a1_2 b"></div> 43 <div class="a1_1 b">20%</div> 44 </div> 45 <div class="a1"> 46 <div class="a1_2 c"></div> 47 <div class="a1_1 c">50%</div> 48 </div> 49 <div class="a1"> 50 <div class="a1_2 d"></div> 51 <div class="a1_1 d">80%</div> 52 </div> 53 <div class="a1"> 54 <div class="a1_2 e"></div> 55 <div class="a1_1 e">100%</div> 56 </div> 57 </div> 58 </div> 59 </body> 60 </html>
3、效果图:
嗯,贴完了代码突然发现我没什么可解释的了...思路我们已经清楚了,代码中也没有难理解的部分。呐,就这样喽~
四、css3方式实现进度条
1、知识储备:平时工作的时候用到css3的时候也只限于阴影,圆角等。由于兼容性的问题,动画我基本用不到,so~我也是新学哒~这一节我们也只需要了解两个概念:一是keyframes;二是animation属性。下面我们大致讲解一下:
(1)keyframes:对于这个东东我还是比较陌生,据说玩儿flash的小朋友们都比较熟悉,那没试过flash的陀螺们该怎么办呢?不管它,我们知道它叫“关键帧”就可以了。没有太高深的知识,我们用它来给动画的每一帧定状态,例如,第一帧宽度是1,第二帧宽度是2....etc.再通俗一点儿的话,如果我们规定在一分钟内完成从冰箱里拿出水果沙拉的这个过程,首先第一步:打开冰箱门;第二步:拿出沙拉;第三步:关上冰箱门。两个道理神似,稍微动脑领会一下~当然,我是这么想的....(有没有道理的还要你们自己思考的哟~),下面来个小例子:
@-webkit-keyframes 'zy' {
0% {
width:0%;
}
50% {
width:50%;
}
100% {
width:100%;
}
}
ps:我用的chrome。
根据上面的例子我们看到我只写了三个状态,分别是0%,50%,100%。那是不是只能写这三个状态呢?不是哦!你从0%写到100%也是可以的。当动画只有0%,100%两个状态时,我们可以使用from和to来代替,就像下面这样:
@-webkit-keyframes 'zy' {//这货是什么
from {
width:0%;
}
to {
width:100%;
}
}
呐,我落下了一个概念:就是例子中的红色标注。这个是动画的名称,当定义动画的时候,你需要为它起个名字,名字的用处稍后将为你解答!
(2)animation(动画):在第三节我们学过一个jQuery中的动画方法animate(),虽然长得很像,但是不要混为一谈哦~一定要分清楚!
只讲理论的话还是会有一些迷糊,我们来看个例子熟悉一下它们的用法:
.a2 .a2_2{
-webkit-animation-name:'zy';//调用名称为'zy'的动画
-webkit-animation-duration: 3s;//设置动画持续时间为3秒
-webkit-animation-timing-function: linear;//匀速
-webkit-animation-delay: 2s;//动画延迟2s开始播放
}
@-webkit-keyframes 'zy' {//定义一个动画,宽度从0到100%的过渡
from {
width:0%;
}
to {
width:100%;
}
}
其实上面这段就是我们实现进度条的核心代码了。它的html结构如下:
<div style="width:500px;margin:0 auto;"> <h4>实现方式二</h4> <div class="a2"> <div class="a2_2"></div> <div class="a2_1">20%</div> </div> </div>
其它的布局思想均与第三节相同,利用relative和absolute定位。
2、效果图:大家一定要自己动手试试,没做之前我也觉得很难的样子,一点点的研究发现很有趣哟~
五、其实一定有小朋友已经发现了破绽,我只是实现了大致的效果,可是在实际应用中貌似毫无用处的样子。说了这么多其实我有时候也不知道自己说的有咩有道理,毕竟我现在也是个小白,我只是把自己亲身试验过的写出来,后台我不是很了解,后台怎样传过来数据,然后根据数据控制进度条的位置。我也就是大概提供一下思路啦,加油~
浙公网安备 33010602011771号