javaScript蓝桥杯----年度明星项⽬

news2024/11/30 4:59:23

目录

  • 一、介绍
  • 二、准备
  • 三、⽬标
  • 四、代码
  • 五、完成


一、介绍

作为前端开发的主⼒语⾔, JavaScript 相关的开源项⽬是每⼀个前端开发者都应该多多关注的。我们可以通过这⼀年新增 star 的数量来判断⼀个开源项⽬的流⾏趋势。
本题请实现⼀个展示 2022 年 JavaScript 明星开源项⽬数据的⽹⻚。

二、准备

开始答题前,需要先打开本题的项⽬代码⽂件夹,⽬录结构如下:

├── css
│ └── style.css
├── effect.gif
├── images
├── index.html
└── js
├── all-data.json
├── index.js
├── jquery-3.6.0.min.js
└── translation.json

其中:

  • css/style.css 是样式⽂件。
  • index.html 是主⻚⾯。
  • images 是图⽚⽂件夹。
  • js/all-data.json 是项⽬数据⽂件。
  • js/index.js 是需要补充代码的 js ⽂件。
  • js/jquery-3.6.0.min.js 是 jQuery 库⽂件。
  • js/translation.json 是⻚⾯所⽤到的翻译数据。
  • effect.gif 是⻚⾯最终的效果图。

在浏览器中预览 index.html ⻚⾯效果如下:
在这里插入图片描述

三、⽬标

请在 js/index.js ⽂件中补全代码,具体需求如下:

  1. 在⻚⾯初始化时使⽤ AJAX 请求地址为 ./js/all-data.json 以及 ./js/translation.json ⽂
    件中的数据(必须使⽤给定的路径请求,否则可能会请求不到数据),并将后者中的数据保存⾄translation 变量中。其中 all-data.json ⽂件中以数组的形式存储了明星项⽬的数据, translation.json ⽂件中包含了⽹站中英⽂转换所需的数据。

all-data.json 数据参数说明:

在这里插入图片描述

  1. ⻚⾯初始化时利⽤ createProjectItem 函数创建前 15 个项⽬数据(即 all-data.json 数组中的前 15 项)的列表元素并加载到⻚⾯中。当⽤户点击 加载更多 按钮时,则按顺序再显示 15 个项⽬数据。直到所有项⽬数据都展示完毕(共 60 个)。所有项⽬展示完毕后需要隐藏 加载更多 按钮。

项⽬展示效果如图所示:

在这里插入图片描述

  1. 当⽤户点击⻚⾯右上⽅的中英⽂切换按钮时,根据⽤户的选择改变项⽬描述使⽤的语⾔(不改变原有项⽬展示数量)。当⽤户选择英语模式时的项⽬展示效果如图所示:

在这里插入图片描述

最终效果可参考⽂件夹下⾯的 gif 图,图⽚名称为 effect.gif(提示:可以通过 VS Code 或者浏览器预览gif 图⽚)。
在这里插入图片描述

四、代码

index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>年度明星项目</title>
    <meta
      name="viewport"
      content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"
    />
    <script
      src="js/jquery-3.6.0.min.js"
      type="text/javascript"
      charset="utf-8"
    ></script>
    <link rel="stylesheet" type="text/css" href="css/style.css" />
  </head>

  <body>
    <div class="container">
      <div class="head">
        <header>
          <h1>JavaScript明星项目</h1>
          <div class="lang">English</div>
        </header>
      </div>
      <div class="banner">2022 年 JavaScript 明星项目</div>
      <div class="intro">
        <p>欢迎来到2022 JavaScript明星项目网站!</p>
        <p>
          在这里,我们将对过去 12 个月里 JavaScript 生态中的趋势性项目做一个总结。今年的冠军是一个带有微笑标志的美味面包,用微笑开启新的一年是不错的开始!
        </p>
        <hr />
        <p class="small">
          下面的列表中展示了各个项目在 GitHub 上于过去 12 个月新增的 star 数量。分析的数据来源为 Best of JS 网站 ,一个 web 领域优秀项目的精选网站。
        </p>
      </div>
      <div class="list">
        <h2>最受欢迎项目</h2>
        <ul></ul>
        <div class="load-more">加载更多</div>
      </div>
    </div>
    <script src="js/index.js"></script>
  </body>
</html>

js/all-data.json

[
  {
    "icon": "bun.svg",
    "descriptionEN": "Incredibly fast JavaScript runtime, bundler, transpiler and package manager...",
    "descriptionCN": "令人难以置信的快速 JavaScript 运行时、打包器、转译器和包管理器……",
    "name": "Bun",
    "stars": 37087,
    "tags": ["runtime", "bun"]
  },
  {
    "icon": "tauri.svg",
    "descriptionEN": "Build smaller, faster, and more secure desktop applications with a web fron...",
    "descriptionCN": "使用 Web 前端构建更小、更快和更安全的桌面应用程序...",
    "name": "Tauri",
    "stars": 29820,
    "tags": ["desktop"]
  },
  {
    "icon": "tech-interview.svg",
    "descriptionEN": "Curated coding interview preparation materials for busy software engineers",
    "descriptionCN": "为忙碌的软件工程师精心策划的编码面试准备材料",
    "name": "Tech Interview Handbook",
    "stars": 21386,
    "tags": ["learning"]
  },
  {
    "icon": "react.svg",
    "descriptionEN": "A declarative, efficient, and flexible JavaScript library for building user...",
    "descriptionCN": "一个声明式的、高效的、灵活的 JavaScript 库,用于构建用户...",
    "name": "React",
    "stars": 19784,
    "tags": ["framework", "vdom", "react"]
  },
  {
    "icon": "nextjs.svg",
    "descriptionEN": "The React Framework",
    "descriptionCN": "响应式框架",
    "name": "Next.js",
    "stars": 19488,
    "tags": [
      "nodejs-framework",
      "ssg",
      "prefetch",
      "react",
      "universal",
      "nextjs"
    ]
  },
  {
    "icon": "trpc.svg",
    "descriptionEN": "Move Fast and Break Nothing. End-to-end typesafe APIs made easy.",
    "descriptionCN": "快速行动,打破一切。端到端类型安全 API 变得简单。",
    "name": "tRPC",
    "stars": 15832,
    "tags": [
      "nodejs-framework",
      "react",
      "universal",
      "rpc",
      "websocket",
      "data"
    ]
  },
  {
    "icon": "vite.svg",
    "descriptionEN": "Next generation frontend tooling. It's fast!",
    "descriptionCN": "下一代前端工具。它很快!",
    "name": "Vite",
    "stars": 15434,
    "tags": ["build", "vite"]
  },
  {
    "icon": "astro.svg",
    "descriptionEN": "A website build tool for the modern web — powerful developer experience mee...",
    "descriptionCN": "适用于现代网络的网站构建工具——强大的开发人员体验...",
    "name": "Astro",
    "stars": 15412,
    "tags": ["ssg", "fullstack", "astro"]
  },
  {
    "icon": "js.svg",
    "descriptionEN": "A book series on JavaScript",
    "descriptionCN": "关于 JavaScript 的系列丛书",
    "name": "You Don't Know JS",
    "stars": 14997,
    "tags": ["learning", "book"]
  },
  {
    "icon": "vscode.svg",
    "descriptionEN": "Visual Studio Code",
    "descriptionCN": "VSCode代码",
    "name": "VS Code",
    "stars": 14958,
    "tags": ["ide"]
  },
  {
    "icon": "playwright.svg",
    "descriptionEN": "A framework for Web Testing and Automation. It allows testing Chromium, Firefox...",
    "descriptionCN": "Web 测试和自动化的框架。它允许测试 Chromium、Firefox...",
    "name": "Playwright",
    "stars": 14329,
    "tags": ["auto", "test"]
  },
  {
    "icon": "tabby.svg",
    "descriptionEN": "A terminal for a more modern age",
    "descriptionCN": "更现代的终端",
    "name": "Tabby",
    "stars": 14066,
    "tags": ["cli"]
  },
  {
    "icon": "turborepo.svg",
    "descriptionEN": "Incremental bundler and build system optimized for JavaScript and TypeScrip...",
    "descriptionCN": "针对 JavaScript 和 TypeScript 优化的增量捆绑器和构建系统......",
    "name": "Turborepo",
    "stars": 13744,
    "tags": ["build", "monorepo", "scaffolding", "caching"]
  },
  {
    "icon": "qwik.svg",
    "descriptionEN": "The HTML-first framework. Instant apps of any size with ~ 1kb JS",
    "descriptionCN": "HTML优先的框架。任何大小的即时应用程序,约 1kb JS",
    "name": "Qwik",
    "stars": 13005,
    "tags": ["framework", "universal", "vite"]
  },
  {
    "icon": "mantine.svg",
    "descriptionEN": "React components library with native dark theme support",
    "descriptionCN": "具有原生深色主题支持的 React 组件库",
    "name": "Mantine",
    "stars": 12980,
    "tags": ["component", "react"]
  },
  {
    "icon": "tailwindcss.svg",
    "descriptionEN": "A utility-first CSS framework for rapid UI development.",
    "descriptionCN": "用于快速 UI 开发的实用程序优先 CSS 框架。",
    "name": "Tailwind CSS",
    "stars": 11860,
    "tags": ["css-lib", "atomic-css", "tailwind"]
  },
  {
    "icon": "docusaurus.svg",
    "descriptionEN": "Easy to maintain open source documentation websites.",
    "descriptionCN": "易于维护的开源文档网站。",
    "name": "Docusaurus",
    "stars": 11353,
    "tags": ["doc", "react", "ssg"]
  },
  {
    "icon": "solid.svg",
    "descriptionEN": "A declarative, efficient, and flexible JavaScript library for building user...",
    "descriptionCN": "一个声明式的、高效的、灵活的 JavaScript 库,用于构建用户...",
    "name": "Solid",
    "stars": 11060,
    "tags": ["reactive", "framework", "solid"]
  },
  {
    "icon": "zod.svg",
    "descriptionEN": "TypeScript-first schema validation with static type inference",
    "descriptionCN": "使用静态类型推断的 TypeScript 优先模式验证",
    "name": "Zod",
    "stars": 11041,
    "tags": ["validation", "types", "schema"]
  },
  {
    "icon": "remix.svg",
    "descriptionEN": "Build Better Websites. Create modern, resilient user experiences with web f...",
    "descriptionCN": "建立更好的网站。使用 Web f... 创建现代、有弹性的用户体验",
    "name": "Remix",
    "stars": 10793,
    "tags": ["fullstack", "nodejs-framework", "react"]
  },
  {
    "icon": "threejs.svg",
    "descriptionEN": "JavaScript 3D Library.",
    "descriptionCN": "JavaScript 3D 库。",
    "name": "Three.js",
    "stars": 10449,
    "tags": ["3d"]
  },
  {
    "icon": "typescript.svg",
    "descriptionEN": "A superset of JavaScript that compiles to clean JavaScript output.",
    "descriptionCN": "一个 JavaScript 的超集,可以编译为干净的 JavaScript 输出。",
    "name": "TypeScript",
    "stars": 10279,
    "tags": ["compiler", "types"]
  },
  {
    "icon": "svelte.svg",
    "descriptionEN": "Cybernetically enhanced web apps",
    "descriptionCN": "控制论增强的 Web 应用程序",
    "name": "Svelte",
    "stars": 10007,
    "tags": ["framework", "svelte"]
  },
  {
    "icon": "nest.svg",
    "descriptionEN": "A progressive Node.js framework for building efficient, scalable, and enter...",
    "descriptionCN": "一个渐进的 Node.js 框架,用于构建高效、可扩展和输入...",
    "name": "Nest",
    "stars": 9913,
    "tags": ["nodejs-framework", "microservice"]
  },
  {
    "icon": "vue.svg",
    "descriptionEN": "A progressive, incrementally-adoptable framework for building UI on the web",
    "descriptionCN": "用于在 Web 上构建 UI 的渐进式、可增量采用的框架",
    "name": "Vue.js 2",
    "stars": 9588,
    "tags": ["framework", "vdom", "vue"]
  },
  {
    "icon": "material-ui.svg",
    "descriptionEN": " A robust, customizable, and accessible library of foundational and advance...",
    "descriptionCN": "一个强大的、可定制的、可访问的基础和高级库……",
    "name": "MUI",
    "stars": 9580,
    "tags": ["material", "react", "component", "design-system"]
  },
  {
    "icon": "fresh.svg",
    "descriptionEN": "The next-gen web framework.",
    "descriptionCN": "下一代网络框架。",
    "name": "Fresh",
    "stars": 9425,
    "tags": ["fullstack", "deno"]
  },
  {
    "icon": "strapi.svg",
    "descriptionEN": "The leading open-source headless CMS. It’s 100% JavaScript, fully customiza...",
    "descriptionCN": "领先的开源无头 CMS。它是 100% JavaScript,完全定制......",
    "name": "Strapi",
    "stars": 8841,
    "tags": ["nodejs-framework", "cms"]
  },
  {
    "icon": "prisma.svg",
    "descriptionEN": "Next-generation ORM for Node.js & TypeScript | PostgreSQL, MySQL, MariaDB, ...",
    "descriptionCN": "用于 Node.js 和 TypeScript 的下一代 ORM | PostgreSQL、MySQL、MariaDB……",
    "name": "Prisma",
    "stars": 8756,
    "tags": ["orm", "sql", "mongodb"]
  },
  {
    "icon": "nodejs.svg",
    "descriptionEN": "Node.js JavaScript runtime",
    "descriptionCN": "Node.js JavaScript 运行时",
    "name": "Node.js",
    "stars": 8368,
    "tags": ["runtime"]
  },
  {
    "icon": "storybook.svg",
    "descriptionEN": "A frontend workshop for building UI components and pages in isolation. Made...",
    "descriptionCN": "用于单独构建 UI 组件和页面的前端研讨会。制作...",
    "name": "Storybook",
    "stars": 7958,
    "tags": ["playground", "test", "react", "vue", "angular"]
  },
  {
    "icon": "vue.svg",
    "descriptionEN": "A progressive, incrementally-adoptable JavaScript framework for building UI...",
    "descriptionCN": "用于构建 UI 的渐进式、可逐步采用的 JavaScript 框架......",
    "name": "Vue.js 3",
    "stars": 7956,
    "tags": ["vue", "framework"]
  },
  {
    "icon": "axios.svg",
    "descriptionEN": "Promise based HTTP client for the browser and node.js",
    "descriptionCN": "用于浏览器和 node.js 的基于 Promise 的 HTTP 客户端",
    "name": "Axios",
    "stars": 7739,
    "tags": ["http"]
  },
  {
    "icon": "deno.svg",
    "descriptionEN": "A modern runtime for JavaScript and TypeScript.",
    "descriptionCN": "适用于 JavaScript 和 TypeScript 的现代运行时。",
    "name": "Deno",
    "stars": 7525,
    "tags": ["runtime", "types", "deno"]
  },
  {
    "icon": "react-hook-form.svg",
    "descriptionEN": "React Hooks for form state management and validation (Web + React Native)",
    "descriptionCN": "用于表单状态管理和验证的 React Hooks(Web + React Native)",
    "name": "React Hook Form",
    "stars": 7366,
    "tags": ["form", "react"]
  },
  {
    "icon": "chakra-ui.svg",
    "descriptionEN": "Simple, Modular & Accessible UI Components for your React Applications",
    "descriptionCN": "用于 React 应用程序的简单、模块化和可访问的 UI 组件",
    "name": "Chakra UI",
    "stars": 7356,
    "tags": ["component", "react", "access", "atomic-css"]
  },
  {
    "icon": "angular.svg",
    "descriptionEN": "The modern web developer’s platform",
    "descriptionCN": "现代网络开发者平台",
    "name": "Angular",
    "stars": 7059,
    "tags": ["framework", "angular"]
  },
  {
    "icon": "slidev.svg",
    "descriptionEN": "Presentation Slides for Developers",
    "descriptionCN": "面向开发人员的演示幻灯片",
    "name": "Slidev",
    "stars": 7035,
    "tags": ["presentation", "vue"]
  },
  {
    "icon": "nuxt.svg",
    "descriptionEN": "The Intuitive Web Framework, based on Vue 3.",
    "descriptionCN": "基于 Vue 3 的直观 Web 框架。",
    "name": "Nuxt 3",
    "stars": 7027,
    "tags": ["vue", "nodejs-framework", "universal", "ssg"]
  },
  {
    "icon": "vueelementadmin.png",
    "descriptionEN": "A magical vue admin",
    "descriptionCN": "一个神奇的 vue 管理员",
    "name": "Vue Element Admin",
    "stars": 6789,
    "tags": ["vue", "dashboard"]
  },
  {
    "icon": "ant.svg",
    "descriptionEN": "An enterprise-class UI design language and React UI library",
    "descriptionCN": "企业级 UI 设计语言和 React UI 库",
    "name": "Ant Design",
    "stars": 6786,
    "tags": ["component", "react", "design-system"]
  },
  {
    "icon": "react-native.svg",
    "descriptionEN": "A framework for building native applications using React",
    "descriptionCN": "使用 React 构建本机应用程序的框架",
    "name": "React Native",
    "stars": 6504,
    "tags": ["mobile", "react-native"]
  },
  {
    "icon": "cypress.svg",
    "descriptionEN": "Fast, easy and reliable testing for anything that runs in a browser.",
    "descriptionCN": "对在浏览器中运行的任何内容进行快速、简单和可靠的测试。",
    "name": "Cypress",
    "stars": 6392,
    "tags": ["test", "auto"]
  },
  {
    "icon": "bootstrap.svg",
    "descriptionEN": "The most popular HTML, CSS, and JavaScript framework for developing respons...",
    "descriptionCN": "最流行的 HTML、CSS 和 JavaScript 框架,用于开发响应...",
    "name": "Bootstrap",
    "stars": 6359,
    "tags": ["css-lib", "bootstrap"]
  },
  {
    "icon": "swc.svg",
    "descriptionEN": "A super-fast compiler written in rust",
    "descriptionCN": "用 Rust 编写的超快编译器",
    "name": "swc",
    "stars": 6213,
    "tags": ["compiler", "build"]
  },
  {
    "icon": "frontendchecklist.jpg",
    "descriptionEN": "The perfect Front-End Checklist for modern websites and meticulous develope...",
    "descriptionCN": "适用于现代网站和精心开发的完美前端清单......",
    "name": "Front-End Checklist",
    "stars": 5956,
    "tags": ["learning"]
  },
  {
    "icon": "nx.svg",
    "descriptionEN": "Smart, Fast and Extensible Build System",
    "descriptionCN": "智能、快速和可扩展的构建系统",
    "name": "Nx",
    "stars": 5921,
    "tags": ["monorepo", "build", "scaffolding", "react", "angular"]
  },
  {
    "icon": "headlessui.svg",
    "descriptionEN": "Completely unstyled, fully accessible UI components, designed to integrate ...",
    "descriptionCN": "完全无样式、完全可访问的 UI 组件,旨在集成...",
    "name": "Headless UI",
    "stars": 5912,
    "tags": ["react", "vue", "component", "headless", "tailwind"]
  },
  {
    "icon": "puppeteer.svg",
    "descriptionEN": "Headless Chrome Node.js API",
    "descriptionCN": "无头 Chrome Node.js API",
    "name": "Puppeteer",
    "stars": 5906,
    "tags": ["auto"]
  },
  {
    "icon": "cra.svg",
    "descriptionEN": "Set up a modern web app by running one command.",
    "descriptionCN": "通过运行一个命令来设置现代 Web 应用程序。",
    "name": "Create React App",
    "stars": 5724,
    "tags": ["boilerplate", "react", "serviceworker"]
  },
  {
    "icon": "electron.svg",
    "descriptionEN": "Build cross-platform desktop apps with JavaScript, HTML, and CSS",
    "descriptionCN": "使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用程序",
    "name": "Electron",
    "stars": 5682,
    "tags": ["desktop"]
  },
  {
    "icon": "unocss.svg",
    "descriptionEN": "The instant on-demand atomic CSS engine.",
    "descriptionCN": "即时按需原子 CSS 引擎。",
    "name": "UnoCSS",
    "stars": 5472,
    "tags": ["css-in-js", "atomic-css"]
  },
  {
    "icon": "vitest.svg",
    "descriptionEN": "A Vite-native test framework. It's fast!",
    "descriptionCN": "一个 Vite-native 测试框架。它很快!",
    "name": "Vitest",
    "stars": 5304,
    "tags": ["test-framework", "test", "vue", "react", "vite"]
  },
  {
    "icon": "rome.svg",
    "descriptionEN": "Unified developer tools for JavaScript, TypeScript, and the web",
    "descriptionCN": "用于 JavaScript、TypeScript 和 Web 的统一开发人员工具",
    "name": "Rome",
    "stars": 5183,
    "tags": ["build", "lint"]
  },
  {
    "icon": "redwood.svg",
    "descriptionEN": "The App Framework for Startups",
    "descriptionCN": "初创公司的应用程序框架",
    "name": "Redwood",
    "stars": 5004,
    "tags": ["fullstack", "graphql", "nodejs-framework"]
  },
  {
    "icon": "pinia.svg",
    "descriptionEN": "Intuitive, type safe, light and flexible Store for Vue using the compositio...",
    "descriptionCN": "使用组合的 Vue 直观、类型安全、轻便和灵活的商店......",
    "name": "Pinia",
    "stars": 4882,
    "tags": ["state", "vue"]
  },
  {
    "icon": "reveal.svg",
    "descriptionEN": "The HTML Presentation Framework",
    "descriptionCN": "HTML 表示框架",
    "name": "Reveal",
    "stars": 4734,
    "tags": ["presentation"]
  },
  {
    "icon": "react-flow.svg",
    "descriptionEN": "Highly customizable library for building an interactive node-based UI, work...",
    "descriptionCN": "高度可定制的库,用于构建基于节点的交互式 UI,工作......",
    "name": "React Flow",
    "stars": 4716,
    "tags": ["diagram", "react", "graph"]
  },
  {
    "icon": "floatingui.svg",
    "descriptionEN": "A low-level toolkit to create floating elements. Tooltips, popovers, dropdo...",
    "descriptionCN": "用于创建浮动元素的低级工具包。工具提示、弹出窗口、拖放...",
    "name": "Floating UI",
    "stars": 4702,
    "tags": ["tooltip"]
  },
  {
    "icon": "swr.svg",
    "descriptionEN": "React Hooks for Data Fetching",
    "descriptionCN": "用于数据获取的 React Hooks",
    "name": "swr",
    "stars": 4626,
    "tags": ["data", "caching", "react"]
  }
]


js/index.js

// 保存翻译文件数据的变量
let translation = {};
// 记录当前语言
let currLang = "zh-cn";

// TODO: 请在此补充代码实现项目数据文件和翻译数据文件的请求功能

// TODO-END

// TODO: 请修改以下代码实现项目数据展示的功能

// 以下代码(13-23行)为 createProjectItem 函数使用示例
// Mock一个项目的数据
const item = {
  icon: "bun.svg",
  description:
    "Incredibly fast JavaScript runtime, bundler, transpiler and package manager...",
  name: "Bun",
  stars: 37087,
  tags: ["runtime", "bun"],
};
// 添加至页面的项目列表中,查看页面可以看到有一行 bun 的项目数据
$(".list > ul").append(createProjectItem(item));

// TODO-END

// 用户点击切换语言的回调
$(".lang").click(() => {
  // 切换页面文字的中英文
  if (currLang === "en") {
    $(".lang").text("English");
    currLang = "zh-cn";
  } else {
    $(".lang").text("中文");
    currLang = "en";
  }
  $("body")
    .find("*")
    .each(function () {
      const text = $(this).text().trim();
      if (translation[text]) {
        $(this).text(translation[text]);
      }
    });
  // TODO: 请在此补充代码实现项目描述的语言切换
});

// 生成列表DOM元素的函数,将该元素的返回值append至列表中即可生成一行项目数据
/**
 * @param  {string} name - 项目名称
 * @param  {string} description - 项目描述
 * @param  {string[]} tags - 项目标签
 * @param  {number} stars - 项目star数量
 * @param  {string} icon - 项目icon路径
 */
function createProjectItem({ name, description, tags, stars, icon }) {
  return `
    <li class="item">
      <img src="images/${icon}" alt="">
      <div class="desc">
        <h3>${name}</h3>
        <p>${description}</p>
        <ul class="labels">
          ${tags.map((tag) => `<li>${tag}</li>`).join("")}
        </ul>
      </div>
      <div class="stars">
        +${stars} 🌟
      </div>
    </li>
  `;
}

js/transation.json

{
  "JavaScript明星项目": "JavaScript Risings Stars!",
  "2022 年 JavaScript 明星项目": "2022 JavaScript Rising Stars",
  "欢迎来到2022 JavaScript明星项目网站!": "Welcome to the 2022 JavaScript Risings Stars Website",
  "在这里,我们将对过去 12 个月里 JavaScript 生态中的趋势性项目做一个总结。今年的冠军是一个带有微笑标志的美味面包,用微笑开启新的一年是不错的开始!": "Here, we will provide an overview of the trending projects in the JavaScript eco-system over the last 12 months.The champion this year is a delicious bread with a smiling logo, it's good to start the year with a smile!",
  "下面的列表中展示了各个项目在 GitHub 上于过去 12 个月新增的 star 数量。分析的数据来源为 Best of JS 网站 ,一个 web 领域优秀项目的精选网站。": "The following graphs compare the number of stars added on GitHub over the last 12 months. We analyzed projects coming from Best of JS, a curated list of the best projects related to the web platform. ",
  "最受欢迎项目": "Most Popular Projects Overall",
  "加载更多": "LOAD MORE",
  "JavaScript Risings Stars!": "JavaScript明星项目",
  "2022 JavaScript Rising Stars": "2022 年 JavaScript 明星项目",
  "Welcome to the 2022 JavaScript Risings Stars Website": "欢迎来到2022 JavaScript明星项目网站!",
  "Here, we will provide an overview of the trending projects in the JavaScript eco-system over the last 12 months.The champion this year is a delicious bread with a smiling logo, it's good to start the year with a smile!": "在这里,我们将对过去 12 个月里 JavaScript 生态中的趋势性项目做一个总结。今年的冠军是一个带有微笑标志的美味面包,用微笑开启新的一年是不错的开始!",
  "The following graphs compare the number of stars added on GitHub over the last 12 months. We analyzed projects coming from Best of JS, a curated list of the best projects related to the web platform.": "下面的列表中展示了各个项目在 GitHub 上于过去 12 个月新增的 star 数量。分析的数据来源为 Best of JS 网站 ,一个 web 领域优秀项目的精选网站。",
  "Most Popular Projects Overall": "最受欢迎项目",
  "LOAD MORE": "加载更多"
}

五、完成

index.js

// 保存翻译文件数据的变量
let translation = {}
// 记录当前语言
let currLang = 'zh-cn'
// TODO: 请在此补充代码实现项目数据文件和翻译数据文件的请求功能
//获取数据函数
async function getData() {
  const res = await $.get({ url: './js/all-data.json' })
  return res
}
//获取翻译数据函数
async function getTranslation() {
  const res = await $.get({ url: './js/translation.json' })
  return res
}
//init函数
async function initData() {
  translation =await getTranslation()
  await addData(await getData())
}
//每调用一次就添加15条数据进去
async function addData(data) {
  const num = $('.list > ul').children().length
  //0 14  0
  //15 29 15
  for (var i = num; i < num + 15; i++) {
    let obj = {
      icon: data[i].icon,
      description:currLang=='zh-cn'?data[i].descriptionCN:data[i].descriptionEN,
      name: data[i].name,
      stars: data[i].stars,
      tags: data[i].tags,
    }
    //将翻译数据添加进去
    translation[data[i].descriptionCN]=data[i].descriptionEN
    translation[data[i].descriptionEN]=data[i].descriptionCN
    // 添加至页面的项目列表中,查看页面可以看到有一行 bun 的项目数据
    $('.list > ul').append(createProjectItem(obj))
  }
  if ($('.list > ul').children().length == 60) {
    $('.load-more')[0].remove()
  }
}
initData()
$('.load-more')[0].addEventListener('click', async () => {
  await addData(await getData())
})

// TODO-END

// TODO: 请修改以下代码实现项目数据展示的功能

// 以下代码(13-23行)为 createProjectItem 函数使用示例
// Mock一个项目的数据

// TODO-END

// 用户点击切换语言的回调
$('.lang').click(() => {
  // 切换页面文字的中英文
  if (currLang === 'en') {
    $('.lang').text('English')
    currLang = 'zh-cn'
  } else {
    $('.lang').text('中文')
    currLang = 'en'
  }
  $('body')
    .find('*')
    .each(function () {
      const text = $(this).text().trim()
      if (translation[text]) {
        $(this).text(translation[text])
      }
    })
  // TODO: 请在此补充代码实现项目描述的语言切换
})

// 生成列表DOM元素的函数,将该元素的返回值append至列表中即可生成一行项目数据
/**
 * @param  {string} name - 项目名称
 * @param  {string} description - 项目描述
 * @param  {string[]} tags - 项目标签
 * @param  {number} stars - 项目star数量
 * @param  {string} icon - 项目icon路径
 */
function createProjectItem({ name, description, tags, stars, icon }) {
  return `
    <li class="item">
      <img src="images/${icon}" alt="">
      <div class="desc">
        <h3>${name}</h3>
        <p>${description}</p>
        <ul class="labels">
          ${tags.map((tag) => `<li>${tag}</li>`).join('')}
        </ul>
      </div>
      <div class="stars">
        +${stars} 🌟
      </div>
    </li>
  `
}

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

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

相关文章

【MySQL数据库 | 第六篇】DDL操作 表

目录 &#x1f914;前景知识&#xff1a; 数据类型&#xff1a; 1. 数值类型 2. 字符串类型 3. 日期时间类型 &#x1f914;DDL操作表&#xff1a; 1.创建 示例&#xff1a;尝试创建把以下实例创建到表里 2.查询 1.查询当前数据库的所有表&#xff1a; &#x1f50…

Ai前沿技术汇总[1]:Quivr非结构化信息搜索、Drag Your GAN AI修图、MiniGPT-4、Falcon-40B、localGPT

“AI前沿技术”专栏汇集了最前沿的人工智能技术&#xff0c;包括自然语言处理、语音识别、图像识别、机器学习、深度学习、强化学习、计算机视觉、区块链技术、智能机器人技术和虚拟现实技术等。本专栏将带您了解人工智能领域的最新进展和研究成果&#xff0c;探索人工智能技术…

软件测试的案例分析 - 闰年4.2 (加投票)

这篇博客的目录 文章目的正文错误之一出错后怎么改正&#xff1f;正确而简明的算法 文章目的 显示不同的博客能获得多少博客质量分 &#xff08;这是关于博客质量分的测试 https://www.csdn.net/qc) 这个博客得了 60 分。 希望在新的质量分系统中&#xff0c;获得 80 - 90 分左…

NoSQL数据库

NoSQL数据库 NoSQL简介NoSQL兴起的原因NoSQL与关系数据库的对比NoSQL的四大类型键值数据库列族数据库文档数据库图形数据库不同类型数据库比较分析RedisMongoDBCassandraNeo4j NoSQL三大基石CAPBASE最终一致性 NoSQL简介 “Not Only SQL”泛指非关系型的数据库&#xff0c;区别…

简单分享怎么通过微信小程序开店

小程序开店的好处 1.可以为用户提供更多的便利。通过使用微信或其他社交媒体&#xff0c;可以随时随地与潜在客户进行交流互动。 2.让消费者体验更好。通过二维码、小程序代码等方式&#xff0c;消费者能够快速找到所需产品和服务。 3.有助于降低营销成本。相比传统销售渠道…

关于Idea的一些常用设置项

1. 输出中文不乱码 设置工程项目编码 file -> settings -> Editor -> File Encodings-> 如下图通通UTF-8 2. 创建文件自动设置本文模板 File–>settings–>Editor–>File and Code Templates–>Includes -> 输入类注释模板 /*** Classname ${N…

第9章:SpringMVC的拦截器

一、拦截器 1.拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行SpringMVC中的拦截器需要实现HandlerInterceptorSpringMVC的拦截器必须在SpringMVC的配置文件进行配置 ①创建拦截器&#xff0c;继承接口HandlerInterceptor. Component public class FirstIntercep…

深入理解Linux虚拟内存管理(五)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核&#xff08;一&#xff09; 深入理解 Linux 内核&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;一&#xff09; Linux 设备驱动程序&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;三&#xf…

面试银行测试岗,面试官问你网上银行转账是怎么测的,设计一下测试用例?你知道吗

目录 前言 1、网上银行转账是怎么测的&#xff0c;设计一下测试用例回答思路: 2.测试工作的流程?缺陷状态有什么?设计测试用例有几种方法? 3在项目中到的经典BUG是什么? 4、定期存款到期自动转存该怎么测? 5、登录功能如何设计测试用例?功能测试(FunctionTest) 6、…

上海亚商投顾:创业板指续创新低 AI概念股逆势大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 大小指数今日走势分化&#xff0c;沪指全天横盘震荡&#xff0c;创业板指低开低走&#xff0c;午后一度跌近2%&…

低代码最真实的反馈是什么样的?

一、前言 业内大V陈果曾吐槽&#xff1a;“低代码正在以比中台更快的速度在臭大街”&#xff0c;但在另一方面&#xff0c;微软/华为/百度/网易/腾讯/阿里等互联网巨头又在纷纷入局低代码&#xff0c;并推出了自己的低代码平台。 所以&#xff0c;有人说好&#xff0c;但却又有…

《计算机组成原理》期末考试手写笔记——模块二:计算机数据表示方法

目录 &#xff08;一&#xff09;知识点总结 知识点一&#xff1a;进制表示 知识点二&#xff1a;进制转换 1.基本进制转换计算 &#xff08;1&#xff09;二进制数转八进制 &#xff08;2&#xff09;二进制数转十六进制 &#xff08;3&#xff09;二进制数转十进制 &…

Redis从入门到精通【高阶篇】之底层数据结构压缩列表(ZipList)详解

&#x1f44f; 简介&#xff1a;大家好&#xff0c;我是冰点&#xff0c;从业11年&#xff0c;目前在物流独角兽企业从事技术管理和架构设计方面工作&#xff0c;之前的把博客作为技术流水账在写。现在准备把多年的积累整理一下&#xff0c;成体系的分享给大家&#xff0c;也算…

阿里巴巴最新开源“SpringSecurity手册”用户+案例+认证+框架,面面俱到太全了

pringSecurity 相信Spring大家一定不陌生&#xff0c;那么SpringSecurity你又了解多少呢&#xff1f;市面上有关Spring的介绍有很多&#xff0c;那么对于SpringSecurity只有一些简单的有关概念的介绍&#xff0c;如果想深入了解并使用SpringSecurity还是需要下很大的功夫的&am…

Python爬取广州、深圳、河源、惠州四个城市天气数据,并作数据可视化

本文爬取的网站是天气,天气预报查询,24小时,今天,明天,未来一周7天,10天,15天,40天查询_2345天气王 1.爬取广惠河深2022-2024年的数据 import requests # 发送请求要用的模块 需要额外安装的 import parsel import csvf open(广-惠-河-深天气.csv, modea, encodingut…

【自学网安必看】自学网络安全遇到的问题及解决方法!

自学网络安全很容易学着学着就迷茫了&#xff0c;找到源头问题&#xff0c;解决它就可以了&#xff0c;所以首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题&#xff0c;看到后面有惊喜哦 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有几门&#x…

STM32 HAL库开发——入门篇(1)

目录 一、GPIO 1.1 什么是GPIO 1.2 GPIO简介 1.2.1 GPIO特点 1.2.2 GPIO电气特性 1.2.3 GPIO引脚分布 1.3 IO端口基本结构介绍 1.4 GPIO的八种模式 1.5 GPIO的寄存器介绍 1.6 通用外设驱动模型&#xff08;四步法&#xff09; 1.7 GPIO配置步骤 1.8 编程实战…

用Notes打造一个资讯中心

大家好&#xff0c;才是真的好。 有一段时间&#xff0c;我介绍过&#xff0c;从Domino 10版本开始&#xff0c;LotusScript增强了网络数据访问和JSON解析功能等&#xff0c;从而可以从网上获取很多资讯&#xff0c;例如即时新闻、股市资讯等等。 例如我们采用Notes内置的讨论…

多线程-线程安全的懒汉式_死锁-ReentrantLock的使用

线程安全的懒汉式_死锁-ReentrantLock的使用 解决单例模式中的懒汉式的线程安全问题 解决单例模式中的懒汉式的线程安全问题> 饿汉式&#xff1a;不存在线程安全问题。 > 懒汉式&#xff1a;存在线程安全问题&#xff0c;&#xff08;需要使用同步机制来处理&#xff0…

案例39:基于Java办公自动化管理系统开题报告设计

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…