And*_*mes 4 javascript css chart.js
我chart.js用来建立折线图。我想知道是否可以向正在显示的折线图添加阴影。为了澄清,我的意思是在行本身添加阴影。像这样:
这是代码和代码片段。
// 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)
扩展图表并覆盖 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/