[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日

相关文章

  • js学习笔记之class类、super和extends关键词

    JS学习笔记之Class类、super和extends关键词攻略 介绍 在ES6之前,JavaScript是一门纯粹的面向对象语言,而没有类的概念,而是采用基于原型的继承方式。在ES6之后,JavaScript引入了Class类、super和extends关键词,使得JavaScript的面向对象变得更加完善。Class语法让JavaScript的对象声明,…

    JavaScript 2023年6月10日
    00
  • JavaScript高级程序设计 读书笔记之十 本地对象Date日期

    《JavaScript高级程序设计》第十章讲解了JavaScript中本地对象Date日期,是JavaScript中处理日期和时间的重要工具。下面是对这一章节的完整攻略。 一、日期时间的创建和实例化 在JavaScript中,可以使用new Date()创建一个日期对象。它会默认将当前时间作为日期时间的实例。也可以传入一个表示日期的字符串或者一个表示日期时间…

    JavaScript 2023年6月10日
    00
  • 基于JS实现带并发限制的异步调度器

    下面我将详细讲解“基于JS实现带并发限制的异步调度器”的完整攻略。 首先,我们需要明确“异步调度器”的定义。它是用于管理和控制异步任务执行的工具,常见的应用场景有批量请求处理、网络爬虫、图片下载等。为了避免过度并发导致系统资源的浪费,我们需要对任务的并发量进行限制,这就需要实现一个带并发限制的异步调度器。 接下来,我们将介绍如何利用JavaScript实现带…

    JavaScript 2023年6月11日
    00
  • 如何使Chrome控制台支持多行js模式——意外发现

    下面是讲解“如何使Chrome控制台支持多行js模式——意外发现”的完整攻略: 1. 问题描述 当我们在Chrome控制台输入多行的JavaScript代码时,按下回车键后会将当前行代码执行。如果我们输入多行代码,需要将所有输入的代码都复制到单行去将它们一起执行。这不仅耗时,操作起来也不太方便。那么有没有办法支持多行JavaScript模式呢? 2. 解决方…

    JavaScript 2023年6月11日
    00
  • 父元素与子iframe相互获取变量和元素对象的具体实现

    实现父元素与子iframe相互获取变量和元素对象,可以通过两种方法来实现: 父元素获取子iframe中的变量和元素对象 通过JavaScript中的window对象可以获取和控制iframe中的变量和元素对象。首先要获取到子iframe的window对象,即子页面的全局window对象,然后通过该对象获取到iframe中需要的变量和元素对象。 示例1:获取子…

    JavaScript 2023年6月10日
    00
  • js与jquery回车提交的方法

    下面详细讲解js与jQuery回车提交的方法的完整攻略。 什么是回车提交 回车提交是指用户在输入框内输入内容后按下键盘上的回车键,就会自动提交表单或执行相应的操作,而不需要再点击提交按钮。在表单或查询页面中,这是一种很方便的操作方式。 JavaScript回车提交 Javascript可以通过监听页面上的键盘操作,并且每次键盘按下事件被触发时执行代码。利用这…

    JavaScript 2023年6月11日
    00
  • JS中数组实现代码(倒序遍历数组,数组连接字符串)

    JS中数组实现代码——倒序遍历数组与数组连接字符串 在JavaScript中,数组是一种非常常用的数据类型。它可以用来存储多个数据,并且可以进行各种操作。本文将介绍如何通过JavaScript中的数组实现倒序遍历数组和数组连接字符串。 倒序遍历数组 倒序遍历数组就是按照数组中元素的倒序,依次对每个元素进行操作。在JavaScript中,我们可以使用for循环…

    JavaScript 2023年5月27日
    00
  • javascript向flash swf文件传递参数值注意细节

    让我们详细讲解“javascript向flash swf文件传递参数值注意细节”的攻略。 1. 基本概念 在传递参数之前,我们需要了解一些关于Flash与JavaScript之间交互的基本概念。 Flash对于JavaScript的支持 Flash支持通过JavaScript调用Flash中的方法(ExternalInterface.call),以及在Fla…

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