
引用
<link rel="stylesheet" type="text/css" href="./index.css"> <div id="progress"></div> <script type="text/javascript" src="./index.js"></script> <script type="text/javascript"> var cp1 = new ColorProgress('progress', 'danger', 84) </script>
参数
name | type | comment |
el | String | 初始节点 |
type | enum['exceed', 'success', 'warning', 'danger'] | 进度条类型(影响颜色) |
percentage | Integer | 当前进度 |
max | Integer | 最大进度 |
height | Integer | 进度条高度 |
方法
name | comment |
setPercentage(percentage) | 设置进度 |
setType(type) | 设置进度条类型(颜色) |
源码展示
index.js
创建进度条各部分元素节点,并赋值
/** * Created by lonelydawn on 2017-11-20. * ColorProgress - Pretty easy progressar * @params * el: String * type: enum['exceed', 'success', 'warning', 'danger'] * percentage: Integer * max: Integer * height: Integer * * @methods * setPercentage(percentage: Integer) * setType(type: enum['exceed', 'success', 'warning', 'danger']) */ var ColorProgress = function (el, type, percentage, max, height) { var types = ['exceed', 'success', 'warning', 'danger'] type = types.indexOf(type) > -1 ? type : types[0] max = (max && max >= 100) ? max : 100 percentage = (percentage && percentage <= max) ? percentage : 0 height = height || 12 var setPercentage = function (percentage) { inner.style.width = percentage * 100 / max + '%' label.innerHTML = percentage + '%' label.className = 'progress-label' + (percentage === 0 ? ' is-danger' : '') } var setType = function (type) { inner.className = 'progress-inner ' + { exceed: 'status-exceed', success: 'status-success', warning: 'status-warning', danger: 'status-danger' }[type] } var wrapper = document.getElementById(el) if (wrapper) { // 清空容器 var childs = wrapper.childNodes for(var i = childs.length - 1; i >= 0; i--) { wrapper.removeChild(childs[i]); } // 添加节点并设置样式 var track = document.createElement('div') track.className = 'progress-track' track.style.height = height + 'px' var inner = document.createElement('div') var label = document.createElement('div') var bg = document.createElement('div') bg.className = 'progress-bg' bg.style.width = 10000 / max + '%' setPercentage(percentage) setType(type) track.appendChild(inner) track.appendChild(label) track.appendChild(bg) wrapper.appendChild(track) } return { setPercentage: setPercentage, setType: setType } }
index.css
进度条动效通过css过渡效果实现
.progress-track { width: 100%; position: relative; } .progress-bg { top: 0; left: 0; height: 100%; z-index: 1049; position: absolute; background-color: #ebeef5; border-top-right-radius: 100px; border-bottom-right-radius: 100px; } .progress-inner { height: 100%; display: inline-block; vertical-align: top; position: relative; z-index: 1050; border-top-right-radius: 100px; border-bottom-right-radius: 100px; -webkit-transition: all 500ms; -moz-transition: all 500ms; -ms-transition: all 500ms; -o-transition: all 500ms; transition: all 500ms; } .progress-label { height: 100%; line-height: 100%; position: relative; z-index: 1050; display: inline-block; vertical-align: top; font-size: 12px; } .status-exceed { background: rgb(252,248,177); /* Old browsers */ background: -moz-linear-gradient(top, rgba(252,248,177,1) 0%, rgba(229,218,95,1) 100%); /* FF3.6-15 */ background: -webkit-linear-gradient(top, rgba(252,248,177,1) 0%,rgba(229,218,95,1) 100%); /* Chrome10-25,Safari5.1-6 */ background: linear-gradient(to bottom, rgba(252,248,177,1) 0%,rgba(229,218,95,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fcf8b1', endColorstr='#e5da5f',GradientType=0 ); /* IE6-9 */ } .status-success { background: rgb(215,238,233); /* Old browsers */ background: -moz-linear-gradient(top, rgba(215,238,233,1) 0%, rgba(111,192,172,1) 100%); /* FF3.6-15 */ background: -webkit-linear-gradient(top, rgba(215,238,233,1) 0%,rgba(111,192,172,1) 100%); /* Chrome10-25,Safari5.1-6 */ background: linear-gradient(to bottom, rgba(215,238,233,1) 0%,rgba(111,192,172,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#d7eee9', endColorstr='#6fc0ac',GradientType=0 ); /* IE6-9 */ } .status-warning { background: rgb(248,201,153); /* Old browsers */ background: -moz-linear-gradient(top, rgba(248,201,153,1) 0%, rgba(222,142,82,1) 100%); /* FF3.6-15 */ background: -webkit-linear-gradient(top, rgba(248,201,153,1) 0%,rgba(222,142,82,1) 100%); /* Chrome10-25,Safari5.1-6 */ background: linear-gradient(to bottom, rgba(248,201,153,1) 0%,rgba(222,142,82,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8c999', endColorstr='#de8e52',GradientType=0 ); /* IE6-9 */ } .status-danger { background: rgb(250,161,154); /* Old browsers */ background: -moz-linear-gradient(top, rgba(250,161,154,1) 0%, rgba(202,68,61,1) 100%); /* FF3.6-15 */ background: -webkit-linear-gradient(top, rgba(250,161,154,1) 0%,rgba(202,68,61,1) 100%); /* Chrome10-25,Safari5.1-6 */ background: linear-gradient(to bottom, rgba(250,161,154,1) 0%,rgba(202,68,61,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#faa19a', endColorstr='#ca443d',GradientType=0 ); /* IE6-9 */ } .is-danger { color: #f00; }
源码下载
GitHub