当前位置: 首页 > news >正文

超赞的CSS3进度条 可以随进度显示不同颜色

现在的WEB已经不是以前的WEB了,传输更大的数据量,有着更加复杂的计算,这就需要利用进度条来提高用户体验,必要时可以让用户耐心等待,不至于因操作卡了而关掉你的网页。前几天我在网上看到一款和一般进度条不太一样的玩意,它的外观是一条直线,末端有个小球,在进度变化时可以显示数字百分比,更可以用不同颜色来表示当前进度的状态。来看看效果图。

一看进度条外观,还不错吧。

同时,我们也可以在这里看到进度条的DEMO演示

接下来我们来分析一下这款HTML5进度条的实现源码,篇幅有限,我们只挑核心的代码来说。

HTML代码很简单,构造一个进度条容器和数字百分比容器:

<div id="wrapper">
<div class="loader-container">
  <div class="meter">0</div>
  <span class="runner"></span>
</div>
</div>

首先我们来对进度条的容器进行样式渲染,利用CSS3的渐变属性来实现不同进度变换颜色的效果:

.loader-container {
  height: 6px;
  width: 600px;
  position: absolute;
  top: 50%;
  left: 50%;
  margin-top: -3px;
  margin-left: -300px;
  background-color: transparent;
  background-image: -webkit-linear-gradient(left, #5bd8ff, #ff0000);
  background-image: -moz-linear-gradient(left, #5bd8ff, #ff0000);
  background-image: -o-linear-gradient(left, #5bd8ff, #ff0000);
  background-image: -ms-linear-gradient(left, #5bd8ff, #ff0000);
  background-image: linear-gradient(left, #5bd8ff, #ff0000);
  box-shadow: inset 0 -2px 2px rgba(0, 0, 0, 0.4);
  border-radius: 3px 0 0 3px;
}
.loader-container:after {
  content: "";
  display: block;
  position: absolute;
  right: 0;
  top: 50%;
  width: 1em;
  height: 1em;
  border-radius: 50%;
  margin-top: -0.5em;
  margin-right: -1em;
  background-image: -webkit-linear-gradient(top, #000000, #212121);
  background-image: -moz-linear-gradient(top, #000000, #212121);
  background-image: -o-linear-gradient(top, #000000, #212121);
  background-image: -ms-linear-gradient(top, #000000, #212121);
  background-image: linear-gradient(top, #000000, #212121);
}

接下来是末端小圆球的样式:

.loader-container.done:after {
  background: Red;
}
.run .runner {
  content: "";
  position: absolute;
  right: 0;
  height: 100%;
  width: 0%;
  background-color: transparent;
  background-image: -webkit-linear-gradient(top, #000000, #212121);
  background-image: -moz-linear-gradient(top, #000000, #212121);
  background-image: -o-linear-gradient(top, #000000, #212121);
  background-image: -ms-linear-gradient(top, #000000, #212121);
  background-image: linear-gradient(top, #000000, #212121);
  animation: loader 10s linear;
}

这里也是利用的CSS3的渐变属性。

然后是数字百分比的样式属性,这里随着进度变化,数字百分比的颜色也会发生变化。、

.meter {
  position: absolute;
  top: 0;
  right: 0;
  font-size: 2em;
  margin-top: .3em;
  color: #ff0000;
  animation: meter 10s linear;
  text-shadow: 0 -1px 0 #333333;
}
.meter:after {
  content: "%";
}

最后,我们再来看看JS代码,其实js要完成的工作非常简单,只需要将CSS3渲染好的进度条动起来就好,看代码:

var Loader = function () {    
  var loader = document.querySelector('.loader-container'),
      meter = document.querySelector('.meter'),
      k, i = 1,
      counter = function () {
        if (i <= 100) {   
          meter.innerHTML = i.toString();
          i++;
        } else {
          window.clearInterval(k);
        }
      };

    return {
      init: function (options) {
      options = options || {};
      var time = options.time ? options.time : 0,
            interval = time/100;
      
        loader.classList.add('run');
      k = window.setInterval(counter, interval); 
      setTimeout(function () {        
          loader.classList.add('done');
      }, time);
    },
  }
}();

Loader.init({
      // If you have changed the @time in LESS, update this number to the corresponding value. Measured in miliseconds.
      time: 10000
});

初次写博客,可以代码分析的不是很好,有什么问题可以留言指正,不过,这款进度条个人真的很喜欢,老外的创意真是无限啊。

相关文章:

  • 升级Ubuntu 12.04下的gcc到4.7
  • ASP.NET MVC 5 - 查询Details和Delete方法
  • checkboxlist 横向显示,自动换行
  • 本季度学习内容
  • 两个线程交替打印字符串
  • rpm包制作
  • 指针数组和指向指针的指针
  • 破碎吧,
  • Permission denied You (root) are not allowed to access to (crontab) because of pam configuration.
  • PAT 1064
  • 最大堆最小堆总结
  • Windows Server 2012 R2工作文件夹⑨:自动发现设置
  • linux下ntp时间服务器搭建
  • 5.10-17项目经理考试圆梦提分现场面授行动
  • 长文章手动分页显示代码
  • 收藏网友的 源程序下载网
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 2017年终总结、随想
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Facebook AccountKit 接入的坑点
  • flask接收请求并推入栈
  • interface和setter,getter
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JavaScript的使用你知道几种?(上)
  • Js基础知识(一) - 变量
  • JWT究竟是什么呢?
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • orm2 中文文档 3.1 模型属性
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SpringBoot几种定时任务的实现方式
  • STAR法则
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vuex 学习笔记 01
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 编写符合Python风格的对象
  • 从零开始学习部署
  • 大数据与云计算学习:数据分析(二)
  • 回顾 Swift 多平台移植进度 #2
  • 码农张的Bug人生 - 见面之礼
  • 你真的知道 == 和 equals 的区别吗?
  • 实现菜单下拉伸展折叠效果demo
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 消息队列系列二(IOT中消息队列的应用)
  • 小而合理的前端理论:rscss和rsjs
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 阿里云重庆大学大数据训练营落地分享
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # include “ “ 和 # include < >两者的区别
  • #《AI中文版》V3 第 1 章 概述
  • #QT(串口助手-界面)
  • (5)STL算法之复制
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Oracle)SQL优化技巧(一):分页查询
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统