`

一种页面遮罩开窗方法的实现

 
阅读更多
最近在做书途网新手引导的时候,需要做在半遮罩层上开几个高亮的区域,左思右想,除了设置background-image的区域可以使用clip外,别的一时想不到更好的办法,于是就用填充的方式来做了。





/**
* 支持水平不重叠或者垂直不重叠的遮罩区域
**/
function disOverlay(elms, dir, area){
    var arr = [];
    var dir = (dir == 'x')?'left':'top';
    var area = area||{x: 0, y: 0, height: $('html').height(), width: $('html').width()};

    $(elms).each(function(index, item){
        
        if(!($(item).get(0).nodeType == 1)){
            item.offset = function(){
                return {top: this.y, left: this.x};
            }
            
            item.size = {height: item.height, width: item.width};
        }else{
            item = $(item);
        }
        
        
        if(arr.length == 0){
            arr.push($(item).get(0).nodeType?$(item):item);
            return;
        }

        var tmpArr = [];
        var len = arr.length;
        
        for(var i = 0; i < len; i++){
            if((arr[i]).offset()[dir] > (item).offset()[dir]){
                tmpArr = arr.slice(i, len - i);
                arr.splice(i, len - i, item);
                arr = arr.concat(tmpArr);
                return false;
            }
        }
        
        arr.push(item);
    });
    
    var overLay = $('<div></div>');
       
    var cls = 'overlay-item';
    
    if(dir == "left"){
        var len = arr.length;
        var tmpElm = $('<div class="' + cls + '"></div>');
        tmpElm.css({left: area.x, top: area.y, height: area.height, width: (arr[0]).offset().left - area.x});
        overLay.append(tmpElm);
        
        for(var i = 0; i < len; i++){
            
            var pos = (arr[i]).offset();
            var size = ((arr[i]).get && (arr[i]).get(0).nodeType === 1) ? getInnerSize($(arr[i])) : (arr[i]).size;
            
            //top
            tmpElm = $('<div class="' + cls + '"></div>');
            tmpElm.css({left: pos.left, top: area.y, height: pos.top, width: size.width});        
            overLay.append(tmpElm);
            
            //bottom
            tmpElm = $('<div class="' + cls + '"></div>');
            tmpElm.css({top: pos.top + size.height, left:  pos.left, height: area.height - pos.top - size.height, width: size.width});
            overLay.append(tmpElm);
            

            tmpElm = $('<div class="' + cls + '"></div>');

            tmpElm.css({top: area.y, left:  pos.left + size.width, height: area.height, width: ((arr[i+1])?(arr[i+1]).offset().left : (area.x + area.width)) - pos.left - size.width});
            overLay.append(tmpElm);
        }
        
    }else{
        var len = arr.length;
        var tmpElm = $('<div class="' + cls + '"></div>');
        tmpElm.css({left: area.x, top: area.y, width: area.width, height: (arr[0]).offset().top - area.y});
        overLay.append(tmpElm);
        
        for(var i = 0; i < len; i++){
            
            var pos = (arr[i]).offset();
            var size = ((arr[i]).get && (arr[i]).get(0).nodeType === 1) ? getInnerSize($(arr[i])) : (arr[i]).size;
            
            //left
            tmpElm = $('<div class="' + cls + '"></div>');
            tmpElm.css({left: area.x, top: pos.top, height: size.height, width: pos.left});        
            overLay.append(tmpElm);
            
            //right
            tmpElm = $('<div class="' + cls + '"></div>');
            tmpElm.css({top: pos.top, left:  pos.left + size.width, width: area.width - pos.left - size.width, height: size.height});
            overLay.append(tmpElm);
            
            //bottom
            tmpElm = $('<div class="' + cls + '"></div>');
            tmpElm.css({top: pos.top + size.height, left:  area.x, height: ((arr[i+1])?(arr[i+1]).offset().top : (area.y + area.height)) - pos.top - size.height, width: area.width});
            overLay.append(tmpElm);
        }
    }
    
    $('body').append(overLay);
    overLay.find('div').css({'background':"#000", zIndex: 7000, opacity: 0.7, position: "absolute"});
    
    return overLay;
};
  • 大小: 87.4 KB
  • 大小: 36.5 KB
分享到:
评论

相关推荐

    在浏览器窗口上添加遮罩层的方法

    如何在浏览器窗口上添加一个遮罩层 背景 在web2.0中,页面弹窗是一个很常见的交互... 实现 下面,我们一步步地实现一种较为简洁有效的遮罩层: Step 1: 首先我们要考虑定义一个遮挡浏览器窗口的div,考虑下面一段htm

    java源码包---java 源码 大量 实例

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    JAVA上百实例源码以及开源项目

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    JAVA上百实例源码以及开源项目源代码

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    java源码包2

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    java源码包3

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    java源码包4

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP   Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP   Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的...

    网页与Web程序设计 课件 ppt 机械工业出版社 part1

    15.1.1 创建逐帧动画的几种方法 284 15.1.2 制作过程 284 15.2 形状补间动画 287 15.2.1 创建形状补间动画的方法 287 15.2.2 制作过程 287 15.3 动作补间动画 288 15.3.1 创建动作补间动画的方法 288 15.3.2...

    flash shiti

    Flash 模拟试题及答案(一) 1.Loading应该放在影片的什麽位置? A. 影片不能有Loading B. 中间 C. 后面 D. 前面 2.Flash中设置属性的命令是? A. Set Polity B. Polity C. Property D. Set Property 3.Flash...

Global site tag (gtag.js) - Google Analytics