当DIV在视图中时,启动Javascript事件

前端之家收集整理的这篇文章主要介绍了当DIV在视图中时,启动Javascript事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当某个DIV在页面上进行查看时,是否可以触发特定的 JavaScript事件?

比方说,我有一个非常大的页面,如2500×2500,我有一个40×40的div位于1980×1250的位置. div不一定是手动定位的,因为内容推送到那里.现在,当用户滚动到div变得可见的点时,是否可以运行一个函数

解决方法

自动每次通过将div矩形的坐标与可见页面矩形进行比较,您将不得不捕获滚动事件并检查它.

这是一个最小的例子.

<div id="importantdiv">hello</div>

<script type="text/javascript">
    function VisibilityMonitor(element,showfn,hidefn) {
        var isshown= false;
        function check() {
            if (rectsIntersect(getPageRect(),getElementRect(element)) !== isshown) {
                isshown= !isshown;
                isshown? showfn() : hidefn();
            }
        };
        window.onscroll=window.onresize= check;
        check();
    }

    function getPageRect() {
        var isquirks= document.compatMode!=='BackCompat';
        var page= isquirks? document.documentElement : document.body;
        var x= page.scrollLeft;
        var y= page.scrollTop;
        var w= 'innerWidth' in window? window.innerWidth : page.clientWidth;
        var h= 'innerHeight' in window? window.innerHeight : page.clientHeight;
        return [x,y,x+w,y+h];
    }

    function getElementRect(element) {
        var x= 0,y= 0;
        var w= element.offsetWidth,h= element.offsetHeight;
        while (element.offsetParent!==null) {
            x+= element.offsetLeft;
            y+= element.offsetTop;
            element= element.offsetParent;
        }
        return [x,y+h];
    }

    function rectsIntersect(a,b) {
        return a[0]<b[2] && a[2]>b[0] && a[1]<b[3] && a[3]>b[1];
    }

    VisibilityMonitor(
        document.getElementById('importantdiv'),function() {
            alert('div in view!');
        },function() {
            alert('div gone away!');
        }
    );
</script>

你可以通过以下方式来改进:

>使所有祖先拥有溢出滚动或自动的祖先,并调整其滚动位置的上/下协调>检测溢出滚动,自动隐藏裁剪使div脱离屏幕>使用addEventListener / attachEvent允许多个VisibilityMonitor和其他使用resize / scroll事件的东西>一些兼容性hack getElementRect使得协调在某些情况下更准确,一些事件解除绑定,以避免IE6-7内存泄漏,如果你真的需要.

原文链接:https://www.f2er.com/css/214382.html

猜你在找的CSS相关文章