`

html5 loading 效果来了

阅读更多
Html5在移动设备上表现抢眼,几乎所有稍微高端一点的设备(乔帮主的iPad,iPhone和Andriod的平板手机等)的浏览器都支持Html5。而且据我个人的测试这些支持html5的设备对canvas标签的支持是相当的好。


大家都知道web2.0以来大量的使用ajax,loading的小图标也有很多很多种,甚至还有专门提供loading图片的网站。所以我就想能不能让html5解决一下这个以前用gif文件解决的问题。没想到非常的简单,只用了不到一小时的时间就搞定了两个,而且这样做出来的loading图标是可定制的,既可以定制颜色,也可以定制大小等属性。

看看效果吧:
http://f200-8.bbs.hexun.com/e/111219/loading.htm
http://f200-8.bbs.hexun.com/e/111219/loading2.htm

第一个带着小尾巴转动的loading图标画图的思路是,首先画一个圆,然后在圆的边上按顺序画大小逐渐减小的小圆点,在每次刷新画布时改变这一系列的小圆点在大圆边上的位置。
<!doctype html>
<html>
  <head>
    <meta http-equiv="content-type" content="GBK"/>
    <title>loading</title>
    <script type="text/javascript">
    /*
    html5 loading 控件
    作者:玉开 博客:http://www.cnblogs.com/yukaizhao/
    发布或使用此控件,请保留作者声明
    */
    function loading(canvas,options){
      this.canvas = canvas;
      if(options){
        this.radius = options.radius||12;
        this.circleLineWidth = options.circleLineWidth||4;
        this.circleColor = options.circleColor||'lightgray';
        this.dotColor = options.dotColor||'gray';
      }else{      
        this.radius = 12;
        this.circelLineWidth = 4;
        this.circleColor = 'lightgray';
        this.dotColor = 'gray';
      }
    }
    loading.prototype = {
      show:function (){
        var canvas = this.canvas;
        if(!canvas.getContext)return;
        if(canvas.__loading)return;
        canvas.__loading = this;
        var ctx = canvas.getContext('2d');
        var radius = this.radius;      
        var rotators = [{angle:0,radius:1.5},{angle:3/radius,radius:2},{angle:7/radius,radius:2.5},{angle:12/radius,radius:3}];      
        var me = this;
        canvas.loadingInterval = setInterval(function(){
          ctx.clearRect(0,0,canvas.width,canvas.height);         
          var lineWidth = me.circleLineWidth;
          var center = {x:canvas.width/2 - radius,y:canvas.height/2-radius};          
          ctx.beginPath();
          ctx.lineWidth = lineWidth;
          ctx.strokeStyle = me.circleColor;
          ctx.arc(center.x,center.y,radius,0,Math.PI*2);
          ctx.closePath();
          ctx.stroke();
          for(var i=0;i<rotators.length;i++){        
            var rotatorAngle = rotators[i].currentAngle||rotators[i].angle;            
            //在圆圈上面画小圆
            var rotatorCenter = {x:center.x-(radius)*Math.cos(rotatorAngle) ,y:center.y-(radius)*Math.sin(rotatorAngle)};            
            var rotatorRadius = rotators[i].radius;
            ctx.beginPath();
            ctx.fillStyle = me.dotColor;
            ctx.arc(rotatorCenter.x,rotatorCenter.y,rotatorRadius,0,Math.PI*2);
            ctx.closePath();
            ctx.fill();
            rotators[i].currentAngle = rotatorAngle+4/radius;
          }
        },50);
      },
      hide:function(){
        var canvas = this.canvas;
        canvas.__loading = false;
        if(canvas.loadingInterval){
          window.clearInterval(canvas.loadingInterval);
        }
        var ctx = canvas.getContext('2d');
        if(ctx)ctx.clearRect(0,0,canvas.width,canvas.height);
      }
    };
     
    </script>
  </head>
  <body>
    <canvas id="canvas" width="300" height="100" style="border:1px solid #69c"></canvas>
    <p>
    <input type="button" onclick="loadingObj.hide()" value="HideLoading"/>
    <input type="button" onclick="loadingObj.show()" value="showLoading"/>
    </p>
    <script>
    var loadingObj = new loading(document.getElementById('canvas'),{radius:8,circleLineWidth:3});
    loadingObj.show();
    </script>
  </body>
</html>

第二个较为简单,在一个圆环上有一个相同圆心相同半径的圆弧在不停的转动。画图的步骤是首先画一个圆环,然后画一个不同颜色相同圆心半径的圆弧,在每次刷新画布时改变圆弧的起始角度。
<!doctype html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charset=gbk"/>
  <title>loading</title>
  <script>
   /*
    html5 loading 控件
    作者:玉开 博客:http://www.cnblogs.com/yukaizhao/
    发布或使用此控件,请保留作者声明
    */
    function loading(canvas,options){
      this.canvas = canvas;
      if(options){
        this.radius = options.radius||12;
        this.circleLineWidth = options.circleLineWidth||4;
        this.circleColor = options.circleColor||'lightgray';
        this.moveArcColor = options.moveArcColor||'gray';
      }else{      
        this.radius = 12;
        this.circelLineWidth = 4;
        this.circleColor = 'lightgray';
        this.moveArcColor = 'gray';
      }
    }
    loading.prototype = {
      show:function (){
        var canvas = this.canvas;
        if(!canvas.getContext)return;
        if(canvas.__loading)return;
        canvas.__loading = this;
        var ctx = canvas.getContext('2d');
        var radius = this.radius;      
        var me = this;
        var rotatorAngle = Math.PI*1.5;
        var step = Math.PI/6;
        canvas.loadingInterval = setInterval(function(){
          ctx.clearRect(0,0,canvas.width,canvas.height);         
          var lineWidth = me.circleLineWidth;
          var center = {x:canvas.width/2 - radius,y:canvas.height/2-radius};          
          ctx.beginPath();
          ctx.lineWidth = lineWidth;
          ctx.strokeStyle = me.circleColor;
          ctx.arc(center.x,center.y,radius,0,Math.PI*2);
          ctx.closePath();
          ctx.stroke();
          //在圆圈上面画小圆
          ctx.beginPath();
          ctx.strokeStyle = me.moveArcColor;
          ctx.arc(center.x,center.y,radius,rotatorAngle,rotatorAngle+Math.PI*.45);
          ctx.stroke();
          rotatorAngle+=step;
          
        },50);
      },
      hide:function(){
        var canvas = this.canvas;
        canvas.__loading = false;
        if(canvas.loadingInterval){
          window.clearInterval(canvas.loadingInterval);
        }
        var ctx = canvas.getContext('2d');
        if(ctx)ctx.clearRect(0,0,canvas.width,canvas.height);
      }
    };
     
    </script>
  </head>
  <body>
    <canvas id="canvas" width="300" height="100" style="border:1px solid #69c">您的浏览器不支持html5哟</canvas>
    <p>
    <input type="button" onclick="loadingObj.hide()" value="HideLoading"/>
    <input type="button" onclick="loadingObj.show()" value="showLoading"/>
    </p>
    <script>
    var loadingObj = new loading(document.getElementById('canvas'),{radius:8,circleLineWidth:3});
    loadingObj.show();
    </script>
  </body>
</html>


目前从移动设备对Html5的支持来看,html5大有可为。
天下大势,合久必分,分久必和。PC开发时web应用在很大程度上统一了客户端程序;而现在移动开发使用不同的系统不同的语言,将来大多数应用必然会统一到一种语言。这种语言必然是html5+javascript.

分享到:
评论

相关推荐

    13种创意html5+css3加载动画loading效果进度条

    这个html5 loading效果中共有13种不同风格效果的加载动画loading效果进度条,支持ajax loading。第一款是youtube风格loading效果,完成这个demo用到了html5 svg和css3技术。

    酷炫 html5页面加载 loading动画效果 demo 基于原生无第三方依赖

    本示例"酷炫html5页面加载loading动画效果demo"是基于原生JavaScript和CSS实现的,无需任何第三方库,简化了开发流程,提高了性能。 首先,我们来详细了解一下如何实现这种加载动画。在HTML结构中,我们需要在`...

    html5圆球交替动画的Loading效果.rar

    html5圆球动画Loading加载特效,在国外网站经常看到的一种效果,点击“Start”后,两个圆形左右交替交叉显示,左右循环交叉变化,如果缩小一定倍数,可作为Loading加载时的等待动画,本动画效果基于HTML5 jquery实现...

    基于HTML5的CSS loading效果

    本篇文章将深入探讨如何利用HTML5和CSS3创建炫酷的loading效果。 一、HTML5基础 HTML5是超文本标记语言的最新版本,引入了许多新特性,如语义化标签(如、、等)、离线存储(离线Web应用程序)、媒体元素(、)以及...

    HTML5LOADING_HTML5_CSS3源码_

    在“HTML5LOADING_HTML5_CSS3源码”这个项目中,重点是利用HTML5和CSS3来创建一种圆形旋转的加载动画效果。这种效果在网页加载时非常常见,能够提供良好的用户体验,让用户在等待内容加载时有一个视觉反馈,而不是...

    H5多种加载效果loading,H5页面加载中动画

    在现代Web开发中,用户体验是至关重要的,而H5(HTML5)作为最新一代的超文本标记语言,为创建互动性和动态性更强的网页提供了强大的工具。本话题将深入探讨"H5多种加载效果loading",即H5页面在加载过程中使用的...

    各种样式loading效果

    "各种样式loading效果"的主题涉及到了HTML5和CSS3技术,这两种技术都是现代网页开发的核心部分。HTML5提供了更强大的语义化标签和媒体处理能力,而CSS3则为网页设计带来了丰富的动画效果和样式控制。 1. **HTML5**:...

    13款html5 svg页面loading加载动画效果

    在本案例中,"13款html5 svg页面loading加载动画效果"是一个集合,展示了如何利用HTML5和SVG技术来制作吸引人的页面加载动画。 1. SVG的优势:SVG图形是矢量的,这意味着它们可以无限缩放而不损失清晰度。这在移动...

    swing 鼠标事件 loading效果

    在Java的Swing库中,鼠标事件(Mouse Events)是用户与GUI组件交互的重要部分,而loading效果则通常指的是在处理耗时操作时显示的一种视觉指示,以告知用户程序正在运行且尚未完成。本篇文章将深入探讨如何在Swing...

    vuerouter切换时loading效果实现

    本文将详细探讨如何在Vue Router中实现路由切换时的loading效果。 首先,我们需要确保已经安装了Vue Router,并在项目中配置好基本的路由。如果尚未安装,可以使用npm或yarn进行安装: ```bash npm install vue-...

    页面加载的Loading效果

    在网页设计中,用户体验是至关重要的一个环节,而页面加载的Loading效果就是提升用户体验的一种方式。Loading效果,也称为加载动画或预加载器,通常在网页内容还未完全加载完成时显示,以告知用户页面正在努力加载,...

    H5非常炫酷的加载特效loading

    "H5非常炫酷的加载特效loading"这个主题主要涉及如何使用HTML5、CSS3以及可能的JavaScript技术来创建吸引人的页面加载动画。 一、HTML5基础 HTML5是超文本标记语言的第五个版本,提供了许多新特性,如语义化标签...

    HTML5 Loading动画加载 五彩的圆环Loading

    如果你感兴趣,可以查看这款HTML5 Loading动画的在线演示,效果还不错。 下面分享一下这款HTML5 Loading动画的实现过程,主要是HTML代码和CSS3代码,以及初始化的JS代码。 首先是HTML代码,只定义一个Loading容器...

    13种svg html5 loading页面加载动画弹出层效果代码

    "13种SVG HTML5 Loading页面加载动画弹出层效果代码"集合提供了丰富多样的加载动画,旨在提升用户在等待页面完全加载时的视觉体验,增强网站的专业感与吸引力。下面将详细解析这些知识点。 1. SVG (Scalable Vector...

    页面loading效果之一

    在网页设计中,加载效果(通常称为“页面loading效果”)是用户体验的重要组成部分。当用户访问一个网站或应用时,加载过程可能需要时间,而一个精心设计的loading动画可以缓解用户的等待焦虑,同时提升品牌形象。本...

    HTML5开发12种加载loading动画模板源码

    HTML5开发12种加载loading动画模板源码,代码上手简单,代码独立,可以直接使用。也可直接预览效果。别再犹豫了,一起加入这个源码的世界吧!博主提供各种支持,欢迎合作共赢。 效果演示地址: ...

    loading效果

    5. **绝对定位(Absolute Positioning)**:为了使loading效果在页面的特定位置显示,可以将元素设置为绝对定位,并通过`position: absolute;`,`top`,`right`,`bottom`,`left`属性调整其位置。 6. **透明度...

    HTML5发光Loading动画.zip

    HTML5发光Loading动画是一款基于HTML5 Canvas的发光Loading加载动画特效。Loading旋转图标是在canvas画布上绘制的,整个loading动画是发光3D的视觉效果,HTML5非常强大。

    html5 SVG绘图动画制作页面加载loading绘图动画效果

    在本文中,我们将深入探讨如何利用HTML5和SVG来制作一个页面加载的绘图动画效果。 首先,SVG是一种基于XML的矢量图形格式,它允许在网页上绘制清晰、高质量的图形,即使放大也不会失真。SVG的优势在于其可缩放性,...

    图片预加载 Loading效果。

    - `advanced_eg.html`、`complete.html`、`peronload.html`、`animate.html`、`Default.html`、`simple.html`、`onload.html`:这些是HTML文件,展示了不同的预加载效果和应用场景。 - `imagesLoader.js`:这是...

Global site tag (gtag.js) - Google Analytics