JavaWeb(7)——前端综合案例1(面向对象)

news2024/10/6 18:24:08

一、需求 

JS进阶-day3-184-综合案例-模态框构造函数写法

 

 

二、 实现

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>面向对象封装消息提示</title>
  <style>
    .modal {
      width: 300px;
      min-height: 100px;
      box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
      border-radius: 4px;
      position: fixed;
      z-index: 999;
      left: 50%;
      top: 50%;
      transform: translate3d(-50%, -50%, 0);
      background-color: #fff;
    }

    .modal .header {
      line-height: 40px;
      padding: 0 10px;
      position: relative;
      font-size: 20px;
    }

    .modal .header i {
      font-style: normal;
      color: #999;
      position: absolute;
      right: 15px;
      top: -2px;
      cursor: pointer;
    }

    .modal .body {
      text-align: center;
      padding: 10px;
    }

    .modal .footer {
      display: flex;
      justify-content: flex-end;
      padding: 10px;
    }

    .modal .footer a {
      padding: 3px 8px;
      background: #ccc;
      text-decoration: none;
      color: #fff;
      border-radius: 2px;
      margin-right: 10px;
      font-size: 14px;
    }

    .modal .footer a.submit {
      background-color: #369;
    }
  </style>
</head>

<body>
<button id="delete">删除</button>
<button id="login">登录</button>

<!-- <div class="modal">
  <div class="header">温馨提示 <i>x</i></div>
  <div class="body">您没有删除权限操作</div>
</div> -->


<script>
  // 1.  模态框的构造函数
  function Modal(title = '', message = '') {
    // 公共的属性部分
    this.title = title
    this.message = message
    // 因为盒子是公共的
    // 1. 创建 一定不要忘了加 this
    this.modalBox = document.createElement('div')
    // 2. 添加类名
    this.modalBox.className = 'modal'
    // 3. 填充内容 更换数据
    this.modalBox.innerHTML = `
        <div class="header">${this.title} <i>x</i></div>
        <div class="body">${this.message}</div>
      `
    // console.log(this.modalBox)
  }
  // 2. 打开方法 挂载 到 模态框的构造函数原型身上
  Modal.prototype.open = function () {
    if (!document.querySelector('.modal')) {
      // 把刚才创建的盒子 modalBox  渲染到 页面中  父元素.appendChild(子元素)
      document.body.appendChild(this.modalBox)
      // 获取 x  调用关闭方法
      this.modalBox.querySelector('i').addEventListener('click', () => {
        // 箭头函数没有this 上一级作用域的this
        // 这个this 指向 m
        this.close()
      })
    }
  }
  // 3. 关闭方法 挂载 到 模态框的构造函数原型身上
  Modal.prototype.close = function () {
    document.body.removeChild(this.modalBox)
  }

  // 4. 按钮点击
  document.querySelector('#delete').addEventListener('click', () => {
    const m = new Modal('温馨提示', '您没有权限删除')
    // 调用 打开方法
    m.open()
  })

  // 5. 按钮点击
  document.querySelector('#login').addEventListener('click', () => {
    const m = new Modal('友情提示', '您还么有注册账号')
    // 调用 打开方法
    m.open()
  })

</script>
</body>

</html>

 三、代码优化

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>面向对象封装消息提示</title>
    <style>
        /* 按钮容器样式定义 */
        .button-container {
            display: flex; /* 设置容器为弹性布局 */
            justify-content: center; /* 将按钮水平居中对齐 */
            align-items: flex-start; /* 将按钮垂直顶部对齐 */
            margin-top: 20px; /* 设置容器与上方元素的垂直间距 */
        }

        /* 按钮样式定义 */
        button {
            background-color: #f3e330; /* 设置按钮背景颜色 */
            color: #090000; /* 设置按钮文字颜色 */
            margin-right: 10px; /* 设置按钮的右边距 */
            padding: 10px 20px; /* 设置按钮内边距 */
            border: 2px solid #efa75a; /* 设置按钮边框样式及颜色 */
            cursor: pointer; /* 设置鼠标悬停样式为手型 */
            border-radius: 5px; /* 设置按钮圆角 */
            font-size: 16px; /* 设置按钮文字大小 */
        }

        button:hover {
            background-color: #9668dc; /* 设置鼠标悬停时的按钮背景颜色 */
        }

        /* 模态框样式定义 */
        .modal {
            width: 300px;
            /* 模态框最小高度 */
            min-height: 100px;
            /* x 和 y 设置为 0,表示阴影不产生偏移,即在元素的中心位置。blur 设置为 10px,增加阴影的模糊程度,使其看起来更加柔和。
            color 使用 RGBA 格式,其中 rgba(0, 0, 0, 0.2) 表示黑色阴影,透明度为 0.2,使得阴影呈现半透明效果。*/
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
            border-radius: 4px;
            position: fixed;
            z-index: 999;
            left: 50%;
            top: 50%;
            transform: translate3d(-50%, -50%, 0);
            background-color: #fff;
            display: flex;
            flex-direction: column;
        }

        .modal .header {
            line-height: 40px;
            padding: 0 10px;
            position: relative;
            font-size: 20px;
            background-color: #9668dc;
            color: #fff;
            border-top-left-radius: 4px;
            border-top-right-radius: 4px;
        }

        .modal .header i {
            font-style: normal;
            color: #fff;
            position: absolute;
            right: 15px;
            top: -2px;
            cursor: pointer;
        }

        .modal .body {
            text-align: center;
            padding: 10px;
        }

        .modal .footer {
            display: flex;
            justify-content: flex-end;
            padding: 10px;
            border-top: 1px solid #ccc;
        }

        .modal .footer a {
            padding: 3px 8px;
            background: #ccc;
            text-decoration: none;
            color: #fff;
            border-radius: 2px;
            margin-right: 10px;
            font-size: 14px;
        }

        .modal .footer a.submit {
            background-color: #369;
        }

        /* 输入框样式定义 */
        input[type="text"],
        input[type="password"] {
            width: 100%;
            padding: 5px;
            margin-top: 10px;
        }
    </style>
</head>

<body>
<div class="button-container">
    <button id="delete">删除</button>
    <button id="login">登录</button>
    <button id="register">注册</button>
</div>

<script>
    // 定义了一个构造函数 Modal,用于创建模态框对象。构造函数接受两个参数 title 和 message,并将它们作为模态框的标题和消息内容。
    function Modal(title = '', message = '') {
        // 公共的属性部分
        this.title = title
        this.message = message
        // 创建 modalBox 元素 因为盒子是公共的
        this.modalBox = document.createElement('div')
        this.modalBox.className = 'modal'
        // 通过 innerHTML 属性设置 modalBox 的内部 HTML 内容,其中包含了标题和消息内容
        this.modalBox.innerHTML = `
        <div class="header">${this.title} <i>x</i></div>
        <div class="body">${this.message}</div>
      `
    }

    // 打开方法 挂载到模态框的构造函数原型身上
    Modal.prototype.open = function () {
        //在 Modal 的原型上定义了一个 open 方法,用于打开模态框。该方法会将 modalBox 添加到文档中,并添加一个关闭按钮的事件监听器。
        if (!document.querySelector('.modal')) {
            document.body.appendChild(this.modalBox)
            const closeButton = this.modalBox.querySelector('i')
            closeButton.addEventListener('click', () => {
                this.close()
            })
        }
    }
    // 在 Modal 的原型上定义了一个 close 方法,用于关闭模态框。该方法会将 modalBox 从文档中移除
    Modal.prototype.close = function () {
        document.body.removeChild(this.modalBox)
    }
    // 注册按钮点击处理函数
    document.querySelector('#register').addEventListener('click', () => {
        const modalContent = `
      <div class="header">注册 <i id="closeBtn">×</i></div>
      <div class="body">
        <input type="text" id="username" placeholder="请输入用户名" />
        <input type="password" id="password" placeholder="请输入密码" />
      </div>
      <div class="footer">
        <a class="submit" href="#">注册</a>
      </div>
    `
        const m = new Modal('', modalContent)
        m.open()

        const closeBtn = m.modalBox.querySelector('#closeBtn')
        closeBtn.addEventListener('click', () => {
            m.close()
        })
        const submitBtn = m.modalBox.querySelector('.submit')
        submitBtn.addEventListener('click', () => {
            const usernameInput = m.modalBox.querySelector('#username')
            const passwordInput = m.modalBox.querySelector('#password')
            const username = usernameInput.value.trim()
            const password = passwordInput.value.trim()

            if (username && password) {
                // 在此处判断注册逻辑
                // 假设已注册
                alert('注册成功!请登录')
                m.close()
            } else {
                alert('请输入用户名和密码')
            }
        })
    })
    // 登录按钮点击处理函数
    document.querySelector('#login').addEventListener('click', () => {
        const modalContent = `
      <div class="header">登录 <i id="closeBtn">×</i></div>
      <div class="body">
        <input type="text" id="username" placeholder="请输入用户名" />
        <input type="password" id="password" placeholder="请输入密码" />
      </div>
      <div class="footer">
        <a class="submit" href="#">登录</a>
      </div>
    `
        const m = new Modal('', modalContent)
        m.open()
        const closeBtn = m.modalBox.querySelector('#closeBtn')
        closeBtn.addEventListener('click', () => {
            m.close()
        })
        const submitBtn = m.modalBox.querySelector('.submit')
        submitBtn.addEventListener('click', () => {
            const usernameInput = m.modalBox.querySelector('#username')
            const passwordInput = m.modalBox.querySelector('#password')
            const username = usernameInput.value.trim()
            const password = passwordInput.value.trim()

            if (username && password) {
                // 在此处判断登录逻辑
                // 假设已注册且用户名密码匹配
                alert('登录通过')
                m.close()
            } else {
                alert('请输入用户名和密码')
            }
        })
    })
    // 删除按钮点击处理函数
    document.querySelector('#delete').addEventListener('click', () => {
        const m = new Modal('温馨提示', '您没有权限删除!')
        m.open()
    })
</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/819807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Meta AI研究团队新AI模型:Segment Anything图像分割任务

Segment Anything是Meta AI研究团队开发的一种新的AI模型&#xff0c;用于图像分割任务。该模型可以对任何图像中的任何对象进行分割&#xff0c;即将对象从图像中"剪切"出来。Segment Anything模型&#xff08;SAM&#xff09;是一个可提示的模型&#xff0c;可以根…

Linux常用命令——dpkg-preconfigure命令

在线Linux命令查询工具 dpkg-preconfigure Debian Linux中软件包安装之前询问问题 补充说明 dpkg-preconfigure命令用于在Debian Linux中软件包安装之前询问问题。 语法 dpkg-preconfigure(选项)(参数)选项 -f&#xff1a;选择使用的前端&#xff1b; -p&#xff1a;感兴…

我国科学家揭秘河蚌铰链耐疲劳的秘密

《科学》杂志发表了中国科学技术大学俞书宏院士团队联合吴恒安教授团队的研究成果。他们揭示了河蚌铰链耐疲劳的奥秘&#xff0c;并提出了一种耐疲劳材料设计的新思路。 在此次研究中&#xff0c;研究人员探明了河蚌铰链中折扇形组织的设计原理&#xff0c;发现这种生物组织在河…

【Redis】内存数据库 Redis 基础

目录 内存数据库Redis概念Redis 安装Redis的启动方式Redis命令行客户端 Redis通用命令Redis key结构Redis value数据类型String 和基础操作Hash 和基础操作List 和基础操作Set 和基础操作Sorted_set 和基础操作 Redis的Java客户端Jedis客户端SpringDataRedis客户端自定义RedisT…

Linux下 Docker容器引擎基础(1)

简述&#xff1a; Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。通过这种容器打包应用程序&#xff0c;意味着简化了重新部署、调试这些琐碎的重复工作&#xff0c;极大的提高了工作效率。例如&#xff1a;项目从腾讯云迁移阿…

机器学习-New Optimization

机器学习(New Optimization) 前言&#xff1a; 学习资料 videopptblog 下面的PPT里面有一些符号错误&#xff0c;但是我还是按照PPT的内容编写公式&#xff0c;自己直到符号表示什么含义就好了 Notation 符号解释 θ t \theta_t θt​第 t 步时&#xff0c;模型的参数 Δ L …

CSS图片放到<div>里面,自适应宽高全部显示,点击图片跳到新页面预览

有一个需求是图片放到一个固定宽高的<div>里面&#xff0c;不管是横图还是竖图&#xff0c;都要全部显示出来并且保持图片的长宽比例不变形&#xff0c;点击图片可以跳到一个新页面预览&#xff0c;代码如下&#xff1a; <!DOCTYPE html> <html> <head>…

第六次作业 密码学

发送者为Alice 接受者为Bob 首先对原始信息进行hash运算得到信息摘要&#xff0c;然后使用发送者Alice私钥进行签名&#xff08;签名的作用是验证该信息是Alice的&#xff09;&#xff0c;然后将原始信息数字签名Alice证书&#xff08;该Alice的证书是由CA组织进行办发的&…

YOLOV8改进:更换PoolFormer主干网络

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 2.涨点效果:添加PoolFormer主干,有效涨点。 论…

bigemap在工程项目行业里的应用案例

一、工程单位为什么要选择bigemap : 1.地图影像清晰&#xff0c;更新及时 2.能直接用软件做等高线地形图进行投影转换配合cad来使用 3.直接在线下载卫星图和高程节省测绘时间&#xff0c;以及手机端去做数据的采集&#xff0c;对工作有帮助 二、工程单位使用场景&#xff1a; …

Stable Diffusion AI绘画初学者指南【概述、云端环境搭建】

概述、云端环境搭建 Stable Diffusion 是什么、能干啥&#xff1f; 是一种基于深度学习的图像处理技术&#xff0c;可以生成高质量的图像。它可以在不需要真实图像的情况下&#xff0c;通过文字描述来生成逼真的图像。 可以对图像进行修复、超分辨率转换&#xff0c;将低分辨…

可以写进简历的kafka优化-----吞吐量提升一倍的方法

冲突 在看到项目工程里kafka 生产端配置的batch.size为500&#xff0c;而实际业务数据平均有1K大小的时候&#xff1b;我有点懵了。是的&#xff0c;这里矛盾了&#xff1b;莫非之前的作者认为这个batch.size是发送的条数&#xff0c;而不是kafka生产端内存缓存记录的大小&…

【数据结构】手撕排序NO.2----直接插入排序与希尔排序

目录 一. 导入 二. 直接插入排序 2.1 基本思想 2.2 过程分析 2.3 代码实现 2.4 复杂度/稳定性分析 三. 希尔排序(缩小增量排序) 3.1 基本思想 3.2 过程分析 3.3 代码实现 3.4 复杂度/稳定性分析 一. 导入 本期是排序篇的第二期&#xff0c;我们的主角是插入排序。在座的各…

提高电脑寿命的维护技巧与方法分享

在维护电脑运行方面&#xff0c;我有一些自己觉得非常有用的技巧和方法。下面我将分享一些我常用的维护技巧&#xff0c;并解释为什么我会选择这样做以及这样做的好处。 首先&#xff0c;我经常清理我的电脑内部的灰尘。电脑内部的灰尘会影响散热效果&#xff0c;导致电脑发热…

Nodejs 第五章(Npm run 原理)

npm run xxx 发生了什么 按照下面的例子npm run dev 举例过程中发生了什么 读取package json 的scripts 对应的脚本命令(dev:vite),vite是个可执行脚本&#xff0c;他的查找规则是&#xff1a; 先从当前项目的node_modules/.bin去查找可执行命令vite如果没找到就去全局的node…

C++模板初阶学习

目录 1.函数模板1.1函数模板概念1.2函数模板格式1.3函数模板的原理1.4函数模板实例化隐式实例化显示实例化 1.5模板参数适配原则 2.类模板2.1类模板的定义格式2.2类模板实例化 总结 1.函数模板 如何实现一个通用的交换函数呢&#xff1f; #include<iostream> using nam…

软件外包开发的JAVA开发框架

Java的开发框架有很多&#xff0c;以下是一些常见的Java开发框架及其特点&#xff0c;每个框架都有其特定的使用场景和优势&#xff0c;开发者可以根据项目的需求选择合适的框架。今天和大家介绍常见的框架及特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&…

Day50 算法记录| 动态规划 17(子序列)

这里写目录标题 647. 回文子串516.最长回文子序列总结 647. 回文子串 1.动态规划和2.中心扩展 这个视频是基于上面的视频的代码 方法1:动态规划 布尔类型的dp[i][j]&#xff1a;表示区间范围[i,j] &#xff08;注意是左闭右闭&#xff09;的子串是否是回文子串&#xff0c;如…

面向切面编程(SpringAOP)、通过注解实现AOP代码、AOP的工作流程

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 SpringAOP 一、AOP简介1.1连接点&#xff08;JoinPoint&am…

IntelliJ IDEA 2023.1.3 主菜单不见了

通过以下操作&#xff0c;去掉了勾&#xff0c;把主菜单玩没了 然后主菜单找半天都不知道怎么回来&#xff0c;下面记录找回来的过程 双击shift&#xff0c;在弹出的菜单里面搜索 "main menu"&#xff0c;在下图高亮位置选项改为 on