javaScript蓝桥杯-----芝麻开门

这篇具有很好参考价值的文章主要介绍了javaScript蓝桥杯-----芝麻开门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、介绍

在阿里巴巴和四十大盗的故事中,阿里巴巴因为无意中知道了开门的咒语人生发生了翻天覆地的变化,四十大盗也因为咒语的泄露最终丧命。芝麻开门的咒语作为重要的信息推动着故事的发展。下面由你来为门设置这道机关,输入芝麻开门后才能放行。

二、准备

本题已经内置了初始代码,打开实验环境,目录结构如下:

    ├── index.css
    ├── index.html
    └── index.js

选中 index.html 右键启动 Web Server 服务(Open with Live Server),让项目运行起来。

接着,打开环境右侧的【Web 服务】,就可以在浏览器中看到如下效果:
javaScript蓝桥杯-----芝麻开门
点击页面上的“点击弹出对话框,输入咒语”按钮,无任何反应。

三、目标

找到 index.js 文件中的 mPrompt 函数,完成函数中的 TODO 部分。

  1. 点击“点击弹出对话框,输入咒语”按钮会调用 mPrompt 函数,mPrompt 调用后页面显示对话框。mPrompt 函数必须返回一个 promise 对象。
  2. 在对话框中的输入框中输入文字后,点击确认按钮,对话框消失, promise 返回成功,promise 成功的值为输入的值。
  3. 只有当成功的值为“芝麻开门”时门自动打开(已实现)。
  4. 点击取消,对话框消失,promise 返回失败,失败的值为 false。
  5. 对话框的显示隐藏请使用 DOM 节点的添加删除实现。

完成后,最终页面效果如下:
javaScript蓝桥杯-----芝麻开门

四、代码

index.css

* {
  margin: 0;
  padding: 0;
}

.wrapper {
  margin: 20px auto;
  width: 220px;
}

#door {
  display: flex;
  justify-content: center;
}

.doors {
  height: 150px;
  width: 100px;
  border: 2px solid #111;
  transition: all 1s;
}

.doors:nth-child(1) {
  border-right: 1px solid #111;
}
.doors:nth-child(2) {
  border-left: 1px solid #111;
}

.door-left {
  transform: translate(-20px, 0px) rotateY(50deg);
}
.door-right {
  transform: translate(20px, 0px) rotateY(50deg);
}

.btn {
  outline: none;
  cursor: pointer;
  background: #fff;
  border: 1px solid #dcdfe6;
  color: #666;
  border-radius: 4px;
}

.btn-large {
  padding: 12px 20px;
}

.btn-primary {
  color: #fff;
  background-color: #409eff;
  border-color: #409eff;
}

.btn-small {
  padding: 6px 10px;
}

.btn-success {
  color: #fff;
  background-color: #67c23a;
  border-color: #67c23a;
}

.btn-info {
  color: #fff;
  background-color: #909399;
  border-color: #909399;
}

.btn-warning {
  color: #fff;
  background-color: #e6a23c;
  border-color: #e6a23c;
}

.btn-danger {
  color: #fff;
  background-color: #f56c6c;
  border-color: #f56c6c;
}

.modal {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  background-color: #909090;
  opacity: 0.8;
}

.message-box {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  background-color: #fff;
  width: 350px;
  padding: 10px;
  opacity: 1;
}

.message-header {
  padding: 10px 0;
  text-align: center;
}

.message-body {
  padding: 15px 0;
  width: 100%;
}

input {
  -webkit-appearance: none;
  background-color: #fff;
  background-image: none;
  border-radius: 4px;
  border: 1px solid #dcdfe6;
  box-sizing: border-box;
  color: #606266;
  display: inline-block;
  font-size: inherit;
  height: 40px;
  line-height: 40px;
  outline: none;
  padding: 0 15px;
  transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
  width: 100%;
}

.message-footer {
  display: flex;
  justify-content: flex-end;
}

.message-footer button {
  margin-right: 10px;
}

index.html

<!DOCTYPE html>
<html lang="zh-CN">
  <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>
    <link rel="stylesheet" href="./index.css" />
    <script src="./index.js"></script>
  </head>

  <body>
    <div class="wrapper">
      <button class="btn btn-large">点击弹出对话框,输入咒语</button>
    </div>
    <div id="door">
      <div class="doors"></div>
      <div class="doors"></div>
    </div>
    <script>
      init();
    </script>
  </body>
</html>

index.js文章来源地址https://www.toymoban.com/news/detail-470673.html

const incantations = "芝麻开门";
function init(el) {
  document.querySelector(".wrapper .btn").addEventListener("click", () => {
    mPrompt()
      .then((res) => {
        if (res === incantations) {
          document
            .querySelectorAll("#door .doors")[0]
            .classList.add("door-left");
          document
            .querySelectorAll("#door .doors")[1]
            .classList.add("door-right");
        }
      })
      .catch((err) => {
        console.log(err);
      });
  });
}
/**
 * @description: 调用函数,开启弹窗,记录输入框的内容,并通过 promise 异步返回输入框中的内容
 * @return {Promise}
 */
function mPrompt() {
  // 弹窗必须使用以下结构 template 保存的是弹窗的结构字符串,可以先转化为 DOM 再通过 appendChild 方式插入到 body 中
  const template = `
        <div class="modal">
            <div class="message-box">
                <div class="message-header">请输入咒语</div>
                <div class="message-body">
                    <input type="text">
                </div>
                <div class="message-footer">
                    <button class="btn btn-small" id='cancel'>取消</button>
                    <button class="btn btn-small btn-primary" id='confirm'>确定</button>
                </div>
            </div>
        </div>
    `;
  const div = document.createElement("div");
  // TODO:待补充代码
}

五、完成

/**
 * @description: 调用函数,开启弹窗,记录输入框的内容,并通过 promise 异步返回输入框中的内容
 * @return {Promise}
 */
function mPrompt() {
  // 弹窗必须使用以下结构 template 保存的是弹窗的结构字符串,可以先转化为 DOM 再通过 appendChild 方式插入到 body 中
  const template = `
        <div class="modal">
            <div class="message-box">
                <div class="message-header">请输入咒语</div>
                <div class="message-body">
                    <input type="text">
                </div>
                <div class="message-footer">
                    <button class="btn btn-small" id='cancel'>取消</button>
                    <button class="btn btn-small btn-primary" id='confirm'>确定</button>
                </div>
            </div>
        </div>
    `;
  const div = document.createElement("div");
  const body = document.getElementsByTagName("body")[0];

  // TODO:待补充代码
  //mPrompt 函数必须返回一个 promise 对象。
  return new Promise((resolve, rejecet) => {
    div.innerHTML = template;
    body.appendChild(div);
    const confirm = document.getElementById("confirm");
    const cancel = document.getElementById("cancel");
    // resolve('ok')
    cancel.addEventListener("click", function () {
      //对话框消失消失
      div.remove();
      //promise返回失败 失败的值为false
      rejecet("false");
    });
    confirm.addEventListener("click", () => {
      //promise返回成功 返回值为输入的值
      const value = document.getElementsByTagName("input")[0].value;
      //对话框消失
      div.remove();
      resolve(value);
    });
  });
}

到了这里,关于javaScript蓝桥杯-----芝麻开门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java阿里巴巴代码规范

    想学习架构师构建流程请跳转:Java架构师系统架构设计 我们介绍了让代码规范的方案,下面我们就来说一下阿里的代码规范文档 1.1.1 反例 这种操作很容易产生难以排查的NPE异常 1.1.2 正例 入参以及出参,和参数传递类型是一致的 SimpleDateFormat 是线程不安全的类,一般不要定

    2024年02月10日
    浏览(85)
  • 阿里巴巴今年计划招聘15000人

    据媒体报道,阿里巴巴集团宣布将在2023年招聘15000名新员工,其中包括3000名校招人才。 这一消息的发布,也为最近关于淘宝天猫、阿里云、菜鸟、本地生活等业务裁员的谣言敲响了谣言的警钟。 阿里巴巴官微表示,“近日,关于淘宝天猫、阿里云、菜鸟、本地生活各个业务

    2024年02月06日
    浏览(77)
  • 钉钉小程序引用阿里巴巴图标

    2.打开的界面如图,先建一个iconfont.acss文件,全选浏览器打开的样式代码,复制粘贴进新建的iconfont.acss文件中 3.使用

    2024年02月11日
    浏览(58)
  • 阿里巴巴数字化转型的启示

    阿里巴巴(简称阿里)作为数字化转型的倡导者和先驱者, 率先成功实现了数字化转型。其成功转型带来的利好鼓舞了更多企业积极投身数字化,尤其是淘宝的数字化转型过程为其他企业提供了很多值得借鉴的经验,本文将对这些内容加以阐述。 01 淘宝的数据使用和数字化

    2024年02月04日
    浏览(67)
  • uniapp引入阿里巴巴矢量图标库

    首先:打开阿里巴巴矢量图标库 iconfont-阿里巴巴矢量图标库   2.注册账号并进行登录操作,如果已经有账号了直接进行登录操作 3.选择需要的图标,点击添加入库 4.点击购物车图标,查看添加入库的图标    输入项目名称,然后点击确认即可 5.点击生成代码  6.点击下载到本

    2024年01月17日
    浏览(65)
  • 【Java】阿里巴巴Java开发手册

    提示:仅供学习参考使用 阿里巴巴Java开发手册,在Java开发中尽可能的遵循开发规则,会对编码有很大的帮助哦~ 本文章内容为阿里巴巴集团技术部的技术分享,版权归阿里巴巴集团所有,仅供大家交流、学习及研究使用,禁止用于商业用途,违者必究! 【强制】 代码中的命

    2024年02月11日
    浏览(118)
  • 华为OD机考--阿里巴巴黄金箱

    贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子每个箱子上面贴有一个数字箱子中可能有一个黄金宝箱。 黄金宝箱满足排在它之前的所有箱子数字和等于排在它之后的所有箱子数字之和; 一个箱子左边部分的数字和定义为

    2024年02月14日
    浏览(63)
  • uniapp离线引入阿里巴巴图标

    阿里巴巴图标地址

    2024年02月16日
    浏览(70)
  • OpenVPN服务器,面试阿里巴巴

    四、OpenVPN****实验案例 说明: 实验需要三台设备,由于OpenVPN的服务端程序和客户端程序需要到网上下载,因此在此实验中VPN服务器和远程客户端需要具有上网功能。将虚拟交换机vmnet8改为nat模式,并设置网关为172.16.0.2。 VPN服务器: ens33连接企业内网vmnet1上 ip地址:192.168.

    2024年04月25日
    浏览(71)
  • 阿里巴巴达摩院通义千问【附申请链接】阿里版ChatGPT

    阿里云作为数一数二的全球云平台,阿里的大语言模型通义千问还是值得期待的,凭借强大的算力支持还是有机会赶上人工智能发展浪潮。 早前阿里巴巴达摩院关于人工智能机器人的研讨信息引起不少关注,当时达摩院也对比测试百度的文心一言。现在阿里巴巴自己的人工智

    2023年04月18日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包