2010-05-21 28 views
8

我使用jQuery实现我自己的进度条。 我的问题是如何填充(例如)只有30%的背景? 我有什么选择? 基本上,进度条是一个简单的div带有圆角(-moz-边界半径)。 我正在使用Firefox 3.6.3。进度条灌装 - jQuery的执行

[更新] 我试图this例子。 如何强制填充区域的右侧不像第三个例子那样圆形?第四个例子是有问题的,但是...你会如何解决这个问题?

谢谢!

+0

你问如何填充进度条或只是它的背景 – Starx 2010-05-21 13:45:11

+0

宽度与进度栏值成正比的背景。 – 2010-05-21 14:11:41

+0

要修正第四个示例,只需在容器后面放置红色填充颜色*,并将容器的背景设置为白色,并且中间是透明的。 – mpen 2010-05-24 22:12:17

回答

4

不知道你正在使用动画进度条的东西,但如果你可以改变半径接近结束时,您可以平稳过渡。

$('#inner4') 
    .css('width',25) 
    .css('-moz-border-radius-topright','0') 
    .css('-moz-border-radius-bottomright','0') 
    .animate(
     { 
     width:425 
     }, 
     3000, 'linear', 
     function() { 
      $('#inner4').animate({ 
      width:450, 
      '-moz-border-radius-bottomright':'+=25', 
      '-moz-border-radius-topright':'+=25' 
      }, 
      200,'linear', 
      function() {} 
     );//end inner animate 
     } 
    );//end animate 

Here's an example

+0

+1不错的尝试兄弟! ;-) – 2010-05-29 15:42:46

5

一个简单的选择是使用背景色,确保外容器的宽度是固定的,只需要设置内部div的宽度的百分比这是一样的进步。

+0

所以你建议使用2个容器。我不知道内部容器是否确实需要...也许有一些选项只填充一些背景部分? – 2010-05-21 13:46:24

+3

你可以用一个div来做到这一点,并使用背景位置来做背景图片。你知道进度条有多宽,并且图像需要至少有那么宽。然后根据进度值移动背景位置以填充div。 – 2010-05-21 13:50:48

+0

它最好使用外部和内部,所以你可以将外部设置为静态宽度,比如说120px或者适合你页面的东西,那么内部div可以用百分比来确定大小,并且它将相对于外部div。 以下Adirael的例子很好地适用于此。 – 2010-05-21 13:52:26

3

您可以使用2个的div,一个在另一个内部,把背景在内之一,设置它的宽度与一%,这样的事情:

<div style=""> 
    <div style="background: red; width: 50%">&nbsp;</div> 
</div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 
+0

我想知道为什么这个' '需要? – 2010-05-21 14:10:55

+0

我可以给div一个高度,而不仅仅是宽度,我想是懒惰!您可以将样式更改为“宽度:50%;高度:5px”,并移除牢不可破的空间:) – Adirael 2010-05-21 14:18:53

+0

好的,谢谢!我尝试了你的想法,但无法理解如何强制填充区域的右侧不像第三个示例中那样四舍五入:http://jsfiddle.net/EcSzy/第四个示例虽然有问题,但......如何你解决这个问题? – 2010-05-21 14:34:34

4

你可以使用一个DIV和图像,正如我前面在评论中提到的那样。这是你可以做到的一种方式。 (不完全测试,因此它可能会断裂。)

HTML:

<div id="progressBar"></div> 

CSS:

#progressBar { 
    width: 200px; 
    height: 20px; 
    background: url('http://o.imm.io/x9E.jpg') no-repeat; 
    background-position: -200px 0px; 
    -moz-border-radius: 10px; 
    -webkit-border-radius: 10px; 
} 

JS:

function setProgress(target,value) { 

    var oldPosition = $(target).css("backgroundPosition"); 

    // Log the old position 
    console.log("Old position: " + oldPosition); 
    var newPosition = parseInt(oldPosition) + parseInt(value); 

    // Log the new position 
    console.log("New position: " + newPosition); 
    $(target).animate({backgroundPosition: newPosition + 'px 0px'}) 
} 

编辑:我添加圆角角落和它完全按照您指定的方式工作,圆角没有问题。

编辑2:查看此代码的JSBin版本。

编辑3:正如OP所说,他们需要进度条的灵活大小。这个实现不会那样做。我会建议(如我早些时候)使用jQueryUI Progress Bar。它很容易使用,而且相当轻巧。

编辑4:我想出的这个另一种实现方式,这需要多一点的Javascript,但你可以在这里测试一下:http://jsfiddle.net/ntnz4/7/

+0

的确,这仅限于一套尺寸。但是,您没有指定您需要用户能够设置宽度。 ;) – 2010-05-24 22:00:12

+0

刚刚添加了新版本的进度条,请查看http://jsfiddle.net/ntnz4/7/ – 2010-05-25 21:23:53

+0

感谢您的努力!有一个问题,如果CSS中的边框半径发生了变化,例如20px,那么你的代码没有考虑到这一点,对吧?我正在寻找100%CSS可配置解决方案。 – 2010-05-26 04:42:02

1

我做你在做什么我的几个网站,这里就是我所做的:

我第一次做了一些基本的标记:

<div id="progressBar"> 
    <div id="progressBarInner"></div> 
</div> 

而CSS:

#progressBar { 
    width: 200px; 
    height: 20px; 
} 

#progressBarInner { 
    background: url('path/to/your/progress/image.jpg'); 
    width: 100%; 
    height: 100%; 
} 

这样做时,设定的进度其实是非常简单的。无论您希望在进度栏中显示哪种进度,您都设置为#ProgressBarInner元素的宽度。例如,如果你想显示32%,你会设置这样的:

width: 32%

progressBarInner股利。

我不知道如何做到这一点使用jQuery关闭我的头顶,但我知道一个事实,你可以使用它设置CSS属性,所以这是完全可能的。

+0

感谢您的解释,但我的主要问题是我没有圆角了解如何管理。 – 2010-05-24 01:48:40

1

HTML:

<div class="progress"><div style="width:30%"></div></div> 

CSS:

.progress { 
    width: 300px; 
    -moz-border-radius: 5px; 
    -webkit-border-radius: 5px; 
} 

.progress div { 
    background: url(background.png); 
    height: 10px; 
    -moz-border-radius-topright: 5px; -moz-border-radius-bottomright: 5px; 
    -webkit-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px; 
} 
-1

我你想要就在充满色彩的圆角做什么有点糊涂了!但如果它应该是直线前进,而不是圆角,只需用css overflow设置包装div:hidden;

因此,内部div将一路晋级到100%,并且当传球区域将产生一个很酷的效果!