zoukankan      html  css  js  c++  java
  • SVG-矩形数据图

    要求:使用SVG标签

    1.先画出坐标轴

      <g  stroke="#545454" stroke-width="3">
        <line x1="100" y1="100" x2="100" y2="900"></line>
        <line x1="100" y1="900" x2="900" y2="900"></line>
        <polyline points="90,120 100,100 110,120" fill-opacity="0"></polyline>
        <polyline points="880,890 900,900 880,910" fill-opacity="0"></polyline>
      </g>

    坐标轴使用Line标签,箭头使用polyline折线标签

    2.颜色使用随机渐变,创建随机颜色函数rc

     function rc(min,max){
        var r=Math.round(Math.random()*(max-min));
        var g=Math.round(Math.random()*(max-min));
        var b=Math.round(Math.random()*(max-min));
        return "rgb("+r+","+g+","+b+")";
      }

    3.获取数据,本DOME使用原生AJAX,没有做兼容性处理

      var xhr=new XMLHttpRequest();
      xhr.onreadystatechange=function(){
        if (xhr.readyState=="4"&&xhr.status=="200"){
          var data=eval("("+xhr.responseText+")");
          doResponse(data);
        }
      }
      xhr.open("GET","../res/curriculum",true);
      xhr.send(null);

    4.构写处理数据函数doResponse

    var w=1000;
    var h=1000;
      function doResponse(data){
    //    设置矩形宽度
        var rectW=(w-200)/(data.length*2);
    //    Y坐标轴据左边距离
        var baseLineL=100;
    //    X坐标轴距顶部距离
        var baselineT=h-100;
    //    创建文档碎片
        var trg=document.createDocumentFragment();
        for(var i=0;i<data.length;i++) {
    //     获取随机颜色
          var r = rc(0, 255);
    //      创建线性渐变,顺便创建文本-->
          var html = `<defs>
          <linearGradient id="g${i}" x1="0" y1="0" x2="0" y2="100%">
          <stop offset="0" stop-color="${r}"></stop>
          <stop offset="1" stop-color="#ffffff" stop-opacity="0"></stop>
          </linearGradient>
          </defs>
          <text x="${baseLineL+(i*2+1)*rectW}" y="${baselineT+20}" fill="black">${data[i].label}</text>
          <text x="${baseLineL+(i*2+1)*rectW}" y="${baselineT - (data[i].value * 100)-15}" fill="black">${data[i].value}</text>
          `;
          s1.innerHTML += html;
        //创建矩形,别忘了命名空间
          var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
          rect.setAttribute("width", rectW);
          rect.setAttribute("height",(data[i].value) * 100);
          rect.setAttribute("x", baseLineL + (i*2+1)*rectW);
          rect.setAttribute("y", baselineT - (data[i].value * 100));
          rect.setAttribute("fill", "url(#g" + i + ")");
          trg.appendChild(rect);
        }
    //    把trg碎片放在DOM中
        s1.appendChild(trg);
        trg=null;
      }
  • 相关阅读:
    redis 基本指令
    php 魔术变量
    php 常用函数总结
    linux 命令——3 pwd (转)
    linux 命令——2 cd (转)
    linux 命令——ls
    ffmeg过滤器介绍[转]
    最简单的基于FFMPEG的转码程序 —— 分析
    ffmpga结构体和常用函数(总结)
    leetcode--3
  • 原文地址:https://www.cnblogs.com/liangfc/p/8428813.html
Copyright © 2011-2022 走看看