如何用纯CSS编写一个实用的进度条

如何用纯CSS编写一个实用的进度条,第1张

1、写一个样式为.containe的div用来包含进度条,其次是用样式为.title的div来包裹标题。   2、接下来,添加样式为.bar的di来包含填充和未填充的进度条样式。最后,在.bar里添加样式为.bar-unfill 和.bar-fill的span标签。 Plain   3.简单的进度条的CSS代码.container 类里将 width 定义为 30% 使进度条能够自适应。放一些简单的 border-radius 之类的属性在我们的 .title 类里以修改顶部和底部的左边的边框弧度,创建一个简单明了的平板式设计。 .container { width:30%margin:0 auto } .title { background:#545965color:#fffpadding:15pxfloat:leftposition:relative-webkit-border-top-left-radius:5px-webkit-border-bottom-left-radius:5px-moz-border-radius-topleft:5px-moz-border-radius-bottomleft:5pxborder-top-left-radius:5pxborder-bottom-left-radius:5px } 4.首先建一个白色的背景 .bar-unfill {height:15pxdisplay:blockbackground:#fffwidth:100%border-radius:8px} 5.定义进度条的样式,先令他的宽度为 100% ,因为这也会应用于定义和未定义的部分。所以在我们的 .bar-fill 的类里,令他的宽度为 0 作为起始的宽度,添加CSS3的 transition 属性使动画效果更加流畅,最后,我们将添加CSS3里的 animation 属性,定义动画的名字,和 duration 和 animation-iteration-count 属性。 .bar-fill { height:15pxdisplay:blockbackground:#45c9a5width:0border-radius:8px-webkit-transition:width .8s ease-moz-transition:width .8s easetransition:width .8s ease-webkit-animation:progressbar 7s infiniteanimation:progressbar 7s infinite } 6.使用CSS3里的 @keyframe 规则来设置宽度从 0 变化到 100% 。你也能定制你自己喜欢的变化。 @-webkit-keyframes progressbar {  from { width:0 } to { width:100% } } /* Standard syntax */ @keyframes progressbar { from { width:0 } to { width:100% } } 7.条纹进度条,应该把 .bar-fill 重新命名为 .bar-fill-stripes 。使用 backgrou-image 属性里的 linear-gradient 同时声明它的颜色。剩余的CSS3动画效果也是和上述相同,看下面的代码: .bar-fill-stripes { height:15pxdisplay:blockbackground:#e74c3cwidth:0border-radius:8pxbackground-image:linear-gradient(-45deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2)   50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent)-webkit-transition:width .8s ease-moz-transition:width .8s easetransition:width .8s ease-webkit-animation:progressbar 7s infiniteanimation:progressbar 7s infinite } 追踪 Tracker 8.最后产生动画效果 .track-wrap { position:relativetop:-18px-webkit-animation:progressbar2 7s infiniteanimation:progressbar2 7s infinite } .track { height:20pxdisplay:blockbackground:#e74c3cwidth:20pxborder-radius:10pxposition:relativeleft:-12px } @-webkit-keyframes progressbar2 { from { left:0 } to { left:100% } } /* Standard syntax */ @keyframes progressbar2 { from { left:0 } to { left:100% }

我用jquery做过一个,是我学jq的练习作品,代码写得有点菜,下面贴上它的拖动类,完整的代码见参考资料

$(function () {

/* 滑动条类

@param obj sliSlt 滑动条

@param obj sliBck 滑动块

@param obj numBox 颜色值框

@param obj sliMin 滑动范围最小值

@param obj sliMax 滑动范围最大值

*/

function slideBar(sliSlt,sliBck,numBox,sliMin,sliMax) {

this.sliSlt=sliSlt,

this.sliBck=sliBck,

this.numBox=numBox,

this.sliMin=sliMin,

this.sliMax=sliMax,

this.clr=255,

this.doc=$(document)

var _this=this

this.startDrag=function (evt1) {

//初始化

var inX=evt1.layerX || evt1.offsetX,

outLeft=_this.sliSlt.offset().left,

temX=0

//绑定mousemove事件

_this.doc.mousemove(function(evt2) {

temX=evt2.clientX-outLeft-1-inX

if(!_this.moveTo(temX,_this.sliMin,_this.sliMax)) return

_this.clr=parseInt(_this.calClr(temX))

_this.chgVal()

_this.setClrByRGB()

})

}

//移动滑块

this.moveTo=function (x,min,max) {

if(x<min || x>max) return false

_this.sliBck.css('left',x)

return true

}

//计算颜色值

this.calClr=function (x) {

return x*255/(_this.sliMax-_this.sliMin)

}

//改变颜色值

this.chgVal=function (c) {

c= c || _this.clr

_this.numBox.val(c)

}

//停止拖动

this.stopDrag=function () {

_this.doc.unbind('mousemove')

}

//设置颜色

this.setBodyClr=function (hexStr) {

$("body").css('backgroundColor',hexStr)

}

//设置#hexColor

this.setHexClr=function (hexStr) {

hexClrBox.val(hexStr)

}

//setColorByRGB

this.setClrByRGB=function () {

var hexStr=calcHexClr(clrBox.r.val(),clrBox.g.val(),clrBox.b.val())

_this.setBodyClr(hexStr)

_this.setHexClr(hexStr)

}

//绑定mousedown/up事件

this.sliBck.mousedown(function(evt) {_this.startDrag(evt)})

this.numBox.keydown(function(evt) {

if(evt.keyCode==13) {

if(!setPos()) return

_this.setClrByRGB()

}

})

this.doc.mouseup(_this.stopDrag)

}

var s1Slt=$("#cR"),s1Bck=$("#cR .slider"),s1Box=$("#cR .showBox"),

s2Slt=$("#cG"),s2Bck=$("#cG .slider"),s2Box=$("#cG .showBox"),

s3Slt=$("#cB"),s3Bck=$("#cB .slider"),s3Box=$("#cB .showBox"),

hexClrBox=$("#hexColor"),sliRag={min:0,max:495},randBtn=$("#randClr")

//创建类的实例

var s1=new slideBar(s1Slt,s1Bck,s1Box,sliRag.min,sliRag.max),

s2=new slideBar(s2Slt,s2Bck,s2Box,sliRag.min,sliRag.max),

s3=new slideBar(s3Slt,s3Bck,s3Box,sliRag.min,sliRag.max),

clrBox={

r:s1.numBox,

g:s2.numBox,

b:s3.numBox

}

//hexColor

hexClrBox.keydown(function(evt) {

if(evt.keyCode==13) {

hexStr=hexClrBox.val()

setClrByHex(hexStr)

}

})

//init

setClrByHex('#ABCDEF')

//由十六进制颜色值来设置

function setClrByHex(hexStr) {

var rgbClr=hexrgb(hexStr)

if(!rgbClr) return false

s1.numBox.val(rgbClr.r)

s2.numBox.val(rgbClr.g)

s3.numBox.val(rgbClr.b)

setPos()

s1.setHexClr(hexStr)

s1.setBodyClr(hexStr)

}

//设置位置

function setPos() {

var clr={r:parseInt(s1Box.val()),g:parseInt(s2Box.val()),b:parseInt(s3Box.val())}

if(!checkRGB(clr)) return false

var temp=sliRag.max-sliRag.min

s1Bck.css('left',clr.r*temp/255)

s2Bck.css('left',clr.g*temp/255)

s3Bck.css('left',clr.b*temp/255)

return true

}

//randBtn

randBtn.click(function () {

var clrVal={r:0,g:0,b:0}, animTime={r:0,g:0,b:0}

clrVal=objAsn(clrVal,0,495)

animTime=objAsn(animTime,500,800)

//修改并禁用按钮

randBtn.val('生成中…')

randBtn.attr('disabled','true')

//设置动画

crtAnim(s1Bck,{left:clrVal.r},animTime.r)

crtAnim(s2Bck,{left:clrVal.g},animTime.g)

crtAnim(s3Bck,{left:clrVal.b},animTime.b)

//动画时改变颜色及颜色值

var t= setInterval(function() {

rwVal(s1)

rwVal(s2)

rwVal(s3)

s1.setClrByRGB()

},60)

//动画结束后恢复按钮

setTimeout(function() {

randBtn.val('随机产生颜色')

randBtn.removeAttr('disabled')

clearInterval(t)

},findMax(new Array(animTime.r,animTime.g,animTime.b)))

//修改文本框的值

function rwVal(o) {

o.chgVal(parseInt(o.calClr(parseInt(o.sliBck.css("left")))))

}

//创建动画 o:创建动画的元素c:css集合t:动画时间

function crtAnim(o,c,t) {

o.animate(c,t,'swing')

}

})

//消息d出窗口

var infoBtn=$('.infoBtn'),infoBrd=$('#infoBrd'),closeBtn=$('#infoBrd a'),infoIfr=$('#infoBrd iframe')

infoBtn.click(function () {

$('<p>',{'id':'loadTip',text:'Loading......'}).appendTo(infoBrd)

infoIfr.attr("src",this.href)

infoBrd.toggle('normal')

return false

})

closeBtn.click(function () {

infoBrd.toggle('fast')

infoIfr.removeAttr("src")

return false

})

infoIfr.load(function(){

$('p#loadTip').empty()

})

})

首先,我们制作的这个进度条并没有后台数据作为支撑,所以是一个靠js实现的一个简单的页面。

我们首先需要新建一个html5的页面,其使用的progress元素实在html5时代才出现的。

我们在新建的页面中,输入一个段落标签,一个进度条,一个button按钮。

然后,我们需要设置一下进度条显示的进度。value代表从多少开始,max代表到多少结束。我们做的是百分比形式的,应该写成这样的。

这些做好之后,我们需要书写两个小的事件,实现原理大体上是鼠标单击下载按钮,开始下载变为正在下载百分之多少,等到达到我们预设的时间后显示下载完成。

我们之前已经给p标签和progress标签分别赋予了不同的id,我们需要获取到这两个元素,并将他们赋给两个变量。

我们还要将progress的初始值设为0,当鼠标单击的时候,我们以一定的时间为周期调用写好的事件。

函数写好之后,我们在浏览器中调试,点击下载按钮之后会在300ms内完成下载时间。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7230129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存