`

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

 
阅读更多
最近在做书途网新手引导的时候,需要做在半遮罩层上开几个高亮的区域,左思右想,除了设置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
分享到:
评论

相关推荐

    iframe弹出框遮罩父类页面

    在网页开发中,有时我们需要实现一个功能,即在iframe中打开一个新的弹出窗口,并且这个弹出窗口能够遮罩住其父级页面,提供一种更好的用户体验。标题"iframe弹出框遮罩父类页面"正是关于这个技术点的讨论。在描述中...

    记录页面停留时间和遮罩层

    以下是一个简单的实现方法: 1. 当用户打开一个页面时,可以在`window.onload`事件中设置一个变量`startTime`记录当前时间。 2. 同时,监听`window.beforeunload`或`window.unload`事件,当用户离开页面时,触发...

    js 弹出窗口 弹出div window 支持遮罩、拖动、嵌入页面、换肤等实用功能

    JavaScript是一种广泛应用于网页和应用程序开发的脚本语言,它的弹出窗口功能经常被用来创建交互式的用户界面。在本文中,我们将深入探讨如何利用JavaScript实现一个弹出div窗口,包括支持遮罩、拖动、嵌入页面和...

    html5全屏响应式打开窗口遮罩动画特效.zip

    HTML5全屏响应式打开窗口遮罩动画特效是一种在网页设计中常见的交互体验技术,它结合了HTML5、CSS3和JavaScript(尤其是jQuery)的优势,为用户提供了一种优雅且吸引人的展示方式。在这个压缩包中,包含的文件很可能...

    web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开

    遮罩层是一种常见的UI设计元素,用于暂时隐藏页面的其他部分,突出显示某个特定区域或信息。在本例中,遮罩层覆盖整个Web页面,引导用户注意到右上角的提示按钮。通常,遮罩层会具有半透明效果,允许用户看到页面...

    各种功能的弹出窗口 带遮罩层/不带带遮罩层

    弹出窗口是一种在主界面之外打开的独立窗口,它通常用于显示额外信息或进行特定交互。常见的弹出窗口类型包括警告对话框、确认对话框、输入框等。弹出窗口的优点在于可以避免用户离开当前工作流程,同时突出显示重要...

    C# 弹出Loading遮罩层

    遮罩层是一种用户界面设计元素,用于在主界面之上覆盖一层半透明或全黑的背景,用于突出显示某个特定区域或显示加载状态,防止用户在等待过程中误操作其他部分。在Web开发中,这通常通过CSS和JavaScript实现;而在...

    JS可拖动窗口控件,可实现各种DIV窗口自定义及各种DIV弹出提示框 带遮罩层的DIV窗口/对话框控件 js javascript 对话框

    本资源提供了一种解决方案,它是一个基于JavaScript和CSS的可定制对话框控件,允许开发者创建具有遮罩层效果的浮动窗口,以增强用户体验。 首先,"可拖动窗口控件"是指用户可以通过鼠标在页面上拖动窗口的位置,这...

    lhgdialog弹出层,遮罩层效果源码示例

    遮罩层通常用于在弹出层出现时覆盖整个网页,给用户一种聚焦和隔离的感觉。它降低了用户对背景内容的关注度,使弹出层成为焦点。lhgdialog提供了带遮罩层的弹出层效果,可以设置遮罩层的透明度和颜色,以达到理想的...

    用js+iframe形成页面的一种遮罩效果的具体实现

    在网页开发中,有时我们需要创建一种遮罩效果,以达到半透明覆盖层的效果,用于突出显示特定区域或者加载等待界面。本篇将详细介绍如何利用...这个实现方法简洁而实用,可以广泛应用于各种需要页面遮罩效果的场景。

    JavaScript弹出遮罩层

    JavaScript弹出遮罩层是一种常见的前端交互设计,用于在网页上创建一个半透明的覆盖层,通常用于显示警告、提示信息或加载等待效果。在这个场景中,我们看到一个经过修改的遮罩层实现,它可以通过链接触发,并指定弹...

    Jquery遮罩层组件

    在网页开发中,遮罩层(Mask Layer)是一种常见且实用的设计元素,用于创建弹出式窗口、加载指示器或者提示信息,以达到吸引用户注意力或阻断背景交互的效果。jQuery 道具库提供了一款名为 "Jquery-reveal" 的遮罩层...

    baidupopup最好的遮罩效果

    在网页设计和开发中,"遮罩效果"是一种常见的视觉技术,用于在页面上创建半透明或全透明的覆盖层,以突出显示特定内容或执行某些交互操作。"baidupopup"可能指的是百度公司使用的一种弹出窗口或提示框,这种窗口在...

    js形成页面的一种遮罩效果实例代码

    本文主要介绍使用JavaScript(简称js)和jQuery库来实现页面遮罩效果的实例代码,这种方式非常灵活且易于实现。 首先需要了解的是,实现遮罩效果的关键在于对页面元素的显示和隐藏进行控制。在本实例中,我们使用了...

    遮罩层 jQuery+CSS

    遮罩层在网页设计中是一种常见的交互元素,用于在页面上创建一个半透明或全透明的覆盖层,以便在用户与特定内容交互时提供一种视觉焦点或者阻止背景内容的交互。在这个“jQuery+CSS写的打开和关闭遮罩层”主题中,...

    弹出窗口并且此窗口带有半透明的遮罩层效果

    遮罩层通常用来覆盖整个页面,给人一种视觉上的阻隔感,而弹出窗口则会在页面中央显示具体的内容。 HTML部分定义了页面的基本结构,包括一个触发弹出窗口的链接、弹出窗口本身以及遮罩层。`id`属性被用来在...

    多种JS遮罩层特效欢迎下载

    在网页设计中,遮罩层特效是一种常见的交互元素,它可以在用户与页面交互时创建出吸引人的视觉效果。本资源包含四种JS遮罩层库:GreyBox v5.53、Lightbox Gone Wild、litebox-2.4,这些工具可以帮助开发者轻松实现...

    在html页面中弹出子页面效果

    在HTML页面中实现弹出子页面的效果是一种常见的交互设计,常用于展示详细信息、弹窗确认操作或提供附加功能。这种效果通常是通过JavaScript或者相关的库如jQuery来实现的。Struts1是一个较老的Java Web框架,它允许...

    旅游网鼠标悬停图片从左到右滑出遮罩效果jQuery代码

    在这个效果中,遮罩层从左侧滑出,可能是为了模拟一种开窗或揭示的感觉。 4. **HTML结构**:`index.html`文件包含了网页的基本结构,包括用于显示图片和遮罩层的HTML元素。这些元素可能包括`&lt;img&gt;`标签和一个用于...

Global site tag (gtag.js) - Google Analytics