Bootstrap 像 Github 这样的反向动画进度条
Bootstrap Reverse Animated Progress Bar like Github
当使用迁移工具 here 将新的 repos 导入 Github 时,有一个用 Bootstrap 3.
我正在尝试重现此进度条。
Here there is my achievement so far, and below or here 是一个工作示例:
- 第一个例子是静态反向进度条
- 第二个例子显示动画保留进度条
- 第三个例子是一个标准的进度条
由于某种原因(可能是 属性 background-image
?),reverse-progress
条在更新百分比状态之前已完全显示,而常规 progressbar
工作正常。
进度更新功能有什么问题UpdateUIReverseProgressBar
?
/**
* Bootstrap Progress Bar
* @author Loreto Parisi (loretoparisi@gmail.com)
*/
UpdateUIProgressBar = function(containerId, progress, text) {
text = text || ''
if (!$('#progressdiv').length) {
var progress = '<div id="progressdiv" class="progress"><div id="progressbardiv" class="progress-bar" role="progressbar" style="min-width:1em;width:0%;">' + text + '</div></div>'
$('#' + containerId).append(progress);
} else {
$('#progressbardiv').text(text);
$('#progressbardiv').attr('style', 'min-width: 1em;width: ' + progress + '%;');
$('#progressbardiv').attr('aria-valuenow', progress);
if (progress == 100) {
setTimeout(function() {
$("#progressdiv").remove();
}, 1000 * 2);
}
}
} //UpdateUIProgressBar
/**
* Bootstrap Reverse ProgressBar inspired to Github UI
* @author Loreto Parisi (loretoparisi@gmail.com)
*/
var UpdateUIReverseProgressBar = function(containerId, progress) {
if (!$('#revprogressdiv').length) {
var progress = '<div id="revprogressdiv" class="reverse-progress-container"><div id="revprogressdiv" class="reverse-progress-bar anim-shrink-x" role="progressbar" style="min-width:1em;width:0%;"></div></div>'
$('#' + containerId).append(progress);
} else {
$('#revprogressdiv').attr('style', 'min-width: 1em;width: ' + progress + '%;');
if (progress == 100) {
setTimeout(function() {
$("#revprogressdiv").remove();
}, 1000 * 2);
}
}
} //UpdateUIReverseProgressBar
var perc = 0,
step = 10;
var interval = setInterval(function() {
perc = perc + step;
UpdateUIReverseProgressBar('myreverseprogress', perc);
UpdateUIProgressBar('myprogress', perc);
if (perc >= 100) clearInterval(interval);
}, 1000)
.reverse-progress-container {
position: relative;
height: 3px;
background-color: #e5e9eb;
background-image: -webkit-linear-gradient(left, #599e47, #306a94, #492860, #c03d32, #d17337);
background-image: linear-gradient(to right, #599e47, #306a94, #492860, #c03d32, #d17337);
background-size: 100% 3px;
}
.anim-shrink-x {
-webkit-animation-name: shrink-x;
animation-name: shrink-x;
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-delay: 0.5s;
animation-delay: 0.5s;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css.map" />
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap-theme.min.css" />
<div class="panel panel-default">
<div class="panel-body">
<div class="reverse-progress-container">
<div style="width: 0%; min-width: 0%; animation-duration: 5s;" class="reverse-progress-bar anim-shrink-x"></div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-body">
<div class="progress" id="myreverseprogress"></div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-body">
<div class="progress" id="myprogress"></div>
</div>
</div>
我已经为元素添加了初始宽度,请参阅代码中的注释
/**
* Bootstrap Progress Bar
* @author Loreto Parisi (loretoparisi@gmail.com)
*/
UpdateUIProgressBar = function(containerId, progress, text) {
text = text || ''
if (!$('#progressdiv').length) {
var progress = '<div id="progressdiv" class="progress"><div id="progressbardiv" class="progress-bar" role="progressbar" style="min-width:1em;width:0%;">' + text + '</div></div>'
$('#' + containerId).append(progress);
} else {
$('#progressbardiv').text(text);
$('#progressbardiv').attr('style', 'min-width: 1em;width: ' + progress + '%;');
$('#progressbardiv').attr('aria-valuenow', progress);
if (progress == 100) {
setTimeout(function() {
$("#progressdiv").remove();
}, 1000 * 2);
}
}
} //UpdateUIProgressBar
/**
* Bootstrap Reverse ProgressBar inspired to Github UI
* @author Loreto Parisi (loretoparisi@gmail.com)
*/
var UpdateUIReverseProgressBar = function(containerId, progress) {
if (!$('#revprogressdiv').length) {
/* added width 0px in the following */
var progress = '<div id="revprogressdiv" class="reverse-progress-container" style="width: 0px;"><div id="revprogressdiv" class="reverse-progress-bar anim-shrink-x" role="progressbar" style="min-width:1em;width:0%;"></div></div>'
$('#' + containerId).append(progress);
} else {
$('#revprogressdiv').attr('style', 'min-width: 1em;width: ' + progress + '%;');
if (progress == 100) {
setTimeout(function() {
$("#revprogressdiv").remove();
}, 1000 * 2);
}
}
} //UpdateUIReverseProgressBar
var perc = 0,
step = 10;
var interval = setInterval(function() {
perc = perc + step;
UpdateUIReverseProgressBar('myreverseprogress', perc);
UpdateUIProgressBar('myprogress', perc);
if (perc >= 100) clearInterval(interval);
}, 1000)
.reverse-progress-container {
position: relative;
height: 3px;
background-color: #e5e9eb;
background-image: -webkit-linear-gradient(left, #599e47, #306a94, #492860, #c03d32, #d17337);
background-image: linear-gradient(to right, #599e47, #306a94, #492860, #c03d32, #d17337);
background-size: 100% 3px;
}
.anim-shrink-x {
-webkit-animation-name: shrink-x;
animation-name: shrink-x;
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-delay: 0.5s;
animation-delay: 0.5s;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css.map" />
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap-theme.min.css" />
<div class="panel panel-default">
<div class="panel-body">
<div class="reverse-progress-container" >
<div style="width: 0%; min-width: 0%; animation-duration: 5s;" class="reverse-progress-bar anim-shrink-x"></div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-body">
<div class="progress" id="myreverseprogress"></div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-body">
<div class="progress" id="myprogress"></div>
</div>
</div>
当使用迁移工具 here 将新的 repos 导入 Github 时,有一个用 Bootstrap 3. 我正在尝试重现此进度条。 Here there is my achievement so far, and below or here 是一个工作示例:
- 第一个例子是静态反向进度条
- 第二个例子显示动画保留进度条
- 第三个例子是一个标准的进度条
由于某种原因(可能是 属性 background-image
?),reverse-progress
条在更新百分比状态之前已完全显示,而常规 progressbar
工作正常。
进度更新功能有什么问题UpdateUIReverseProgressBar
?
/**
* Bootstrap Progress Bar
* @author Loreto Parisi (loretoparisi@gmail.com)
*/
UpdateUIProgressBar = function(containerId, progress, text) {
text = text || ''
if (!$('#progressdiv').length) {
var progress = '<div id="progressdiv" class="progress"><div id="progressbardiv" class="progress-bar" role="progressbar" style="min-width:1em;width:0%;">' + text + '</div></div>'
$('#' + containerId).append(progress);
} else {
$('#progressbardiv').text(text);
$('#progressbardiv').attr('style', 'min-width: 1em;width: ' + progress + '%;');
$('#progressbardiv').attr('aria-valuenow', progress);
if (progress == 100) {
setTimeout(function() {
$("#progressdiv").remove();
}, 1000 * 2);
}
}
} //UpdateUIProgressBar
/**
* Bootstrap Reverse ProgressBar inspired to Github UI
* @author Loreto Parisi (loretoparisi@gmail.com)
*/
var UpdateUIReverseProgressBar = function(containerId, progress) {
if (!$('#revprogressdiv').length) {
var progress = '<div id="revprogressdiv" class="reverse-progress-container"><div id="revprogressdiv" class="reverse-progress-bar anim-shrink-x" role="progressbar" style="min-width:1em;width:0%;"></div></div>'
$('#' + containerId).append(progress);
} else {
$('#revprogressdiv').attr('style', 'min-width: 1em;width: ' + progress + '%;');
if (progress == 100) {
setTimeout(function() {
$("#revprogressdiv").remove();
}, 1000 * 2);
}
}
} //UpdateUIReverseProgressBar
var perc = 0,
step = 10;
var interval = setInterval(function() {
perc = perc + step;
UpdateUIReverseProgressBar('myreverseprogress', perc);
UpdateUIProgressBar('myprogress', perc);
if (perc >= 100) clearInterval(interval);
}, 1000)
.reverse-progress-container {
position: relative;
height: 3px;
background-color: #e5e9eb;
background-image: -webkit-linear-gradient(left, #599e47, #306a94, #492860, #c03d32, #d17337);
background-image: linear-gradient(to right, #599e47, #306a94, #492860, #c03d32, #d17337);
background-size: 100% 3px;
}
.anim-shrink-x {
-webkit-animation-name: shrink-x;
animation-name: shrink-x;
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-delay: 0.5s;
animation-delay: 0.5s;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css.map" />
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap-theme.min.css" />
<div class="panel panel-default">
<div class="panel-body">
<div class="reverse-progress-container">
<div style="width: 0%; min-width: 0%; animation-duration: 5s;" class="reverse-progress-bar anim-shrink-x"></div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-body">
<div class="progress" id="myreverseprogress"></div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-body">
<div class="progress" id="myprogress"></div>
</div>
</div>
我已经为元素添加了初始宽度,请参阅代码中的注释
/**
* Bootstrap Progress Bar
* @author Loreto Parisi (loretoparisi@gmail.com)
*/
UpdateUIProgressBar = function(containerId, progress, text) {
text = text || ''
if (!$('#progressdiv').length) {
var progress = '<div id="progressdiv" class="progress"><div id="progressbardiv" class="progress-bar" role="progressbar" style="min-width:1em;width:0%;">' + text + '</div></div>'
$('#' + containerId).append(progress);
} else {
$('#progressbardiv').text(text);
$('#progressbardiv').attr('style', 'min-width: 1em;width: ' + progress + '%;');
$('#progressbardiv').attr('aria-valuenow', progress);
if (progress == 100) {
setTimeout(function() {
$("#progressdiv").remove();
}, 1000 * 2);
}
}
} //UpdateUIProgressBar
/**
* Bootstrap Reverse ProgressBar inspired to Github UI
* @author Loreto Parisi (loretoparisi@gmail.com)
*/
var UpdateUIReverseProgressBar = function(containerId, progress) {
if (!$('#revprogressdiv').length) {
/* added width 0px in the following */
var progress = '<div id="revprogressdiv" class="reverse-progress-container" style="width: 0px;"><div id="revprogressdiv" class="reverse-progress-bar anim-shrink-x" role="progressbar" style="min-width:1em;width:0%;"></div></div>'
$('#' + containerId).append(progress);
} else {
$('#revprogressdiv').attr('style', 'min-width: 1em;width: ' + progress + '%;');
if (progress == 100) {
setTimeout(function() {
$("#revprogressdiv").remove();
}, 1000 * 2);
}
}
} //UpdateUIReverseProgressBar
var perc = 0,
step = 10;
var interval = setInterval(function() {
perc = perc + step;
UpdateUIReverseProgressBar('myreverseprogress', perc);
UpdateUIProgressBar('myprogress', perc);
if (perc >= 100) clearInterval(interval);
}, 1000)
.reverse-progress-container {
position: relative;
height: 3px;
background-color: #e5e9eb;
background-image: -webkit-linear-gradient(left, #599e47, #306a94, #492860, #c03d32, #d17337);
background-image: linear-gradient(to right, #599e47, #306a94, #492860, #c03d32, #d17337);
background-size: 100% 3px;
}
.anim-shrink-x {
-webkit-animation-name: shrink-x;
animation-name: shrink-x;
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-delay: 0.5s;
animation-delay: 0.5s;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css.map" />
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap-theme.min.css" />
<div class="panel panel-default">
<div class="panel-body">
<div class="reverse-progress-container" >
<div style="width: 0%; min-width: 0%; animation-duration: 5s;" class="reverse-progress-bar anim-shrink-x"></div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-body">
<div class="progress" id="myreverseprogress"></div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-body">
<div class="progress" id="myprogress"></div>
</div>
</div>