代码之家  ›  专栏  ›  技术社区  ›  Tim Frey

有没有办法检测HTML元素何时从视图中隐藏?

  •  0
  • Tim Frey  · 技术社区  · 17 年前

    使用Javascript,是否有可能检测到某个元素何时不再可见,例如用户何时向下滚动足够远,浏览器何时最小化或被另一个窗口覆盖?总体目标是仅当用户看不到当前广告时才替换广告。

    1 回复  |  直到 17 年前
        1
  •  6
  •   Paolo Bergantino    17 年前

    我不确定是否有一种方法可以检测窗口是否在元素上方,或者窗口是否最小化(尽管我认为您可以通过将某个对象连接到窗口的模糊中来实现后者)?我不确定。无论如何,就滚动而言,这部分问题之前已经被问过几次了, and this is the quick demo 我想出了一个方法来演示如何做。在这个例子中,当元素被滚动到视图中时会发生一些事情,但是逻辑当然是相同的。总之,代码是:

    $(document).ready(function() {
        function isScrolledIntoView(elem) {
            var docViewTop = $(window).scrollTop();
            var docViewBottom = docViewTop + $(window).height();
    
            var elemTop = $(elem).offset().top;
            var elemBottom = elemTop + $(elem).height();
    
            return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom));
        }
    
        var myelement = $('#formcontainer');
        var mymessage = $('#mymessage');
        $(window).scroll(function() {
            if(isScrolledIntoView(myelement)) {
                mymessage.hide();
            } else {
                mymessage.show();
            }
        });
    });
    

    window.addEventListener('load', function() {
        function isScrolledIntoView(elem) {
            var docViewTop = $(window).scrollTop();
            var docViewBottom = docViewTop + $(window).height();
    
            var elemTop = $(elem).offset().top;
            var elemBottom = elemTop + $(elem).height();
    
            return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom));
        }
    
        var el = document.getElementById('myelement');
        window.addEventListener('scroll', function() {
            if(isScrolledIntoView(el)) {
                // do something when element is scrolled into view
            } else {
                // do something when it is not in view
            }
        }, false);
    }, false);