[js+css]点击隐藏层,点击另外层不能隐藏原层

针对“[js+css]点击隐藏层,点击另外层不能隐藏原层”的需求,需要用到JavaScript和CSS的结合。下面是实现这个效果的完整攻略:

步骤 1:HTML结构

首先,需要定义两个层,一个是要隐藏的层,一个是阻止隐藏的层。例如:

<div class="hide" id="hide-layer">这是要隐藏的层</div>
<div class="mask" id="mask-layer">这是阻止隐藏的层</div>

步骤 2:CSS样式

body{
    background: gray;
}

.hide {
    position: absolute;
    top: 0;
    background-color: #fff;
    border: 1px solid #ccc;
    max-width: 200px;
    z-index: 10;
}

.mask {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    background-color: transparent;
    z-index: 5;
} 

考虑如何控制这些样式的,需要使用 positionz-index 属性。为了让两个层都在可见范围内,给它们都设置了绝对定位。隐藏层设置了 z-index:10,阻止隐藏层设置了 z-index:5。因为 z-index 较大的元素将遮盖较小的元素,阻止隐藏的层 z-index 最小,所以优先显示。

步骤 3:JavaScript事件

要实现这个效果需要用到两个事件,一个用于隐藏层,另一个用于阻止隐藏。因为我们只希望在点击隐藏层之外的地方时才隐藏它,所以需要在文档上注册一个 mousedown 事件,它可以在点击的时候被触发。在点击事件时,可以通过检查所单击的元素是否是隐藏层或不需要隐藏的元素,在判断单击位置来决定是否隐藏目标层。

var mask = document.getElementById('mask-layer'),
    hide = document.getElementById('hide-layer');

mask.addEventListener('mousedown', function (event) {
    if (hide.style.display !== "none" && event.target === mask) {
        hide.style.display = "none";
    }
});

上面的代码可以在检测到单击时将隐藏层设置为 none,因此可以阻止它的显示。

示例 1

<!DOCTYPE html>
<html>
    <head>
        <title>点击隐藏层,点击另外层不能隐藏原层</title>
        <meta charset="utf-8">
        <style>
            body{
                background: gray;
            }

            .hide {
                position: absolute;
                top: 50%;
                left: 50%;
                margin: -50px 0 0 -50px;
                background-color: #fff;
                border: 1px solid #ccc;
                max-width: 200px;
                z-index: 10;
            }

            .mask {
                position: absolute;
                top: 0;
                left: 0;
                bottom: 0;
                right: 0;
                background-color: transparent;
                z-index: 5;
            } 
        </style>
    </head>
    <body>
        <div class="hide" id="hide-layer">这是要隐藏的层</div>
        <div class="mask" id="mask-layer">这是阻止隐藏的层</div>
        <script>
            var mask = document.getElementById('mask-layer'),
                hide = document.getElementById('hide-layer');

            mask.addEventListener('mousedown', function (event) {
                if (hide.style.display !== "none" && event.target === mask) {
                    hide.style.display = "none";
                }
            });
        </script>
    </body>
</html>

示例 2

<!DOCTYPE html>
<html>
    <head>
        <title>点击隐藏层,点击另外层不能隐藏原层</title>
        <meta charset="utf-8">
        <style>
            body{
                background: gray;
            }

            .hide {
                position: absolute;
                top: 50%;
                left: 50%;
                margin: -50px 0 0 -50px;
                background-color: #fff;
                border: 1px solid #ccc;
                max-width: 200px;
                z-index: 10;
            }

            .mask {
                position: absolute;
                top: 0;
                left: 0;
                bottom: 0;
                right: 0;
                background-color: transparent;
                z-index: 5;
            } 

            .button{
                background-color: red;
                color: white;
                padding: 10px 20px;
                margin: 20px;
            }
        </style>
    </head>
    <body>
        <div class="hide" id="hide-layer">这是要隐藏的层</div>
        <div class="mask" id="mask-layer">
            <div class="button">这个按钮不会隐藏层</div>
        </div>
        <script>
            var mask = document.getElementById('mask-layer'),
                hide = document.getElementById('hide-layer');

            mask.addEventListener('mousedown', function (event) {
                if (hide.style.display !== "none" && event.target === mask) {
                    hide.style.display = "none";
                }
            });
        </script>
    </body>
</html>

以上就是这个需求的完整攻略,希望对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:[js+css]点击隐藏层,点击另外层不能隐藏原层 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 在HTML文档中嵌入JavaScript的四种方法

    在HTML文档中嵌入JavaScript代码有以下四种方法: 方法一:直接在HTML文档中使用标签 可以直接在HTML文档中使用<script>标签将JavaScript代码嵌入到HTML文档中。一般情况下,将JavaScript代码放在<head>标签中或者在<body>标签底部都是较为常见和合适的做法。 示例: &lt…

    JavaScript 2023年5月18日
    00
  • js简单时间比较的方法

    首先,我们需要明确需求:在前端页面中,实现两个时间的比较,判断哪一个时间是更早或更晚。具体思路是将两个时间字符串转换成Date对象,然后比较两个Date对象的时间戳大小。 以下是具体实现步骤和示例说明: 步骤一:将时间字符串转换成Date对象 我们可以借助JS内置的Date对象来实现时间字符串到Date对象的转换,具体代码如下: let timeStr = …

    JavaScript 2023年5月27日
    00
  • javascript测试题练习代码

    我来为你详细讲解如何练习JavaScript测试题,并给出两条示例说明。 简介 练习JavaScript测试题,是学习JavaScript的必备环节。它可以帮助你积累知识,增强代码能力,提高解决问题的能力,还可以为你理解实际项目开发中的问题打下坚实的基础。 1. 掌握基础知识 在练习JavaScript测试题之前,你需要掌握基础知识。比如:变量、数据类型、函…

    JavaScript 2023年5月18日
    00
  • JavaScript Window 打开新窗口(window.location.href、window.open、window.showModalDialog)

    JavaScript Window 打开新窗口 有3种常用的JavaScript方法可以打开一个新窗口,它们分别是window.location.href、window.open和window.showModalDialog。接下来,我们将详细讲解它们的使用方法和区别。 window.location.href window.location.href 可以…

    JavaScript 2023年6月11日
    00
  • 整理JavaScript对DOM中各种类型的元素的常用操作

    整理JavaScript对DOM中各种类型的元素的常用操作攻略 DOM是文档对象模型(Document Object Model)的缩写,JavaScript通过DOM对HTML页面中的各种元素进行操作,从而实现动态网页效果。在DOM中,各种类型的元素均可以通过JavaScript进行操作。下面,我们将详细讲解如何使用JavaScript对DOM中各种类型的…

    JavaScript 2023年6月10日
    00
  • JS获取并处理php数组的方法实例分析

    作为网站的作者,我来为大家详细讲解一下 “JS获取并处理php数组的方法实例分析” 的攻略。 1. 什么是PHP数组? 在PHP中,数组(array)是一种保存一个或多个值的数据结构。它可以在一个单独的变量中存储多个值,并且这些值可以是不同的类型。 PHP数组是一个关联数组,它可以使用数字或字符串作为键来访问元素。 下面是一个简单的PHP数组示例,其中元素使…

    JavaScript 2023年5月19日
    00
  • js获取Get值的方法

    下面是关于“JS获取Get值的方法”的完整攻略: 什么是Get请求 在Web开发中,我们常常需要通过URL传输数据。传输的方式有两种,一种是GET请求,另一种是POST请求。其中,GET请求通常用于获取数据,POST请求则通常用于提交数据。在GET请求中,数据是通过URL传递的,因此可以通过解析URL中的参数来获取数据。 JS获取Get值的方法 在JavaS…

    JavaScript 2023年5月28日
    00
  • JavaScript实现页面跳转的几种常用方式

    下面是讲解“JavaScript实现页面跳转的几种常用方式”的完整攻略。 一、直接修改location.href属性 我们可以使用JavaScript代码直接修改当前页面的location.href属性,实现页面的跳转。示例代码如下: // 直接跳转到指定URL的页面 location.href = ‘https://www.example.com’; //…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部