当前位置:编程学习 > JAVA >>

IE8下的替代elementFromPoint函数

因为IE8下的elementFromPoint(x, y)中,x, y 不能同时为非立即数,所以自己写一个替代的函数。
[javascript] 
/*
         * 该函数用于模仿:elementFromPoint.
         * 获取parent这个元素下,含有tagCls这个class属性,又包含(x, y)这个client位置的最佳元素。
         * return el;
         */ 
        getPerfectTag : function(parent, tagCls, x, y) { 
             
            // 第一层筛选:parent下,所有含tagCls的元素 
            var children = KISSY.DOM.query('.' + tagCls, parent);  
                tags = []; 
            if(children.length === 0) return null; 
             
            // 第二层筛选: 包含(x, y)点的元素   
            tags = getInXY(children); 
             
            function getInXY(children) { 
                var tags = []; 
                hx.each(children, function(item) { 
                    var x0 = item.offsetLeft, 
                        y0 = item.offsetTop, 
                        x1 = x0 + item.offsetWidth, 
                        y1 = y0 + item.offsetHeight; 
                    // 该item包含了鼠标所在的点 
                    if( (x0<=x && x1>=x) && (y0<=y && y1>=y)) { 
                        var obj = { 
                            item : item, 
                            zindex : $(item).css('zindex') || null, 
                            isTop : $(item).children("." + tagCls).length === 0 // 它的孩子是否已经不含有tagCls 
                        }; 
                        tags.push(obj); 
                    } 
                }); 
                return tags; 
            } 
             
            var len = tags.length;  www.zzzyk.com
            // 如果所有包含tagCls的元素,均不包含(x, y),那么需要查找children的所有后代元素。因为可能子元素偏离父元素的盒子模型。 
            if(len === 0) { 
                var tag; 
                function getAllChildren(el, all) { 
                    var all = all || []; 
                    if(el === null) return null; 
                    all.push(el); 
                    hx.each($(el).children(), function(item) { 
                        getAllChildren(item, all); 
                    }); 
                    return all; 
                } 
                // 逐个查找满足tagCls的元素的所有后代元素,并把该集合放入(x, y)进行匹配,匹配成功则算是查找成功。 
                hx.each(children, function(item) { 
                    var all = getAllChildren(item); 
                    var temps = getInXY(all); 
                    if(temps.length > 0) { 
                        tag = temps[0].item; 
                        return false; 
                    } 
                }); 
                 
 
补充:web前端 , JavaScript ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,