Result
編集はcontenteditable属性を使っています。
動作サンプルなのですべてのセルは編集可能となっていますので、コンテンツに応じて便宜変更してください
jQuery
var vis = function(e) {
var count = $(e).children('td').not(':first-of-type').length;
var width = $('.chart').height();
var barwidth = (width/count)-10;
var heighest = 0;
var chartTitle = $('th:first-of-type').html();
var tableTitle = $('.table-title').html();
var chartTitleVal = $(e).children('td:first-of-type').html();
$('.chart').empty();
$('.legend').empty();
$('.titles').empty();
$('.title').empty();
$('.x-axis').empty();
$('.title').html(chartTitleVal);
$('.chart').prepend('<div class="x-axis">'+tableTitle+'</div>');//テキストをグラフ側にも反映
$('th').not(':first-of-type').each(function(){
var title = $(this).html();
$('.titles').append('<div style="width:'+barwidth+'px;">'+title+'</div>');
});
$(e).children('td').not(':first-of-type').each(function(){
var contents = $(this).html();
var value = parseInt(contents);
if( value > heighest){
heighest = value
}
});
$(e).children('td').not(':first-of-type').each(function(){//tableの数値をグラフに反映
var contents = $(this).html();
var value = parseInt(contents);
var barheight = (value/heighest)*100;
$('.chart').append('<div class="bar" style="width:'+barheight+'%; height:'+barwidth+'px;"></div>');
$('.legend').append('<div style="width:'+barwidth+'px;">'+value+'</div>');
});
}
$('tr').not('.header').on('click', function(){
var x = $(this);
x.css({'background':'#E2EBC2'}).addClass('selected').siblings().removeClass('selected').css({'background':'#FFFFFF'});
vis(x);
});
$(function(){
var x = $('tr').not('.header').first(); x.css({'background':'#E2EBC2'}).addClass('selected').siblings().css({'background':'#FFFFFF'});
vis(x);
});
$('td').on('keyup paste input', function(){
var x = $(this).parent();
vis(x);
});
$('th').on('keyup paste input', function(){
var x = $('.selected');
vis(x);
});
$('.table-title').on('keyup paste input', function(){
var x = $('.selected');
vis(x);
});
css
.chart {
margin-top: -60px;
border-top: 1px solid black;
border-left: 1px solid black;
height: 450px;
width: 300px;
transform: rotate(-90deg);
}
.bar {
background: #66C0CC;
margin-top: 10px;
animation: height 0.8s ease;
padding: 10px;
}
.x-axis {
margin-top: -30px;
padding-bottom: 10px;
}
.legend {
clear: both;
color: #66C0CC;
width: 450px;
}
.legend div {
float: left;
margin-left: 10px;
}
.titles {
clear: both;
width: 450px;
margin-top: -60px;
}
.titles div {
float: left;
margin-left: 10px;
}
html
<div class="left">
<div class="table">
<h2 class="table-title" contenteditable="true">販売実績</h2>
<table>
<tr class="header">
<th contenteditable=true>年</th>
<th contenteditable=true>りんご</th>
<th contenteditable=true>なし</th>
<th contenteditable=true>みかん</th>
<th contenteditable=true>もも</th>
</tr>
<tr>
<td contenteditable=true>2010年</td>
<td contenteditable=true>2</td>
<td contenteditable=true>31</td>
<td contenteditable=true>24</td>
<td contenteditable=true>51</td>
</tr>
<tr>
<td contenteditable=true>2011年</td>
<td contenteditable=true>36</td>
<td contenteditable=true>21</td>
<td contenteditable=true>47</td>
<td contenteditable=true>109</td>
</tr>
<tr>
<td contenteditable=true>2012年</td>
<td contenteditable=true>56</td>
<td contenteditable=true>9</td>
<td contenteditable=true>33</td>
<td contenteditable=true>18</td>
</tr>
<tr>
<td contenteditable=true>2013年</td>
<td contenteditable=true>90</td>
<td contenteditable=true>55</td>
<td contenteditable=true>71</td>
<td contenteditable=true>12</td>
</tr>
<tr>
<td contenteditable=true>2014年</td>
<td contenteditable=true>36</td>
<td contenteditable=true>92</td>
<td contenteditable=true>77</td>
<td contenteditable=true>61</td>
</tr>
</table>
</div>
</div>
<div class="right">
<h3 class="title"></h3>
<div class="chart">
<div class="x-axis"></div>
</div>
<div class="titles">
</div>
<div class="legend">
</div>
</div>
via
Just a moment...
