(转)多种方法实现Loading(加载)动画效果

当我们ajax提交一个按钮的时候,给那个按钮来个Loading效果会高端很多,体验也会上升个层次。

既能让用户知道正在提交中,也能防止二次提交,好处多多呢。

上面的这个圈圈是会滚动的。简单点的话,可以直接用GIF动态图片实现。不过现在已经有了CSS3和HTML5了,多了好几种高大上的实现方式。

这里先来介绍几个动画的在线demo,第一个是HTML5 Boilerplate中的Effeckt.css,第二个是Animate.css

下面一一列出,如果要结合按钮的话,可自行修改下CSS或JS等文件。当要嵌入到实际项目中的时候,可能会改动一些地方,以实际情况为准了。

一、PNG图片+CSS3动画

<div class="pull-up pull-up-loading">
  <span class="pull-icon"></span>正在载入中....
</div>
.pull-up-loading .pull-icon {
  background-position: 0 100%;
  /*chrome*/
  -webkit-transform: rotate(0deg) translateZ(0);
  -webkit-transition-duration: 0ms;
  -webkit-animation-name: loading;
  -webkit-animation-duration: 2s;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-timing-function: linear;
}
/*chrome*/

@-webkit-keyframes loading {
  from {
    -webkit-transform: rotate(0deg) translateZ(0);
  }
  to {
    -webkit-transform: rotate(360deg) translateZ(0);
  }
}

点击查看在线实例:

  1. 只有当加上pull-up-loading,才会出现滚动
  2. 添加一个动画keyframes,叫loading,是在做transform: rotate操作,下面的CSS省略了firefox中的动画代码,为了看的清晰点,实例中有完整的firefox代码

这里有个在线生成Loading的纯CSS代码,cssload.net。样式选择还是挺多的,就是对于老一点的浏览器的兼容性方面不是很强比如IE6、IE7、IE8等。

再来几个不同的款式:点击可查看源码

            

二、spin.js

  这是一个脚本文件。不依赖任何库,可以独立执行,挺好用的,我在实际项目中使用过这个插件,当时我把所有的ajax提交都调用了这个插件,结合jQuery库,做到Loading效果和防止二次提交。而且这个库的浏览器兼容性很好,甚至兼容古老的IE6,而且不用引入额外的CSS或图,可配置的参数也很多。

  我粗略的看过代码,标准的浏览器就用脚本写CSS3来做动画,对于古老点的浏览器就用setTimeout来模拟动画。里面还会初始化一个VML标签,这个是针对IE的。

  看代码的时候看到了个很有趣的符号“~~”,后面一查,说是将变量转换成数字的一个方法,挺高级的。

  这个插件还提供了一个在线配置的小网站,点击查看

showAjaxLoading: function(btn) {
    if (btn == null || btn == undefined || $(btn).length == 0) return;
    var left = $(btn).offset().left;
    var top = $(btn).offset().top;
    var width = $(btn).outerWidth();
    var height = $(btn).height();
    var opts = {
      lines: 9, // The number of lines to draw
      length: 0, // The length of each line
      width: 10, // The line thickness
      radius: 15, // The radius of the inner circle
      corners: 1, // Corner roundness (0..1)
      rotate: 0, // The rotation offset
      direction: 1, // 1: clockwise, -1: counterclockwise
      color: ‘#000‘, // #rgb or #rrggbb or array of colors
      speed: 1, // Rounds per second
      trail: 81, // Afterglow percentage
      shadow: false, // Whether to render a shadow
      hwaccel: false, // Whether to use hardware acceleration
      className: ‘spinner‘, // The CSS class to assign to the spinner
      zIndex: 2e9, // The z-index (defaults to 2000000000)
      top: ‘50%‘, // Top position relative to parent
      left: ‘50%‘ // Left position relative to parent
    };
    $(‘#ajax_spin‘).remove();
    $(‘body‘).append(‘<div id="ajax_spin" style="position:absolute;background:#FFF;filter:alpha(opacity=30);opacity:0.3"><div id="ajax_spin_inner" style="position:relative;height:50px;"></div></div>‘);
    $(‘#ajax_spin‘).css({
      ‘top‘: top,
      ‘left‘: left,
      ‘width‘: width,
      ‘height‘: height
    });
    var target = document.getElementById(‘ajax_spin_inner‘);
    var spinner = new Spinner(opts).spin(target);
    //return spinner;
  },
  stopAjaxLoading: function() {
    $(‘#ajax_spin‘).remove();
    //new Spinner(opts).spin(target)
    //spinner.stop();
  }

上面那段代码是我在一个实际项目中写的,就是显示和移除Loading效果,并且在按钮上面覆盖这层效果防止二次提交。

  1. btn就是按钮jQuery对象
  2. left,top找到按钮的左右位移,width和height获取按钮的宽和高,width用的是outerWidth
  3. $(‘body‘)加入一个能够覆盖按钮的层
  4. 初始化一个Spinner对象,并加入到那个覆盖层中

三、Ladda

可以单独使用,或者结合上面的插件spin一起结合使用。demo页面的效果挺高大上的,但用到实例可能还是需要些修改的。

点击查看主页

下图随便选了几个例子,可以实现不同尺寸的按钮大小,不同方向的滚动,将按钮变成原型,或带进度条的按钮。挺多样性的。

点击查看demo页面

HTML代码如下:

<button class="ladda-button" data-style="expand-right"><span class="ladda-label">Submit</span></button>
// Automatically trigger the loading animation on click
Ladda.bind( ‘input[type=submit]‘ );

// Same as the above but automatically stops after two seconds
Ladda.bind( ‘input[type=submit]‘, { timeout: 2000 } );

结构看上去不是很复杂,JS脚本的引入也不是很难。不过在引入实际项目中肯定还是需要做些修改的。

相比spin插件,这插件要引入的文件就多了,不但要引入JS还要引入CSS。

  点击查看codepen上复制的代码

  我本来想在codepen页面中,把demo页面重现一次,在把github里面的dist/CSS/ladda.min.css文件复制到codepen中,JS中的ladda.js和spin.js也复制过来。发生了点意外,那个滚动条老是会往下面一点。CSS都是全部复制的,很奇怪。后面发现是CSS的问题,真的是实际应用一下才会看到具体情况。

  

  

  demo页面的CSS:

.ladda-button .ladda-spinner {
  position: absolute;
  z-index: 2;
  display: inline-block;
  width: 32px;
  height: 32px;
  top: 50%;
  margin-top: -17px;
  opacity: 0;
  pointer-events: none
}

  Github上的CSS:区别就是margin-top的不一样。

.ladda-button .ladda-spinner {
  position: absolute;
  z-index: 2;
  display: inline-block;
  width: 32px;
  height: 32px;
  top: 50%;
  margin-top: 0;
  opacity: 0;
  pointer-events: none
}

四、Sonic.js

这个插件是创建一个canvas画布来实现Loaing动画效果。 款式也比较多,如下图所示:点击查看在线demo

在线demo中还展示了用CSS3动画+CSS Sprite技术实现动画

点击查看Github主页

对于较老版本的浏览器,sonic也做了处理,能将canvas转换成GIF图片。点击查看SonicGIF

时间: 2024-11-08 11:31:42

(转)多种方法实现Loading(加载)动画效果的相关文章

10个样式各异的CSS3 Loading加载动画

前几天我在园子里分享过2款很酷的CSS3 Loading加载动画,今天又有10个最新的Loading动画分享给大家,这些动画的样式都不一样,实现起来也并不难,你很容易把它们应用在项目中,先来看看效果图: 你也可以在这里查看DEMO演示. 下面我们来挑选几个比较典型的案例来分析一下代码. 先来看看第一个案例,是条状动画,HTML代码如下: <div id="caseVerte"> <div id="case1"></div> <

prefix css3漏斗Loading加载动画

<!DOCTYPE html><html><head><meta charset="gb2312"><title>css3漏斗Loading加载动画</title><style>* { margin: 0px; padding: 0px; border: 0px;}html, body { min-height: 100%;}body { background: radial-gradient(#eee

HTML5 五彩圆环Loading加载动画实现教程

今天我们要来介绍一款效果很特别的HTML5 Loading加载动画,不像其他的Loading动画,这款Loading动画颜色很丰富,并且在转圈的时候还有淡入淡出的效果.每一个圆环不停地旋转,从而实现加载动画的效果.首先你可以看看效果演示: 你也可以在这里查看在线演示 下面分享一下这款HTML5 Loading动画的实现过程,主要是HTML代码和CSS3代码,以及初始化的JS代码. 首先是HTML代码,只定义一个Loading容器,非常简单. HTML代码: <div id=”hold”><

16款纯CSS3实现的loading加载动画

分享16款纯CSS3实现的loading加载动画.这是一款实用的可替代GIF格式图片的CSS3加载动画代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="grid"> <div class="cell"> <div class="card"> <span class="spinner-loader">Loading…</span

原生JS+ CSS3创建loading加载动画;

效果图: js创建loading show = function(){ //loading dom元素 var Div = document.createElement("div"); Div.setAttribute("class","ui-loading"); var chidDiv = document.createElement("div"); chidDiv.setAttribute("class"

WPF动画 - Loading加载动画

存在问题: 最近接手公司一个比较成熟的产品项目开发(WPF桌面端),其中,在登陆系统加载时,60张图片切换,实现loading闪烁加载,快有密集恐惧症了!!! 代码如下: private void LoadPics() { try { _storyboard = new Storyboard(); for (int i = 0; i < 60; i++) { ObjectAnimationUsingKeyFrames oauf = new ObjectAnimationUsingKeyFrame

分享一组超炫的loading加载动画

<!doctype html><head><meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="css/lanrenzhijia.css"/> <link rel="stylesheet" type="text/css" href="css/l

loading jquery loading 加载的效果,图片的用的是百度图片,方便观看

<%@ page contentType="text/html;charset=UTF-8"%> <%@ include file="/WEB-INF/views/include/taglib.jsp"%> <html> <head> <title>日志管理</title> <c:set var="ctx" value="${pageContext.reque

CSS实现Loading加载动画

优秀的前端工程师总是优先考虑用CSS替代图片: 效果图如上.这个动画并非GIF,而是纯CSS绘制,通过JavaScript定时器更新动画. 基本思路是创建8个圆形div,绝对定位排列成圆圈,然后,依次通过opacity属性更新透明度,就得到一个loading的效果图. 和GIF相比,CSS实现的好处主要在于,对于不同背景颜色,该动画都是完美的,还可以用CSS轻松实现阴影.发光等特效,而GIF虽然支持透明色,但创建时选择的背景色和实际背景色不一致会导致有明显的毛边,而且GIF不易动态更新,需要重新

HTML 页面加载动画效果

浏览器:Chrome <!doctype html> <html> <head> <title>CSS transform: CSS only loading spinners</title> <style> /* general styling */ body { width:450px; margin:18px auto; } /* position the bars and balls correctly (rotate the