Reputation: 12487
This is my code:
https://jsfiddle.net/rzcos32n/
I have this code:
function isItANumber(el) {
var element1 = document.getElementById("circle").innerHTML;
var percent = parseFloat(element1)*100;
percent+='%';
var increased = parseInt(el.innerText);
var element = document.getElementById("Value");
if (isNaN(increased) || element1 >= 0) {
document.getElementById("Result").innerHTML = "KanBan";
document.getElementById("circle").style.marginLeft = percent;
};
if (isNaN(increased) || element1 >= 0.33) {
document.getElementById("Result").innerHTML = "ScrumBan";
document.getElementById("circle").style.marginLeft = percent;
};
if (isNaN(increased) || element1 >= 0.66) {
document.getElementById("Result").innerHTML = "Scrum";
document.getElementById("circle").style.marginLeft = percent;
}
if (isNaN(increased) || element1 > 0.9) {
document.getElementById("Result").innerHTML = "Scrum";
document.getElementById("circle").style.marginRight = '0%';
}
}
var element = document.getElementById("circle");
isItANumber(element);
#line {
width: 100%;
/* 2 */
height: 5px;
background: gray;
position:relative;
margin-top: 30px;
}
#circle {
height: 50px;
width: 50px;
border-radius: 50%;
background: blue;
text-align: center;
color: white;
font-weight: 700;
line-height: 50px;
font-size: 14px;
position:absolute;
margin-top:-22.5px;
}
<div id="Result"></div>
<div id="line">
<div id="circle">
1.0
</div>
</div>
I set the position of the circle on the line horizontally depending on the percentage value in the circle. So if it's '1' that means 100%.
I do this by assigning a margin-left to it, and it works perfectly for most values, except when its a high value like 1 it pushes the circle completely off the page.
Is there a way to have it so the circle always stays on the page, even when it's margin-left is either 0% or 100%?
Upvotes: 0
Views: 169
Reputation: 970
I added var percent = "calc("+parseFloat(element1)*100+"% - 50px)";
in that way you got 100% but we have to subtract circle width (50px)
function isItANumber(el) {
var element1 = document.getElementById("circle").innerHTML;
var percent = "calc("+parseFloat(element1)*100+"% - 50px)";
var increased = parseInt(el.innerText);
var element = document.getElementById("Value");
if (isNaN(increased) || element1 >= 0) {
document.getElementById("Result").innerHTML = "KanBan";
document.getElementById("circle").style.marginLeft = percent;
};
if (isNaN(increased) || element1 >= 0.33) {
document.getElementById("Result").innerHTML = "ScrumBan";
document.getElementById("circle").style.marginLeft = percent;
};
if (isNaN(increased) || element1 >= 0.66) {
document.getElementById("Result").innerHTML = "Scrum";
document.getElementById("circle").style.marginLeft = percent;
}
if (isNaN(increased) || element1 > 0.9) {
document.getElementById("Result").innerHTML = "Scrum";
document.getElementById("circle").style.marginRight = '0%';
}
}
var element = document.getElementById("circle");
isItANumber(element);
#line {
width: 100%;
/* 2 */
height: 5px;
background: gray;
position:relative;
margin-top: 30px;
}
#circle {
height: 50px;
width: 50px;
border-radius: 50%;
background: blue;
text-align: center;
color: white;
font-weight: 700;
line-height: 50px;
font-size: 14px;
position:absolute;
margin-top:-22.5px;
}
<div id="Result"></div>
<div id="line">
<div id="circle">
1.0
</div>
</div>
Upvotes: 1
Reputation: 2758
removed javascript that is adding 100% margin-left
and replaced with margin-left:auto
this will place the circle at the right side and used margin-top: -22.5px
to place it on top of the line. thanks
function isItANumber(el) {
var element1 = document.getElementById("circle").innerHTML;
var percent = parseFloat(element1) * 100;
percent += '%';
var increased = parseInt(el.innerText);
var element = document.getElementById("Value");
if (isNaN(increased) || element1 >= 0) {
document.getElementById("Result").innerHTML = "KanBan";
document.getElementById("circle").style.marginLeft = percent;
};
if (isNaN(increased) || element1 >= 0.33) {
document.getElementById("Result").innerHTML = "ScrumBan";
};
if (isNaN(increased) || element1 >= 0.66) {
document.getElementById("Result").innerHTML = "Scrum";
document.getElementById("circle").style.marginLeft = percent;
}
if (isNaN(increased) || element1 > 0.9) {
document.getElementById("Result").innerHTML = "Scrum";
document.getElementById("circle").style.marginRight = '0%';
}
}
var element = document.getElementById("circle");
isItANumber(element);
#line {
width: 100%;
/* 2 */
height: 5px;
background: gray;
position: relative;
margin-top: 30px;
padding-top: 1px;
}
#circle {
height: 50px;
width: 50px;
border-radius: 50%;
background: blue;
text-align: center;
color: white;
font-weight: 700;
line-height: 50px;
font-size: 14px;
/* position: absolute; */
margin-top: -22.5px;
/* margin: auto; */
/* margin-top: 100px; */
margin-left: auto !important;
}
<div id="Result"></div>
<div id="line">
<div id="circle">
1.0
</div>
</div>
Upvotes: 0
Reputation: 2486
You have not needed marginLeft
property you can use left
property because it's a positioned element. here your accepted output or maybe it helps you.
function isItANumber(el) {
var element1 = document.getElementById("circle").innerHTML;
var percent = parseFloat(element1)*100;
percent+='%';
var increased = parseInt(el.innerText);
var element = document.getElementById("Value");
if (isNaN(increased) || element1 >= 0 && element1 < 0.33 ) {
document.getElementById("Result").innerHTML = "KanBan";
document.getElementById("circle").style.left = percent;
};
if (isNaN(increased) || element1 >= 0.33 && element1 < 0.66) {
document.getElementById("Result").innerHTML = "ScrumBan";
document.getElementById("circle").style.left = percent;
};
if (isNaN(increased) || element1 >= 0.66 && element1 < 0.9) {
document.getElementById("Result").innerHTML = "Scrum";
document.getElementById("circle").style.left = percent;
}
if (isNaN(increased) || element1 > 0.9) {
document.getElementById("Result").innerHTML = "Scrum";
document.getElementById("circle").style.left = 'auto';
document.getElementById("circle").style.right = '0';
}
}
var element = document.getElementById("circle");
isItANumber(element);
#line {
box-sizing: border-box;
/* 2 */
height: 5px;
background: gray;
position:relative;
margin: 30px auto 0 auto;
}
#circle {
height: 50px;
width: 50px;
border-radius: 50%;
background: blue;
text-align: center;
color: white;
font-weight: 700;
line-height: 50px;
font-size: 14px;
position:absolute;
margin-top:-22.5px;
transition: 0.3s;
left: 0;
}
<div id="Result"></div>
<div id="line">
<div id="circle">
1.0
</div>
</div>
=== Thank you ===
Upvotes: 0