html5---svg(图表圆饼篇)

哈哈哈,好久没写博客了,最近比较忙,气死了我。今天又是周末,把前两天放前面的有些东西还没写完,下午把他写了。嘿嘿,废话少说,我们来研究研究svg.本来我以前学的是canvas.当时学canvas.感觉那家伙各种牛逼。但是我还是发现那东西比较复杂。写着繁琐。全部都需要用js控制。于是最近去看一了下svg.其实原动力不在于此。对我等渣渣而言学撒都一样。性能,适用性撒的。撒都不用管。好了,我们先来看这个效果。各位看官请移步。http://data.auto.sina.com.cn/car_comment/395。这里有个这个效果;

(别说我给新浪汽车打广告啊。嘿嘿。但是别人确实做得好,我很喜欢新浪)好了,这个是带交互的一个图(暂且叫图).我们考虑一下。图片肯定没有这个效果。canvas估计也不会有。除非有几个画布拼接。这样的话,我还不如不要是吧。

我们今天就做这个东西。

基础的知识点。应该没有什么吧。里面有个标签叫path不会的东西自己查一下。上代码。哈哈哈

(function(){
    function svg(option){
        this.config = this.extend(this.config,option);
        this.create();
        this.handhold();
        this.errtest();
    }

    svg.prototype = {
        constructor:svg,
        /*The basic configuration*/
        config:{
            datatype:"pie",    //The default for the pie chart
            data:[],    //The default data is empty
            color:[],    //The default color is empty
            parentnode:document.createDocumentFragment(),//ocument fragment was inserted into the
            startdeg:0,  //By default, the starting point for the X axis (0 starts)
            r:100,     //The default radius is 100
            centerx:150,    //The default center axis is 150 x
            centery:150,     //The default y center shaft 150 y
            tempdeg : 0,     //deg temp preserve
            target:"",       //The target node
        },
        /*Object extension*/
        extend:function(config,option){
            for(var i in option){
                config[i] = option[i]
            }
            return config;
        },
        create:function(){
          var data = this.config.data, that = this, testnumber=0,check = true;
          var r = this.config.r;
          this.config.centerx = this.config.centery = r;
          /*Parameter detection*/
          for(var i =0 ; i<data.length;i++){
              for(var obj in data[i]){
                  if(typeof data[i][obj]=="number"){
                      testnumber+=data[i][obj]
                  }
                  else{
                      check=false;
                      return;
                  }
              }
          }
          if(!check||testnumber>100){
              return;
          }

          for(var i =0 ; i<data.length;i++){
              that.calculate.call(that,data[i],i)
          }
          document.getElementById(this.config.target).appendChild(this.config.parentnode)
        },
        calculate:function(obj,i){
            var path = document.createElementNS("http://www.w3.org/2000/svg", "path"),deg;
            /*get base paramate and loacl preserve*/
            var startdeg = this.config.startdeg,
                r = this.config.r,
                centerx = this.config.centerx,
                centery = this.config.centery;
            /*get data*/
            for(var nub in obj){
                deg = Number(obj[nub])
            }
            this.config.tempdeg += deg;
            var degend = this.config.tempdeg
            /*The design of path*/
            var startx = r*Math.cos(Math.PI*2*startdeg/100)+centerx;
            var starty = r*Math.sin(Math.PI*2*startdeg/100)+centery;
            var endx = r*Math.cos(Math.PI*2*degend/100)+centerx;
            var endy = r*Math.sin(Math.PI*2*degend/100)+centery;
            path.setAttribute("d","M"+centerx+" "+centery+" L"+startx+" "+starty+" A"+r+" "+r+", 0 0 1 "+endx+" "+endy+" Z ");
            if(!this.config.color[i]){
                this.config.color[i]="#"+parseInt(Math.random()*1000000)
            }
            path.setAttribute(‘fill‘,this.config.color[i]);
            path.style.opacity=0.7;
            this.config.parentnode.appendChild(path);
            this.config.startdeg+=deg;
        },
        handhold:function(){
            var target = document.getElementById(this.config.target)
            target.onmouseover=function(event){
                event = event?event:window.event;
                var target = event.target;
                if(target.nodeName==‘path‘){
                    target.style.opacity=1
                }
            }
            target.onmouseout=function(event){
                event = event?event:window.event;
                var target = event.target;
                if(target.nodeName==‘path‘){
                    target.style.opacity=0.7
                }
            }
        },

        /*test erro function*/
        errtest:function(){
            console.log(this.config)
        },
    }

    function _svg(option){
         new svg(option)
    }
    this._svg = _svg
}).call(this)

调用方法:

_svg({
    data:[{"title":15},{"title":35},{"title":5},{"title":12},{"title":1}],
    target:"pie1",
    color:["#FF6666","#99CC00","#FFFF99","#CCCCCC","#FF9933"],
    r:60   //圆饼半径
    })

html代码:

<svg width=300 height=300 id="pie1">

</svg>

别问我注释那些英文是撒,或者读不通,请移步谷歌翻译。我是中文翻译到英文的,你再翻译回来应该就对了.(英语不好的人,大家就将就点吧)。好了。代码上了,结果是个撒。

请大家狠戳这里http://fengchuantao.github.io/svg/web/pie.html;如果你出现的和我不一样。那直接去github拷代码吧。不想写的童鞋也可以直接拷(我经常这么干,哈哈哈);

一会再把怎么做折线图也发了。

以上全部手写个人原创不加防腐剂。哈哈哈,如果您看到这里了,跪求留个言。哪怕批评一下也好。嘿嘿。

时间: 2024-08-01 09:56:32

html5---svg(图表圆饼篇)的相关文章

9款基于HTML5/SVG/Canvas的折线图表应用

1.华丽的HTML5图表 可展示实时数据 HTML5在图表应用中也十分广泛,比起以前的网页图表,HTML5图表制作更便捷,功能更强大.这款HTML5图表插件外观十分华丽和专业,在数据展示方面也很有优势,图表不仅支持多维数据展示,而且支持区域选择数据功能,利用该HTML5图表可以更加方便地管理你的数据. 在线演示 源码下载 2.HTML5折线图表Aristochart 图表配置简单 利用这些HTML5图表可以很方便的展示各种数据,而且非常直观.今天要向大家分享一款HTML5折线图表插件Aristo

利用CSS-border属性实现圆饼图表

一般圆饼图表的实现如不考虑IE低版本浏览器的话,利用Canvas或是CSS3都能很好的实现,可是我们现在做的项目最低都要兼容到IE8,所以就想到了Border,相信大家用过border画出各种兼容良好的三角行. 像这样的图表如果只平分四等分的话,实现起来还是挺简单的: html代码: <div class="border-i"> <i class="i1"></i> <i class="i2">&l

Html5之高级-8 HTML5 SVG(概述、元素)

一.SVG 概述 SVG 概念 - SVG (Scalable Vector Graphics) 是一种使用XML技术描述二维图形的语言 - SVG 可以使用三种方式描述二维图形 - 矢量图 (vector graphic shapes),例如直线或曲线构成的路径 - 图片(images) - 文本(text) SVG 优势 - SVG 可通过文本编辑器来创建和修改 - SVG 可被搜索.索引.校本化和压缩 - SVG 可在任何的分辨率下被高质量地打印 - SVG 可在图像质量不下降的情况下被放

玩转HTML5移动页面(动效篇)(转载)

作为一名前端,在拿到设计稿时你有两种选择: 1.快速输出静态页面 2.加上高级大气上档次狂拽炫酷屌炸天的动画让页面动起来 作为一个有志向的前端,当然是选2啦!可是需求时间又很短很短,怎么办呢? 这次就来谈谈一些动画设计的小技巧,能在你时间不多又没有动画想法的时候瞬间让页面增色不少. 同时也会谈及移动端H5页面的优化细节与关键点,因此本文章将分为动效篇和优化篇. ====前方高能==== (1)  CSS3时序错开渐显动画 这是一种比较常用的动画,它的优点是节奏感强,做法就是先让每个元素隐藏,然后

12种炫酷html5 svg加载loading动画特效

这是一款使用html5 svg制作的加载loading动画特效插件.该加载loading动画特效共有12种效果,使用img标签直接调用svg文件来生成各种SVG动态图片.关于在页面中使用SVG的方法可以参考这篇文章:<如何在网页中使用SVG>. 所有的现代浏览器都支持SVG(IE8及以下浏览器除外),你可以点的这里查看支持SVG的浏览器. 在线演示:http://www.htmleaf.com/Demo/201501071122.html 下载地址:http://www.htmleaf.com

12种超酷HTML5 SVG和CSS3浮动标签效果

这是一组效果非常炫酷的SVG和CSS3表单浮动标签特效.这组浮动标签特效共12种效果,这些浮动标签效果部分在元素的伪元素上使用CSS transitions和CSS animations完成,一部分则使用SVG来制作变形动画. 在前面已经发表了一篇关于SVG浮动标签的文章:14种CSS3炫酷表单input输入框美化效果.这篇文章中的浮动标签效果是它的一些补充,在原来14种效果的基础上有增加了12种更加炫酷的效果. 这些效果在所有最新版的现代浏览器中都测试通过,但是可能某些旧的浏览器会不支持这些效

php画一个背景透明,且开始处旋转到在圆的正下方处的一个圆饼统计图

/* * _survey 得到一个投票的圆饼图 * @access public 表示函数对外公开 * @param $_agree 同意票数 * @param $_disagree 反对票数 * return 一张统计圆饼图 * */ function _vote($_agree,$_disagree){ //处理参数 if($_agree==0&&$_disagree==0){ $_vote = 270; } if($_agree==0&&$_disagree!=0){

7种炫酷HTML5 SVG液态水滴融合分解动画特效

这是一组使用HTML5 SVG过滤器制作的炫酷液态水滴融合分解动画特效.这些SVG动画特效使一些HTML元素.如菜单.分页button.APP.选择框等元素的过渡动画像几粒水滴一样融合分解.效果很的酷. 通过SVG Filters能够改动一个给定的图形,创建我们须要的结果.SVG中包括了一组能够运行各种操作的filter元素. 最常见的SVG filter效果是通过feGaussianBlur来制作模糊效果. <svg xmlns="http://www.w3.org/2000/svg&q

基于HTML5 SVG炫酷文字爆炸特效

这是一款使用html5 svg.css3和js制作的炫酷文字爆炸特效.该文字特效用SVG path属性将文字路径切割为很多小块,然后使用css3和js在鼠标滑过文字时制作文字爆炸分裂的炫酷效果. 在线预览   源码下载 这是一款使用html5 svg.css3和js制作的炫酷文字爆炸特效.不论是HTML还是CSS都没有能力将文字分割成小块,但是SVG可以实现这个效果. 制作SVG文字 可以使用矢量图制作工具,如Adobe Illustrator等,将文字变成轮廓,然后使用“ Knife ”工具在