Reputation: 517
I want my divs to move when they're wider than 20% of the screen. Does anyone know how to refactor ma function "isElementOverflowing()" that it works fo multiple divs (for example 3)? I used "getElementById" and "querySelectorAll" to get the divs, but it doesn't work for my function.
Thanks for help :)
<!DOCTYPE html>
<html>
<head></head>
<body>
<div id="s1" style="width:20%; font-size:2000%" class="class">something1</div>
<div id="s2" style="width:20%; font-size:2000%" class="class">something2</div>
<div id="s3" style="width:20%; font-size:2000%" class="class">something3</div>
<script type="text/javascript">
function isElementOverflowing(element) {
var overflowX = element.offsetWidth < element.scrollWidth,
overflowY = element.offsetHeight < element.scrollHeight;
return (overflowX || overflowY);
}
function wrapContentsInMarquee(element) {
var marquee = document.createElement('marquee'),
contents = element.innerText;
marquee.innerText = contents;
marquee.behavior = "alternate";
element.innerHTML = '';
element.appendChild(marquee);
}
var element = document.getElementsByClassName("class");
if (isElementOverflowing(element)) {
wrapContentsInMarquee(element);
}
</script>
</body>
</html>
Upvotes: 0
Views: 71
Reputation: 961
The getElementsByClassName
returns an array-like object of all child elements which have all of the given class names. More info here.
So in your function isElementOverflowing
you are getting a dom element, not an array of them. Then, you only need to iterate those elements.
elements.forEach(function(element) {
if (isElementOverflowing(element)) {
wrapContentsInMarquee(element);
}
});
Upvotes: 1
Reputation: 7143
You can loop over each of them I guess:
function isElementOverflowing(element) {
var overflowX = element.offsetWidth < element.scrollWidth,
overflowY = element.offsetHeight < element.scrollHeight;
return (overflowX || overflowY);
}
function wrapContentsInMarquee(element) {
var marquee = document.createElement('marquee'),
contents = element.innerText;
marquee.innerText = contents;
marquee.behavior = "alternate";
element.innerHTML = '';
element.appendChild(marquee);
}
var elements = document.getElementsByClassName("class");
for (var i = 0; i < elements.length; i++) {
if (isElementOverflowing(elements[i])) {
wrapContentsInMarquee(elements[i]);
}
}
<div id="s1" style="width:20%; font-size:2000%" class="class">something1</div>
<div id="s2" style="width:20%; font-size:2000%" class="class">something2</div>
<div id="s3" style="width:20%; font-size:2000%" class="class">something3</div>
Upvotes: 1