iyth888 发表于 2015-9-14 08:31:40

Outlook 日历时间块布局 html5实现

  



  将左边的数据排列成右边的整齐和密集的数据。
  <html>

<body>
    <canvas id=&quot;CanvasOri&quot; width=&quot;200&quot; height=&quot;200&quot; style=&quot;border:1px solid #c3c3c3;&quot;>
      Your browser does not support the canvas element.
    </canvas>
    <canvas id=&quot;Canvas1&quot; width=&quot;200&quot; height=&quot;200&quot; style=&quot;border:1px solid #c3c3c3;&quot;>
      Your browser does not support the canvas element.
    </canvas>
    <script type=&quot;text/javascript&quot;>
    var alldata = [, , , , , , , , , , , , ];
      function draw(canvas, data, bar, group) {
      var c = document.getElementById(canvas);
      var cxt = c.getContext(&quot;2d&quot;);
      cxt.fillStyle = &quot;#BBD7AF&quot;;
      var grd = cxt.createLinearGradient(0, 0, 200, 200);
      grd.addColorStop(0, &quot;#B9D6AD&quot;);
      grd.addColorStop(1, &quot;#D8E7D1&quot;);
      cxt.lineWidth = 1;


      var len = data.length;
      if (group == -1) group = len;
      bar = bar / group
      for (var i = 0; i < len; i&#43;&#43;) {
          var index = i;
          if (data != -1) index = data;
          cxt.fillStyle = grd;
          cxt.strokeRect(bar * index, data, bar, data - data);
          cxt.fillRect(bar * index &#43; 1, data &#43; 1, bar - 2, data - data - 2);
          cxt.fillStyle = &quot;#FF0000&quot;;
          cxt.fillText(data&#43;&quot;,&quot;&#43;data,bar * index &#43; bar/2-10, data&#43;(data-data)/2);
      }
      }
      //已经排序好的数据
      function splitdata(data) {
      function numberorder(a, b) {
          return a - b;
      }
      data.sort(numberorder);
      var stack = [];
      var len = data.length;
      var s = 0;
      var curmax = 0;
      for (var i = 0; i < len - 1; i&#43;&#43;) {
          if (curmax < data) {
            curmax = data;
          }
          if (curmax <= data) {
            stack.push(data.slice(s, i &#43; 1));
            s = i &#43; 1;
          }
      }
      stack.push(data.slice(s, i &#43; 1));
      return stack;
      }
      var alldata = splitdata(alldata);
      for (var m = 0; m < alldata.length; m&#43;&#43;) {
      var data = alldata;


      function numberorder(a, b) {
          return a - b;
      }
      data.sort(numberorder);
      draw(&quot;CanvasOri&quot;, data, 200, -1);


      var k = 0;
      var len = data.length;
      for (var i = 0; i < len; i&#43;&#43;) {
          if (data != -1) continue;
          data = k;
          var curmax = data;
          for (var j = i &#43; 1; j < len; j&#43;&#43;) {
            if (curmax <= data && data == -1) {
            data = k;
            curmax = data;
            }
          }
          k&#43;&#43;;
      }
      draw(&quot;Canvas1&quot;, data, 200, k);
      document.write(&quot;<br>--------------------<br>&quot;)
      for (var i = 0; i < len; i&#43;&#43;) {
          document.write(&quot;<br>&quot; &#43; data &#43; &quot;&nbsp;&quot; &#43; data &#43; &quot;&nbsp;&quot; &#43; data &#43; &quot;<br>&quot;);
      }
      }
    </script>
</body>


</html>
页: [1]
查看完整版本: Outlook 日历时间块布局 html5实现