I’ve tried looking around but was not able to find a clear/easy answer.
Let’s say I want to retrieve some value (size) in px for a CSS style sheet like this :
#block{
width: 150px;
height: 150px;
background-color: #f00;
position: absolute;
left: 0;
top: 0;
}
I’ve tried
let block = document.getElementById("block");
const square = window.getComputedStyle(block)
const width = square.getPropertyValue('width');
block.style.width = size.value * width;
But it returns a string. I’d like to modify the value in px dynamically with JS. Is there a better way or should I create a substring, then convert it to a number?
EDIT : I’ve also tried
let width = block.offsetWidth;
But the result on my page is not at all functional.
Advertisement
Answer
I found the solution. Declaring the variables before the function but not inside the function did make my result responsive!
I played around with position and scopes of those newly called variables, and I was finally able to make what I want work. I’ll also add some of my code.
Added code :
size.addEventListener('input', function () {
block.style.width = size.value * width + 'px';
block.style.height = size.value * height + 'px';
});
Initially, I was putting my declaration of my variable
const width = block.clientWidth;
const height = block.clientHeight;
Inside of the function. This causes my page not to be really responsive, but caused some “delay” in the adjustments. When I did put these declarations outside of the function, before, it did work properly.
// This solution works next 3 lines. only setting CONST works. Retrieves number value.
// let square = block.getBoundingClientRect();
// const height = square.height;
// const width = square.width;
// This solution. Needs to be outside of the function. Works with either let or const
// let width = block.offsetWidth;
// let height = block.offsetHeight;
// This way also works, only if outside of the function
const width = block.clientWidth;
const height = block.clientHeight;
All of the above works if called before the function but not inside.
Thank you for your help!