These diagrams should get data from “MYSQL-DB” and update it’s data in live accordingly, without refreshing the page.
I do not have much experience in this field, this is one of my first personal front-end projects and I would much appreciate some assistance with the subject.
link for illustrate images
https://imgur.com/a/Wob7Ype
the demo below is not displayed well, which is why I included an “SCSS” file that should be inserted in the project as an additive.
@keyframes bake-pie {
from {
transform: rotate(0deg) translate3d(0,0,0);
}
}
body {
font-family: "Open Sans", Arial;
background: #EEE;
}
main {
width: 400px;
margin: 30px auto;
}
section {
margin-top: 30px;
}
.pieID {
display: inline-block;
vertical-align: top;
}
.pie {
height: 200px;
width: 200px;
position: relative;
margin: 0 30px 30px 0;
}
.pie::before {
content: "";
display: block;
position: absolute;
z-index: 1;
width: 100px;
height: 100px;
background: #EEE;
border-radius: 50%;
top: 50px;
left: 50px;
}
.pie::after {
content: "";
display: block;
width: 120px;
height: 2px;
background: rgba(0,0,0,0.1);
border-radius: 50%;
box-shadow: 0 0 3px 4px rgba(0,0,0,0.1);
margin: 220px auto;
}
.slice {
position: absolute;
width: 200px;
height: 200px;
clip: rect(0px, 200px, 200px, 100px);
animation: bake-pie 1s;
}
.slice span {
display: block;
position: absolute;
top: 0;
left: 0;
background-color: black;
width: 200px;
height: 200px;
border-radius: 50%;
clip: rect(0px, 200px, 200px, 100px);
}
.legend {
list-style-type: none;
padding: 0;
margin: 0;
background: #FFF;
padding: 15px;
font-size: 13px;
box-shadow: 1px 1px 0 #DDD,
2px 2px 0 #BBB;
}
.legend li {
width: 110px;
height: 1.25em;
margin-bottom: 0.7em;
padding-left: 0.5em;
border-left: 1.25em solid black;
}
.legend em {
font-style: normal;
}
.legend span {
float: right;
}
footer {
position: fixed;
bottom: 0;
right: 0;
font-size: 13px;
background: #DDD;
padding: 5px 10px;
margin: 5px;
}
function sliceSize(dataNum, dataTotal) {
return (dataNum / dataTotal) * 360;
}
function addSlice(sliceSize, pieElement, offset, sliceID, color) {
$(pieElement).append("<div class='slice "+sliceID+"'><span></span></div>");
var offset = offset - 1;
var sizeRotation = -179 + sliceSize;
$("."+sliceID).css({
"transform": "rotate("+offset+"deg) translate3d(0,0,0)"
});
$("."+sliceID+" span").css({
"transform" : "rotate("+sizeRotation+"deg) translate3d(0,0,0)",
"background-color": color
});
}
function iterateSlices(sliceSize, pieElement, offset, dataCount, sliceCount, color) {
var sliceID = "s"+dataCount+"-"+sliceCount;
var maxSize = 179;
if(sliceSize<=maxSize) {
addSlice(sliceSize, pieElement, offset, sliceID, color);
} else {
addSlice(maxSize, pieElement, offset, sliceID, color);
iterateSlices(sliceSize-maxSize, pieElement, offset+maxSize, dataCount, sliceCount+1, color);
}
}
function createPie(dataElement, pieElement) {
var listData = [];
$(dataElement+" span").each(function() {
listData.push(Number($(this).html()));
});
var listTotal = 0;
for(var i=0; i<listData.length; i++) {
listTotal += listData[i];
}
var offset = 0;
var color = [
"#4c1180",
"#17b2bd",
"#006666",
];
for(var i=0; i<listData.length; i++) {
var size = sliceSize(listData[i], listTotal);
iterateSlices(size, pieElement, offset, i, 0, color[i]);
$(dataElement+" li:nth-child("+(i+1)+")").css("border-color", color[i]);
offset += size;
}
}
createPie(".pieID.legend", ".pieID.pie");
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700);
@-webkit-keyframes bake-pie {
from {
-webkit-transform: rotate(0deg) translate3d(0, 0, 0);
transform: rotate(0deg) translate3d(0, 0, 0);
}
}
@keyframes bake-pie {
from {
-webkit-transform: rotate(0deg) translate3d(0, 0, 0);
transform: rotate(0deg) translate3d(0, 0, 0);
}
}
.pieID {
display: inline-block;
vertical-align: top;
}
.pie {
height: 200px;
width: 200px;
position: relative;
border: 0.2rem solid #fff;
box-shadow: 0 0 .2rem #fff,
0 0 .2rem #fff,
0 0 2rem #0D43E3,
0 0 0.8rem #0D43E3,
0 0 2.8rem #0D43E3,
inset 0 0 1.3rem #0D43E3;
border-radius: 50%;
}
.pie::before {
content: "";
display: block;
position: absolute;
z-index: 1;
width: 100px;
height: 100px;
background: rgb(41, 41, 41);
border-radius: 50%;
top: 50px;
left: 50px;
}
.pie::after {
content: "";
display: block;
width: 120px;
height: 2px;
margin: 220px auto;
}
.slice {
position: absolute;
width: 200px;
height: 200px;
clip: rect(0px, 200px, 200px, 100px);
-webkit-animation: bake-pie 1s;
animation: bake-pie 1s;
}
.slice span {
display: block;
position: absolute;
top: 0;
left: 0;
background-color: black;
width: 200px;
height: 200px;
border-radius: 50%;
clip: rect(0px, 200px, 200px, 100px);
}
.legend {
/*position: relative; right: 50%;*/
margin-top: 2.5%;
margin-left: 2.5%;
list-style-type: none;
margin-right: 0%;
background: rgb(14, 2, 68);
color: rgb(255, 255, 255);
padding: 15px;
padding-bottom: 4px;
font-size: 16px;
border: 0.2rem solid #fff;
box-shadow: 0 0 .2rem #fff,
**strong text** 0 0 .2rem #fff,
0 0 2rem #0D43E3,
0 0 0.8rem #0D43E3,
0 0 2.8rem #0D43E3,
inset 0 0 1.3rem #0D43E3;
}
.legend li {
width: 110px;
height: 1.25em;
margin-bottom: 0.7em;
padding-left: 0.5em;
border-left: 1.25em solid black;
}
.legend em {
font-style: normal;
}
.legend span {
float: left;
}
footer {
position: fixed;
bottom: 0;
right: 0;
font-size: 13px;
background: #DDD;
padding: 5px 10px;
margin: 5px;
}
/*# sourceMappingURL=donutTotal.css.map */
<ul class="pieID legend">
<li>
<em>south</em>
<span>192</span>
</li>
<li>
<em>north</em>
<span>192</span>
</li>
<li>
<em>center</em>
<span>192</span>
</li>
</ul>
<div class="pieID pie">
</div>