当前位置: 首页 > news >正文

前端 | MYTED单篇TED词汇学习功能优化

文章目录

  • 📚实现效果
    • 🐇before
    • 🐇after
  • 📚模块实现解析
    • 🐇html
    • 🐇css
    • 🐇javascript

📚实现效果

🐇before

  • 点击TED单篇词汇表按钮,选择对应TED打卡号,返回对应TED单篇词汇,点击列表单词查询详情。
    在这里插入图片描述
    在这里插入图片描述

  • 单篇抽查按钮,点击后先选中抽查TED号
    在这里插入图片描述
    在这里插入图片描述
  • 在抽查状态下,再次点击抽查按钮,则继续在该篇下抽查。
    在这里插入图片描述
  • 抽查结束后自动弹出重选按钮,在抽查中途希望重选则点击重选按钮
    在这里插入图片描述
  • 抽查单词点击后同样可弹出iframe框查询。
    在这里插入图片描述

🐇after

  • 左侧框直接显示已经学习的TED列表,并可选择TED类别返回对应TED。单击左侧TED标题,右侧显示该篇对应的单词列表,被选中的TED标粉。默认选中第一篇并在右侧返回相关单词。
    在这里插入图片描述在这里插入图片描述
  • 学习右侧单词,点击单词,可查看详情。点击✔️,对应单词标绿表明已学会;点击❌,对应单词标红表明不熟悉。
    在这里插入图片描述在这里插入图片描述

📚模块实现解析

🐇html

<div id="categorycontainer"><div id="categorySelectContainer"><select id="categorySelect" onchange="showTED()"><option value="">ALL</option><option value="个人成长">个人成长</option><option value="心理调节">心理调节</option><option value="生活方式与习惯">生活习惯</option><option value="健康与健身">健康与健身</option><option value="社交与关系">社交与关系</option></select></div><div id="contentContainer"><ul id="TEDList"></ul><div id="wordsList"></div></div></div>

🐇css

.page-main-content {background-image: url("../images/bg3.svg");
}
#categorySelectContainer select {font-family: serif;position: absolute;top: 0.5%;left: 20%;height: 30px;padding: 3px;text-align: center;font-size: 16px;background-color: azure;border: 2px solid #1e80b8bb;border-radius: 14px;
}#contentContainer .tedtext {font-family: serif;font-size: 15px;font-weight: normal;color: #333;
}#contentContainer .tednum {font-family: serif;font-size: 16px;color: #2966cf;
}#contentContainer {font-family: serif;display: flex;justify-content: center;width: 100%;
}#TEDList, #wordsList {font-family: serif;width: 50%;max-height: 480px;overflow-y: auto;border: 1px solid #ccc;padding: 10px;box-sizing: border-box;margin: 0 15px;border-radius: 8px;background: var(--content-background-color);box-shadow: 0 0 8px var(--shadow-color);
}#TEDList:hover, #wordsList:hover {box-shadow: 0 0 12px var(--shadow-hover-color);
}#TEDList li, #wordsList li {font-family: serif;margin-bottom: 5px;padding: 5px;padding-left: 35px;font-size: 16px;border-bottom: 1px solid #eee;border-radius: 8px;
}#TEDList li:hover,#wordsList li:hover{box-shadow: 0 0 8px var(--shadow-color);
}.selectedli{box-shadow: 0 0 8px var(--shadow-color);background-color: #fde9ea;
}.tednum {font-weight: bold;
}.tedtext {display: block;margin-left: 10px;
}@media (max-width: 800px) {#TEDList, #wordsList {width: 100%;max-height: none;}
}

🐇javascript

const mapData1 = [{ "name": 1, "value": "20岁,光阴不再来", "category": "个人成长" },{ "name": 2, "value": "帮你省钱的三个心理技巧", "category": "生活方式与习惯" },...
];function getWordsData() {return fetch('output_word.json').then(response => response.json()).catch(error => console.error('Error loading the words data:', error));
}// 显示TED演讲列表的函数
function showTED() {const category = document.getElementById("categorySelect").value;const TED1 = mapData1.filter(data => category ? data.category === category : true);TED1.sort((a, b) => a.name - b.name);displayTED(TED1);
}function displayTED(TED) {const TEDList = document.getElementById("TEDList");TEDList.innerHTML = "";TED.forEach(ted => {const listItem = document.createElement("li");listItem.innerHTML = `<span class='tednum'>打卡号</span>-<span class='tednum'>${ted.name}</span>:<span class='tedtext'>${ted.value}</span>`;listItem.addEventListener('click', function() {// 先移除其他所有li的选中状态TEDList.querySelectorAll('li').forEach(item => {item.classList.remove('selectedli');});// 给当前点击的li添加选中状态this.classList.add('selectedli');showWordsForTED(ted.name);});TEDList.appendChild(listItem);});
}// 显示对应TED号的单词
function showWordsForTED(inputNumber) {getWordsData().then(words => {let resultWords = words.filter(word => word.numbers.includes(parseInt(inputNumber)));displayWords(resultWords);});
}// 显示单词的函数
function displayWords(words) {const wordsList = document.getElementById("wordsList");wordsList.innerHTML = "";words.forEach(word => {// 创建列表项const listItem = document.createElement("li");listItem.style.position = 'relative'; // 创建单词文本节点const textNode = document.createTextNode(word.word);listItem.appendChild(textNode);// 创建按钮容器const buttonsContainer = document.createElement("span");buttonsContainer.style.position = 'absolute'; // 绝对定位buttonsContainer.style.right = '50px'; // 靠右浮动buttonsContainer.style.top = '5px'; // 顶部对齐// buttonsContainer.style.backgroundColor = 'pink';// 创建×按钮const uncheckButton = document.createElement("button");uncheckButton.textContent = "❌";uncheckButton.style.border = "none"; uncheckButton.style.backgroundColor = "transparent"; // 创建√按钮const checkButton = document.createElement("button");checkButton.textContent = "✔️";checkButton.style.marginRight = "10px"; checkButton.style.border = "none"; checkButton.style.backgroundColor = "transparent"; // 为按钮添加点击事件checkButton.addEventListener('click', function(event) {event.stopPropagation(); // listItem.style.backgroundColor = "#E7E593";listItem.style.backgroundColor = "#def9dc";listItem.style.boxShadow = "0 0 3px var(--shadow-color)";});uncheckButton.addEventListener('click', function(event) {event.stopPropagation();// listItem.style.backgroundColor = "#F0686C";listItem.style.backgroundColor = "#fdd2ae";listItem.style.boxShadow = "0 0 3px var(--shadow-color)";});// 将按钮添加到容器中buttonsContainer.appendChild(checkButton);buttonsContainer.appendChild(uncheckButton);listItem.appendChild(buttonsContainer);listItem.addEventListener('click', function(event) {if (event.target !== buttonsContainer && event.target !== checkButton && event.target !== uncheckButton) {openSouGouSearch(word.word);}});wordsList.appendChild(listItem);});
}function openSouGouSearch(word) {const existingIframe = document.querySelector('iframe');const existingCloseButton = document.querySelector('.close-button');if (existingIframe) {document.body.removeChild(existingIframe);}if (existingCloseButton) {document.body.removeChild(existingCloseButton);}const iframe = document.createElement('iframe');iframe.src = `https://fanyi.sogou.com/text?keyword=${encodeURIComponent(word)}`;iframe.style.position = 'fixed';iframe.style.top = '10.5%';iframe.style.left = '1%';iframe.style.width = '50%';iframe.style.height = '88%';iframe.style.border = '2px solid #bfc1a9';iframe.style.zIndex = '9999';iframe.style.borderRadius = '10px'; document.body.appendChild(iframe);// 添加关闭按钮const closeButton = document.createElement('button');closeButton.textContent = '×';closeButton.classList.add('close-button');closeButton.style.position = 'fixed';closeButton.style.width = '20px';closeButton.style.height = '20px';closeButton.style.top = '12.8%';closeButton.style.right = '50.5%';closeButton.style.zIndex = '10000';closeButton.style.border = '1.2px solid #bfc1a9';closeButton.style.borderRadius = '50%'; closeButton.style.fontFamily = 'serif';closeButton.style.fontSize = '15px';closeButton.style.color = 'white';closeButton.style.fontWeight = 'bold';closeButton.style.padding = '2px';closeButton.style.backgroundColor = '#d24735';closeButton.addEventListener('click', () => {document.body.removeChild(iframe);document.body.removeChild(closeButton);});document.body.appendChild(closeButton);
}// 在页面加载完成后显示TED演讲列表
window.onload = function() {showTED();const wordsList = document.getElementById("wordsList");if (wordsList) {wordsList.innerHTML = "点击TED号查看相关单词";}const firstTEDItem = TEDList.querySelector('li'); if (firstTEDItem) {firstTEDItem.click();}
}

  1. 获取单词数据 (getWordsData 函数)

  2. 显示TED演讲列表 (showTED 函数):

    • 根据用户在下拉菜单中选择的类别筛选TED演讲数据。
    • 对筛选后的TED演讲数据按TED打卡号排序。
    • 调用 displayTED 函数显示TED演讲列表。
  3. 显示TED演讲列表项 (displayTED 函数):

    • 清空当前的TED演讲列表,并为每个TED创建一个列表项。
    • 为每个列表项添加点击事件,当点击时,移除其他所有列表项的选中状态,并给当前点击的列表项添加选中状态。
    • 调用 showWordsForTED 函数显示对应TED打卡号的单词。
  4. 显示对应TED演讲号的单词 (showWordsForTED 函数):

    • 调用 getWordsData 函数获取单词数据。
    • 筛选出与当前TED打卡号相关的单词。
    • 调用 displayWords 函数显示这些单词。
  5. 显示单词 (displayWords 函数):

    • 清空当前的单词列表,并为每个单词创建一个列表项。
    • 为每个单词列表项创建一个按钮容器,包含“❌”和“✔️”两个按钮,分别用于标记单词的未学习和已学习状态。
    • 为按钮添加点击事件,改变列表项的背景色以反映单词的学习状态。
    • 为单词列表项添加点击事件,当点击单词文本时,调用 openSouGouSearch 函数打开搜狗翻译页面。
  6. 打开搜狗翻译页面 (openSouGouSearch 函数):

    • 如果页面上已经存在iframe或关闭按钮,则先移除它们。
    • 创建一个新的iframe,设置其源为搜狗翻译的URL,并添加到页面上。
    • 创建一个关闭按钮,并添加到页面上。点击关闭按钮会移除iframe和关闭按钮。
  7. 页面加载完成后的操作 (window.onload 事件处理器):

    • 显示TED演讲列表。
    • 如果存在第一个TED演讲项,则自动触发其点击事件。

相关文章:

前端 | MYTED单篇TED词汇学习功能优化

文章目录 &#x1f4da;实现效果&#x1f407;before&#x1f407;after &#x1f4da;模块实现解析&#x1f407;html&#x1f407;css&#x1f407;javascript &#x1f4da;实现效果 &#x1f407;before 点击TED单篇词汇表按钮&#xff0c;选择对应TED打卡号&#xff0c;…...

64 mysql 的 表锁

前言 我们这里来说的就是 我们在 mysql 这边常见的 几种锁 行共享锁, 行排他锁, 表意向共享锁, 表意向排他锁, 表共享锁, 表排他锁 我们前面了解了行共享锁, 行排他锁, 表意向共享锁, 表意向排他锁 等等相关 我们这里 来看一下 表共享锁, 表排他锁 的获取, 以及 和 其他表级…...

【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】题库(1)

前言 大家好吖&#xff0c;欢迎来到 YY 滴计算机网络 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 本博客主要内容&#xff0c;收纳了一部门基本的计算机网络题目&#xff0c;供yy应对期中考试复习。大家可以参考 欢迎订阅 YY滴其他专栏&#xff01;…...

ajax关于axios库的运用小案例

AJAX案例 图书管理 四大功能&#xff1a; 展示图书删除图书编辑图书信息新增图书 步骤 1.bootstrap弹窗来实现新增和编辑图书时出现的弹窗 有两种方案&#xff1a; a.可以用自带的属性来进行弹窗的显示和隐藏 b.可以通过JS进行控制&#xff0c;此操作可以进行自定义&am…...

微搭低代码入门01变量

目录 1 变量的定义2 变量的赋值3 变量的类型4 算术运算符5 字符串的连接6 模板字符串7 检查变量的类型8 解构赋值8.1 数组的解构赋值8.2 对象的解构赋值 9 类型转换9.1 转换为字符串9.2 转换为数字9.3 转换为布尔值 总结 好些零基础的同学&#xff0c;在使用低代码的时候&#…...

盘点2024年10款视频剪辑,哪款值得pick!!

在这个短视频盛行的时代&#xff0c;如何让我们的故事更生动有趣呢&#xff1f;那就要对短视频进行修饰了。这就需要借助视频剪辑工具&#xff1a;而一款好的工具不仅仅是视频的“美颜”&#xff0c;更是创意的灵魂所在&#xff01;想象一下&#xff0c;运用一款功能齐全的剪辑…...

苹果手机照片批量删除:一键清理,释放空间

在数字化时代&#xff0c;iPhone不仅是我们沟通的桥梁&#xff0c;也是记录生活的重要工具。然而&#xff0c;随着时间的积累&#xff0c;手机中的照片数量不断增加&#xff0c;不仅占用大量存储空间&#xff0c;也让设备变得缓慢。苹果手机照片批量删除成为了一个普遍的需求。…...

《AI 大模型:重塑软件开发新生态》

《AI 大模型&#xff1a;重塑软件开发新生态》 一、AI 大模型引领软件开发新潮流二、AI 大模型在软件开发中的优势&#xff08;一&#xff09;提高开发效率&#xff08;二&#xff09;减少错误与提升质量&#xff08;三&#xff09;激发创新与拓展功能 三、AI 大模型在软件开发…...

uniapp(API-Promise 化)

一、异步的方法&#xff0c;如果不传入 success、fail、complete 等 callback 参数&#xff0c;将以 Promise 返回数据异步的方法&#xff0c;且有返回对象&#xff0c;如果希望获取返回对象&#xff0c;必须至少传入一项 success、fail、complete 等 callback 参数&#xff0c…...

【考研数学 - 数二题型】考研数学必吃榜(数二)

数学二 suhan, 2024.10 文章目录 数学二一、函数❗1.极限1.1求常见极限1.2求数列极限1.2.1 n项和数列极限1.2.2 n项连乘数列极限1.2.3 递推关系定义的数列极限 1.3确定极限式中的参数1.4无穷小量阶的比较 2.连续2.1判断是否连续&#xff0c;不连续则判断间断点类型2.2证明题 二…...

Redis生产问题(缓存穿透、击穿、雪崩)——针对实习面试

目录 Redis生产问题什么是缓存穿透&#xff1f;如何解决缓存穿透&#xff1f;什么是缓存击穿&#xff1f;如何解决缓存击穿&#xff1f;缓存穿透和缓存击穿有什么区别&#xff1f;什么是缓存雪崩&#xff1f;如何解决缓存雪崩&#xff1f; Redis生产问题 什么是缓存穿透&#x…...

android openGL中模板测试、深度测试功能的先后顺序

目录 一、顺序 二、模板测试 1、概念 2、工作原理 3、关键函数 三、深度测试 1、概念 2、工作原理 3、关键函数 三、模板测试和深度测试的先后顺序 一、顺序 在Android OpenGL中&#xff0c;模板测试&#xff08;Stencil Testing&#xff09;是在深度测试&#xff0…...

CCF PTA 编程培训师资认证2021年7月真题- C++兑换礼品

【题目描述】 小零和小壹是两个爱玩游戏的小孩&#xff0c;他俩平时最擅长的是解谜游戏&#xff0c;可今天 遇到了一个有点难的算法问题&#xff0c;希望能得到你的帮助。 他们面对的是一个电子装置&#xff0c;正面有 n 个排成一列的按钮&#xff0c;按钮上贴着编号 1~n 号的…...

火山引擎云服务docker 安装

安装 Docker 登录云服务器。 执行以下命令&#xff0c;添加 yum 源。 yum update -y yum install epel-release -y yum clean all yum list依次执行以下命令&#xff0c;添加Docker CE镜像源。更多操作请参考Docker CE镜像。 # 安装必要的一些系统工具 sudo yum install -y yu…...

【taro react】 ---- 常用自定义 React Hooks 的实现【六】之类渐入动画效果的轮播

1. 效果 2. 场景 css 效果实现:可以看到效果图中就是一个图片从小到大的切换动画效果,这个效果很简单,使用 css 的 transform 的 scale 来实现图片的从小到大的效果,切换就更加简单了,不管是 opacity 还是 visibility 都可以实现图片的隐藏和显示的切换。React.Children.m…...

基础算法练习--滑动窗口(已完结)

算法介绍 滑动窗口算法来自tcp协议的一种特性,它的高效使得其也变成了算法题的一种重要考点.滑动窗口的实现实际上也是通过两个指针前后遍历集合实现,但是因为它有固定的解题格式,我将其单独做成一个篇章. 滑动窗口的解题格式: 首先,定义两个指针left和right,与双指针不同的…...

深度学习经典模型之ZFNet

1 ZFNet 1.1 模型介绍 ​ ZFNet是由 M a t t h e w Matthew Matthew D . Z e i l e r D. Zeiler D.Zeiler和 R o b Rob Rob F e r g u s Fergus Fergus在AlexNet基础上提出的大型卷积网络&#xff0c;在2013年ILSVRC图像分类竞赛中以11.19%的错误率获得冠军&#xff08;实际…...

Linux系统-ubuntu系统安装

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 这是Linux进阶部分的最后一大章。讲完这一章以后&#xff0c;我们Linux进阶部分讲完以后&#xff0c;我们的Linux操作部分就…...

2-Ubuntu/Windows系统启动盘制作

学习目标&#xff1a; 掌握使用Win32DiskImager、Rufus等工具制作系统启动盘的基本步骤。独立将ISO镜像文件写入USB闪存驱动器&#xff0c;确保在需要时顺利安装或修复系统。通过学习如何选择正确的源文件和目标驱动器&#xff0c;理解启动盘的使用场景和注意事项&#xff0c;…...

你使用过哪些MySQL中复杂且使用不频繁的函数?

在MySQL中&#xff0c;除了常用的SELECT、INSERT、UPDATE等基本操作外&#xff0c;还有许多复杂且功能强大的函数&#xff0c;它们能够处理各种复杂的数据处理需求。这些函数虽然在日常开发中可能不常使用&#xff0c;但在特定场景下却能够发挥巨大的作用。下面&#xff0c;我将…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

从实验室到产业:IndexTTS 在六大核心场景的落地实践

一、内容创作&#xff1a;重构数字内容生产范式 在短视频创作领域&#xff0c;IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色&#xff0c;生成的 “各位吴彦祖们大家好” 语音相似度达 97%&#xff0c;单条视频播放量突破百万…...

Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用

Linux 内存管理调试分析&#xff1a;ftrace、perf、crash 的系统化使用 Linux 内核内存管理是构成整个内核性能和系统稳定性的基础&#xff0c;但这一子系统结构复杂&#xff0c;常常有设置失败、性能展示不良、OOM 杀进程等问题。要分析这些问题&#xff0c;需要一套工具化、…...

[特殊字符] Spring Boot底层原理深度解析与高级面试题精析

一、Spring Boot底层原理详解 Spring Boot的核心设计哲学是约定优于配置和自动装配&#xff0c;通过简化传统Spring应用的初始化和配置流程&#xff0c;显著提升开发效率。其底层原理可拆解为以下核心机制&#xff1a; 自动装配&#xff08;Auto-Configuration&#xff09; 核…...

可视化预警系统:如何实现生产风险的实时监控?

在生产环境中&#xff0c;风险无处不在&#xff0c;而传统的监控方式往往只能事后补救&#xff0c;难以做到提前预警。但如今&#xff0c;可视化预警系统正在改变这一切&#xff01;它能够实时收集和分析生产数据&#xff0c;通过直观的图表和警报&#xff0c;让管理者第一时间…...

Go 语言中的内置运算符

1. 算术运算符 注意&#xff1a; &#xff08;自增&#xff09;和--&#xff08;自减&#xff09;在 Go 语言中是单独的语句&#xff0c;并不是运算符。 package mainimport "fmt"func main() {fmt.Println("103", 103) // 13fmt.Println("10-3…...