javahtml中拉动进度条怎么做?类似调显示器颜色时的进度条!可以用jquery!

html-css019

javahtml中拉动进度条怎么做?类似调显示器颜色时的进度条!可以用jquery!,第1张

我用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')

}

})

//消息弹出窗口

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内完成下载时间。

1、不自定义进度条的话就只能用默认进度条,默认的进度条是集合在video标签中的,这个我们无法实现不能拖动,但是可以模拟下,你可以使用让鼠标点击到视频所在的video或者div的时候无效化,原理就是鼠标选不到进度条,自然不能拖动了。如果你是要可以控制播放和暂停的话就实现js控制,反正是跳过video自带的控制器自己去写。2、用个透明的层或图片把进度条盖住