学习 | css3实现进度条加载

摘要:
-webkit边界半径:单位;边界半径:单位;//LoadingMove1slinearininiteboth在最后一帧停止-webkit动画:loadingMove.8linearininite both;动画:loadingMove.8slinearninfinitebth;}}}@-Webkit keyframeloadingMove{0%{background position:00;}100%{backend position:0-.3rem;}}@keyframeloading Move{0%{backline position:0;}100%{background position:0-.3rem;}那么问题是进度条有一个向上的波纹,波纹是如何实现的,波纹是怎样移动的,这两个问题的原理是什么?2如何实现进度条的动态效果波动?背景线性渐变0-25%为颜色,25%-50%为颜色,50%-75%为颜色,75%-100%为颜色。如果不重复,默认情况下会重复。完全填充进度条的长度和宽度。代码如下:背景:线性梯度;波纹是如何移动的?它使用css中的动画使进度条的背景从上到下移动。那么它如何从上到下移动呢?

进度条加载是页面加载时的一种交互效果,这样做的目的是提高用户体验。

进度条的的实现分为3大部分:1、页面布局,2、进度条动效,3、何时进度条增加。

文件目录

学习 | css3实现进度条加载第1张

加载文件顺序
<link rel="stylesheet/less" href="http://t.zoukankan.com/index.less">
<script src="http://t.zoukankan.com/zepto.min.js"></script>
<script src="http://t.zoukankan.com/less.js"></script>
<script src="http://t.zoukankan.com/rem.js"></script>

index.less是样式文件

zepto是引入的库

less.js是编译less的

rem.js是移动端屏幕自适应

实现效果

学习 | css3实现进度条加载第2张

1、页面布局

页面布局采用position布局,进度条居中,css采用less,布局风格为移动端,采用rem单位。

html
<section class="loadingBox">
        <div class="progress">
            <div class="run"></div>
        </div>
</section>
less
html,body{
    height: 100%;
}
.loadingBox{
    background: #000000;
    height: 100%;
    overflow: hidden;
    position: relative;
    display: none;
    .progress{
        @w:4.6;
        @h:.3;
        position: absolute;
        width: unit(@w,rem);
        height: unit(@h,rem);
        top: 50%;
        left: 50%;
        margin-left: unit(-@w/2,rem);
        margin-top: unit((-@h/2)+1, rem);
        background: #fff;
        border-radius: unit(@h/2,rem);
        .run{
            position: absolute;
            top: 0;
            left: 0;
            width: 0;
            height: unit(@h, rem);
            // 起始颜色和终点颜色一致就没渐变效果
            transition: .3s;
            background: -webkit-linear-gradient(left bottom,#5cd85c 0%,#5cd85c 25%,#74c274 25%,#74c274 50%,#5cd85c 50%,#5cd85c 75%,#74c274 75%,#74c274 100%);
            background: linear-gradient(left bottom,#5cd85c 0%,#5cd85c 25%,#74c274 25%,#74c274 50%,#5cd85c 50%,#5cd85c 75%,#74c274 75%,#74c274 100%);
            background-size:unit(@h, rem) unit(@h, rem);
            // 从上往下动实现动的效果。
            -webkit-border-radius: unit(@h/2, rem);
            border-radius: unit(@h/2, rem);
            // loadingMove 1s linear infinite both停在最后一帧
            -webkit-animation: loadingMove .8s linear  infinite both;
            animation: loadingMove .8s linear  infinite both;
        }
    }
}
@-webkit-keyframes loadingMove{
    0%{
        background-position: 0 0;
    }
    100%{
        background-position: 0 -.3rem;
    }
}
@keyframes loadingMove{
    0%{
        background-position: 0 0;
    }
    100%{
        background-position: 0 -.3rem;
    }
}

 那么问题来了进度条有一个向上走的波纹,波纹是如何实现的,波纹是如何动的,这两个问题的原理是什么

2、进度条动效
波纹是如何实现的

波纹的实现用到的background的 linear-gradient 0-25%是一个颜色,25%-50%是一个颜色,50%-75%是一个颜色,75%-100%是一个颜色,让其不repeat 默认就是repeat的,完全填充进度条长度与宽度,代码如下

background: linear-gradient(left bottom,#5cd85c 0%,#5cd85c 25%,#74c274 25%,#74c274 50%,#5cd85c 50%,#5cd85c 75%,#74c274 75%,#74c274 100%);
波纹是如何动起来的

动起来用到了css中的animation,让进度条的背景从上往下走,就能实现动的效果,那么如何实现从上往下走呢?答案就是用css3的animation的keyframes,0%是让其position为0 0  100%的时候让其position 0 -.3rem 。-.3rem就是进度条的高度,代码如下,loadingMove是桢函数,.8s是持续时间0.8s,linear是线性变化,infinite是无限重复,both是每一循环停在最后一帧。

animation: loadingMove .8s linear  infinite both;
loadingMove
@keyframes loadingMove{
    0%{
        background-position: 0 0;
    }
    100%{
        background-position: 0 -.3rem;
    }
}
3、何时进度条增加

众所周知页面上耗费最多的时间是图片,那么可不可以每加载一张图片,就让count加1,那么加载n张再除以总的图片数就是加载进度,加载进度。代码中的逻辑就是,遍历每张图片,等待每张图片加载完毕,count加1,同时更改进度条宽度,达到一个实时加载的效果。

let loadingRender = (function(){
    let $loadingBox = $(".loadingBox"),
        $run = $loadingBox.find(".run");
    // 计算图片加载进度
    let imgList =["./1.png","./2.png","./3.png","./4.png"];
    let total = imgList.length,
        cur = 0;
    let computed = function(){
        imgList.forEach(function(item){
            let tempImg =  new Image();
            tempImg.src = item;
            tempImg.onload = function(){
                cur++;
                runFn();
                tempImg = null;
            }
        })
    }
    let runFn = function(){
        $run.css("width",(cur/total)*100+"%");
        if (cur>=total) {
            // 进入的下一个区域的时间节点
            let delay = setTimeout(function(){
                clearTimeout(delay);
            },1500)
        }
    }
    return {
        init:function(){
            $loadingBox.css("display","block");
            computed();
        }
    }
})();
loadingRender.init();

其中runFn是增加宽度的函数,用了了setTimeout,目的是延缓一会加载,让加载有点节奏,同理,css中transition: .3s;也是为了让加载有节奏。

免责声明:文章转载自《学习 | css3实现进度条加载》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Spark学习进度11-Spark Streaming&amp;amp;Structured Streamingvue 内联样式style中的background下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

突袭HTML5之Javascript API扩展2 地理信息服务

      现在比较火的一类服务叫做基于位置的服务(location-based service, LBS),这一类服务就是企业利用某点(例如用户所在的位置)坐标附近的区域提供服务的信息,比如常见的地图相关服务。在HTML5中,加入了新的地理位置API用来确定和分享地理位置。 隐私申明      在与远程Web服务器共享物理位置时,隐私是一个需要关注的问题...

CSS兼容IE6,IE7,FF的技巧

一、CSS HACK以下两种方法几乎能解决现今所有HACK.翻阅很多资料,已测试可以使用。 1, !important 随着IE7对!important的支持, !important 方法现在只针对IE6的HACK.(注意写法.记得该声明位置需要提前.) PLAIN TEXTCSS: #wrapper{ 100px!important; /* IE7+FF...

Java+Selenium元素定位的八种方法(二)

Selenium自动化一般需要几个步骤操作:定位元素,获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动化出测试报告。 一、WebDriver API提供了8种元素定位的方法 1、id 2、name 3、class name 4、link text 5、Xpath 6、Css selector 7、tag name 8、part...

Bootstrap 前端UI框架

Bootstrap 有哪些优越性? 1.简单灵活的用于搭建WEB页面的HTML,CSS, JavaScript的工具集 2.基于html5, css3, 具有良好特性,友好的学习曲线,卓越的兼容性,12列的响应式栅格结构、丰富的组件、JavaScript插件、排版、表单控件,还有 基于WEB的定制工具。 3.有完整的类库,基于Less的css管理。 我们在...

WPFProgressBarAndSlider随位置显示Value

先来一发图,有图有真相。 核心代码如下 ProgressBar添加一个textBlock 绑定Value并且位置绑定进度条的实际宽度 <Canvas Margin="0 0 0 5"> <TextBlock x:Name="tb" TextWrapping="N...

【ECharts】01 快速上手

简单介绍: ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求。 ECharts 遵循 Apache-2.0 开源协议,免费商用。 ECharts 兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等)及兼容多种设备,可随时随地任性展示。 快速入门: <!DOCT...