简体   繁体   English

如何使用Javascript在视口下方获取所有500px的HTML元素

[英]How to get all HTML elements 500px below viewport using Javascript

I am trying to get all the HTML elements(div with particular id) which are there 500px below viewport on the page. 我正在尝试获取所有HTML元素(具有特定ID的div),这些元素在页面上的视口下方有500px。 I want to have this on scroll event. 我想在滚动事件上有这个。

    var windowHeight = window.outerHeight;
    var gridTop = windowHeight + 500;
    var elements = document.getElementsByClassName('test');
    window.addEventListener('scroll', function () {
        for (let i = 0; i < elements.length; i++) {
            var thisTop = elements[i].offsetTop - document.body.scrollTop;
            if (thisTop >= gridTop) {
                console.log('hi');
            }
        }
    });

I need help on finding elements 500px below viewport. 我需要寻找视口下方500px的元素的帮助。

EDIT: I want to do it with pure JavaScript and I am using above code. 编辑:我想用纯JavaScript做到这一点,我正在使用上面的代码。 But every time I am getting thisTop as 0. Please let me know the approach to do this. 但是,每次将thisTop设为0时,请让我知道执行此操作的方法。

Check following solution, here I put parent div which is scrollable. 检查以下解决方案,在这里我将父div滚动。

Note- I have put offset of 50px, in order to support the example. 注意-为了支持示例,我将偏移量设置为50px。

 var parent = document.documentElement var elements = document.getElementsByClassName('test'); var gridTop = parent.clientHeight + 50; window.addEventListener('scroll', function() { var printStr = ""; for (let i = 0; i < elements.length; i++) { var thisTop = elements[i].offsetTop - parent.scrollTop; if (thisTop >= gridTop) { printStr += " "+elements[i].id } } console.clear(); console.log('selected ', printStr); }); 
 .container div { width: 40px; height: 70px; margin: 5px; background-color: red; text-align: center; } 
 <div class="container"> <div class="test" id="1">1</div> <div class="test" id="2">2</div> <div class="test" id="3">3</div> <div class="test" id="4">4</div> <div class="test" id="5">5</div> <div class="test" id="6">6</div> <div class="test" id="7">7</div> <div class="test" id="8">8</div> <div class="test" id="9">9</div> <div class="test" id="10">10</div> <div class="test" id="11">11</div> <div class="test" id="12">12</div> </div> 

You should not set multiple elements to have the same ID. 您不应将多个元素设置为具有相同的ID。 It will have a conflict in your js. 它将在您的js中发生冲突。 If you want to identify a set of DIVs, you should use CLASS instead. 如果要标识一组DIV,则应改用CLASS。

Here, what I did was to find all elements classed as some-class-name iterated through the list, Then get their width, both style.width and offsetWidth 在这里,我要做的是找到所有被归类为some-class-name元素,并通过列表进行迭代,然后获取它们的宽度,包括style.widthoffsetWidth

    <div id="the_900px_div" class="some-class-name" style="width:900px;border:1px solid blue;"></div>
    <div id="the_200px_div" class="some-class-name" style="width:200px;border:1px solid blue;"></div>
    <div id="the_100px_div" class="some-class-name" style="width:100px;border:1px solid red;"></div>
    <script type="text/javascript">
    function autorun()
    {
        var elements = document.getElementsByClassName('some-class-name');
        var elementsLength = elements.length;
        console.log(elements);
        for (var i = 0; i < elementsLength; i++){
            var sw = elements[i].style.width.replace('px','');
            var ow = elements[i].offsetWidth;
            var id = elements[i].id;
            console.log(sw > 500)
            console.log(id + ' style.width is ' + sw + 'px')
            console.log(ow > 500)
            console.log(id + ' offsetWidth is ' + ow + 'px')
        }
    }
    if (document.addEventListener) document.addEventListener("DOMContentLoaded", autorun, false);
    else if (document.attachEvent) document.attachEvent("onreadystatechange", autorun);
    else window.onload = autorun;
    </script>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM