是否可以向chart.js折线图添加阴影?

And*_*mes 4 javascript css chart.js

chart.js用来建立折线图。我想知道是否可以向正在显示的折线图添加阴影。为了澄清,我的意思是在行本身添加阴影。像这样:

https://dribbble.com/shots/1444038-Graph/attachments/213078

这是代码和代码片段。

// Line Chart
var ctx = document.getElementById("salesData").getContext("2d");

var gradient = ctx.createLinearGradient(0,0,700,0);
    gradient.addColorStop(0, 'rgba(255, 204, 128, 1)');   
    gradient.addColorStop(0.5, 'rgba(255, 152, 0, 1)');
    gradient.addColorStop(1, 'rgba(239, 108, 0, 1)');

var salesData = {
  labels: ["1", "2", "3", "4", "5", "6", "7", "8"],
  datasets: [
    {
      label: "Front",
      fillColor: "rgba(0, 0, 0, 0)",
      strokeColor: gradient,
      pointColor: gradient,
      pointStrokeColor: "#202b33",
      pointHighlightStroke: "rgba(225,225,225,0.9)",
      data: [0, 10, 40, 48, 55, 64, 55, 72]
    }
  ]
};


window.myLineChart = new Chart(ctx).Line(salesData, {
  pointDotRadius : 0,
  pointDotStrokeWidth : 0,
  datasetStrokeWidth : 4,
  scaleShowVerticalLines: true,
  scaleGridLineWidth : 2,
  scaleShowGridLines : true,
  scaleGridLineColor : "rgba(225, 255, 255, 0.02)",
  scaleOverride: true,
  scaleSteps: 12,
  scaleStepWidth: 10,
  scaleStartValue: 0,

  responsive: true

});
Run Code Online (Sandbox Code Playgroud)
<script src="http://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.1/Chart.min.js"></script>
<canvas id="salesData"></canvas>
Run Code Online (Sandbox Code Playgroud)

pot*_*ngs 5

扩展图表并覆盖 draw功能将是执行此操作的一种(复杂)方法。

一种更简单的方法是在隐藏所有其他元素(网格线,比例尺标签...)的情况下复制图表画布,并以不同的方式设置线条的样式(较粗和灰色阴影)。然后,将此重复的画布放在原始画布的下方和右侧。

的CSS

.shadowParent {
    position: relative;
}
.shadowParent canvas.firstShadow {
    position: absolute;
    left: 10px;
    top: 30px;
    z-index: -1;
}
Run Code Online (Sandbox Code Playgroud)

的HTML

<div class="shadowParent">
    <canvas id="myChartShadow" class="firstShadow" width="600"></canvas>
    <canvas id="myChart" width="600"></canvas>
</div>
Run Code Online (Sandbox Code Playgroud)

脚本

...

var ctxShadow = document.getElementById("myChartShadow").getContext("2d");
var dataShadow = JSON.parse(JSON.stringify(data));
dataShadow.datasets[0].strokeColor = "rgba(220,220,220,0.2)"
new Chart(ctxShadow).Line(dataShadow, {
    datasetStrokeWidth: 10,
    datasetFill: false,
    pointDot: false,
    showTooltips: false,
});
Run Code Online (Sandbox Code Playgroud)

如果阴影不够模糊,可以再增加一层

的CSS

.shadowParent canvas.secondShadow {
    position: absolute;
    left: 10px;
    top: 30px;
    z-index: -1;
}
Run Code Online (Sandbox Code Playgroud)

的HTML

<div class="shadowParent">
    <canvas id="myChartShadow2" class="secondShadow" width="600"></canvas>
    ...
Run Code Online (Sandbox Code Playgroud)

脚本

var ctxShadow2 = document.getElementById("myChartShadow2").getContext("2d");
var dataShadow2 = JSON.parse(JSON.stringify(data));
dataShadow2.datasets[0].strokeColor = "rgba(220,220,220,0.1)"
new Chart(ctxShadow2).Line(dataShadow2, {
    datasetStrokeWidth: 20,
    datasetFill: false,
    pointDot: false,
    showTooltips: false,
    scaleFontColor: "rgba(0,0,0,0)",
    scaleLineColor: "rgba(0,0,0,0)",
    scaleShowGridLines: false,
    datasetFill: false,
});
Run Code Online (Sandbox Code Playgroud)

请注意,比例尺与第一个阴影对齐(它使它具有更3D的感觉),但是如果比例尺很重要,则可以将其移动到第一层(与之相比,这更像是一种粗糙的图形)


小提琴-http: //jsfiddle.net/fjyj1021/


在此处输入图片说明