【PPTist】公式编辑、插入音视频、添加动画
一、插入公式
点击公式的时候 latexEditorVisible 会变成 true
src/views/Editor/CanvasTool/index.vue
<Modalv-model:visible="latexEditorVisible" :width="880"
><LaTeXEditor @close="latexEditorVisible = false"@update="data => { createLatexElement(data); latexEditorVisible = false }"/>
</Modal>

交互的方式:
1、直接输入 latex 公式
2、点击常用符号
3、点击预置公式
都可以自动生成公式预览
1、输入 latex 公式
输入公式的区域是一个自定义组件 src/components/TextArea.vue
输入公式后会触发 update:value 方法
const handleInput = (e: Event) => {emit('update:value', (e.target as HTMLInputElement).value)
}
2、常用符号/预置公式
公式和符号的默认值的定义在 src/configs/latex.ts,
符号点击的时候触发下面的方法,将符号追加到 latex 的最后
const insertSymbol = (latex: string) => {if (!textAreaRef.value) returntextAreaRef.value.focus()document.execCommand('insertText', false, latex)
}
而公式点击的时候,直接重置 latex 公式 @click="latex = item.latex"
3、公式预览
公式预览组件:src/components/LaTeXEditor/FormulaContent.vue
使用到了 hfmath 将 latex 转成 svg
使用示例:
new hfmath(`f(x)=\\frac{1}{2\\sqrt{2\pi} }e^{-\\frac{1}{2}(\\frac{x-\\mu}{\\sigma})^2}`
).svg();
会监听 latex ,随时更新公式预览
watch(() => props.latex, () => {const eq = new hfmath(props.latex)pathd.value = eq.pathd({})box.value = eq.box({})
}, { immediate: true })
二、插入音视频
插入音视频的功能有点简单,不能上传本地文件,只能粘贴一个链接

视频组件:src/views/components/element/VideoElement/index.vue
主要的播放是靠这个
<videoclass="video"ref="videoRef":src="src":autoplay="autoplay":poster="poster"webkit-playsinlineplaysinline@durationchange="handleDurationchange()"@timeupdate="handleTimeupdate()"@ended="handleEnded()"@progress="handleProgress()"@play="autoHideController(); paused = false"@pause="autoHideController()"@error="handleError()"
></video>
如果要上传本地的文件的话,应该要先上传到服务端,然后给一个服务器上的地址,放到 video 标签里
三、添加动画
来看一下这个炫酷的动画的效果是怎么实现的吧

选择动画的组件是 src/views/Editor/Toolbar/ElementAnimationPanel.vue,点击动画的时候会指定的方法:
// 添加元素动画,并执行一次预览
const addAnimation = (type: AnimationType, effect: string) => {if (handleAnimationId.value) {updateElementAnimation(type, effect)return}const animations: PPTAnimation[] = JSON.parse(JSON.stringify(currentSlideAnimations.value))animations.push({id: nanoid(10),elId: handleElementId.value,type,effect,duration: ANIMATION_DEFAULT_DURATION,trigger: ANIMATION_DEFAULT_TRIGGER,})slidesStore.updateSlide({ animations })animationPoolVisible.value = falseaddHistorySnapshot()setTimeout(() => {runAnimation(handleElementId.value, effect, ANIMATION_DEFAULT_DURATION)}, 0)
}
如果当前元素已经有自己的动画,就会执行 updateElementAnimation(),更新元素的动画。
如果是新增动画,就执行 slidesStore.updateSlide({ animations }),将动画的数据存到当前幻灯片中,并且会执行一次动画预览。看下怎么执行动画预览的
// 执行动画预览
const runAnimation = (elId: string, effect: string, duration: number) => {const elRef = document.querySelector(`#editable-element-${elId} [class^=editable-element-]`)if (elRef) {const animationName = `${ANIMATION_CLASS_PREFIX}${effect}`document.documentElement.style.setProperty('--animate-duration', `${duration}ms`)elRef.classList.add(`${ANIMATION_CLASS_PREFIX}animated`, animationName)const handleAnimationEnd = () => {document.documentElement.style.removeProperty('--animate-duration')elRef.classList.remove(`${ANIMATION_CLASS_PREFIX}animated`, animationName)}elRef.addEventListener('animationend', handleAnimationEnd, { once: true })}
}
从代码中可以看到,动画通过 animate 实现。这么一看好像也挺简单的(嚣张.jpg)🌝🌝🌝
动画的样式都在这里:
node_modules/animate.css/animate.css

相关文章:
【PPTist】公式编辑、插入音视频、添加动画
一、插入公式 点击公式的时候 latexEditorVisible 会变成 true src/views/Editor/CanvasTool/index.vue <Modalv-model:visible"latexEditorVisible" :width"880" ><LaTeXEditor close"latexEditorVisible false"update"data &…...
LeetCode - #186 翻转字符串里的单词 II(会员题)
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
Kafka核心参数与使用02
一、从基础的客户端说起 Kafka 提供了非常简单的生产者(Producer)和消费者(Consumer)API。通过引入相应依赖后,可以快速上手编写生产者和消费者的示例。 1. 消息发送者主流程 一个最基础的 Producer 发送消息的步骤…...
Three.js 渲染技术:打造逼真3D体验的幕后功臣
文章目录 前言一、着色器(Shaders)二、后处理(Post-processing)三、抗锯齿(Anti-aliasing)四、实时渲染与离线渲染五、光照模型与材质优化六、环境映射(Environment Mapping)七、纹理…...
QTcpSocket 如何统计在线时长
基本原理 QTcpSocket是 Qt 库中用于 TCP 通信的类。要统计在线时长,关键思路是记录连接建立的时间和当前时间,通过计算两者的差值来得到在线时长。实现步骤 记录连接建立时间: 在连接成功的信号槽函数中记录开始时间。例如,当QTcpSocket成功连接到服务器时,会发出connecte…...
【Altium】AD使用智能粘贴功能把多个网络标签改成端口
1、 文档目标 使用智能粘贴功能把多个网络标签(net lable)改成端口(port) 2、 问题场景 客户有一份原理图,网络用的是net label,没用Port,然后创建一个sheet symbol,但是sheet sy…...
.NET 终止或结束进程
如何使用 C# 终止进程。 使用简单的方法终止.NET中的现有进程Process.Kill()。有一个可选参数 true 或 false,用于结束与要结束的进程相关的所有子进程。 了解如何创建流程。 结束当前进程: System.Diagnostics.Process.GetCurrentProcess().Kill(tru…...
R.swift库的详细用法
R.swift 是一个 Swift 工具库,它提供了一个自动生成的类 R,使得你可以通过类型安全的方式访问项目中的资源,例如图片、字体、颜色、XIB 文件等。通过 R.swift,你可以避免字符串类型的错误,提升代码的可维护性。 以下是 R.swift 库的详细用法: 1. 安装 R.swift 使用 Sw…...
Js的回调函数
一、什么是回调函数(Callback)? 回调函数(Callback Function)是指一个函数被作为参数传递给另一个函数,并在特定事件发生或操作完成时执行。 可以通俗地理解为一种“委托”机制。 在JavaScript中࿰…...
flutter 独立开发之笔记
1、# use: - [flutter_launcher_icons:] 每次修改完icon后,都需要执行一遍 dart run flutter_launcher_icons 2、开启混淆并打包apk flutter build apk --obfuscate --split-debug-info./out/android/app.android-arm64.symbols 3、开启windows支持 flutter con…...
PHP的扩展Imagick的安装
windows下的安装 下载:Imagick扩展 PECL :: Package :: imagick 3.7.0 for Windows 下载:ghostscript(PDF提取图片时用到,不处理PDF可以不安装) Ghostscript : Downloads 安装扩展 Imagick解压后&…...
【git】在服务器使用docker设置了一个gogs服务器,访问和现实都不理想
以下问题应该都可以通过设置custom/conf/app.ini来解决 配置文档参考地址:https://www.bookstack.cn/read/gogs_zh/advanced-configuration_cheat_sheet.md domain显示的事localhost,实际上应该是一个IP地址。 关键字: DOMAIN ROOT_URL 因为是docker…...
多台PC共用同一套鼠标键盘
当环境中有多个桌面 pc 需要操作的时候,在 多台 pc 之间切换会造成很多的不方便 可以通过远程进行连接,但是有一个更好的方案是让多台机器之间共用同一套键盘鼠标 常用的解决方案 synergy 和 sharemouse,通过移动光标在不同的 pc 间切换 s…...
大语言模型是如何训练出来的?
近期听了不少与AI相关的播客,有理想转型AI的分享,有Character.ai出来同事的分享等,结合对Transformer架构的理解尝试大致还原大语言模型的训练过程。不过,当我这样的“中国大妈”也能够大致琢磨明白大语言模型是如何训练出来的时候…...
Vue2与Vue3在项目开发中的选择:深入探讨
文章目录 前言一、Vue2的优势与挑战二、Vue3的进步与特性三、如何做出选择?结语 前言 Vue.js 是一个用于构建用户界面的渐进式JavaScript框架。Vue2和Vue3是其两个主要版本,它们各自拥有一系列特点和优势。随着Vue3的发布,开发者们面临着在新…...
Web枚举:深入了解目标应用系统
Web枚举是渗透测试中重要的第一步,旨在全面收集目标系统的信息,以便后续攻击载荷的构建更具针对性和效率。本文将详细讨论如何通过各种方法识别目标Web应用的技术栈,并提取关键信息。 1. 识别目标系统的技术栈 技术栈指Web应用所依赖的技术组…...
RabbitMQ介绍与使用
RabbitMQ官网 RabbitMQ 介绍 RabbitMQ 是一个开源的消息代理和队列服务器,基于 AMQP(高级消息队列协议)标准,使用 Erlang 编程语言构建。它是消息队列(MQ)的一种,广泛应用于分布式系统中&#x…...
从0到机器视觉工程师(六):配置OpenCV和Qt环境
CMake配置OpenCV CMakeLists.txt文件的编写 cmake_minimum_required(VERSION 3.20) project(test_opencv LANGUAGES CXX) #寻找Opencv库 FIND_PACKAGE(OpenCV REQUIRED) include_directories(test_opencv ${OpenCV_INCLUDE_DIRS}) add_executable(test_opencv main.cpp) TARGE…...
计算机毕业设计Python机器学习农作物健康识别系统 人工智能 图像识别 机器学习 大数据毕业设计 算法
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
(Arxiv-2023)LORA-FA:针对大型语言模型微调的内存高效低秩自适应
LORA-FA:针对大型语言模型微调的内存高效低秩自适应 paper是香港浸会大学发表在Arxiv 2023的工作 paper title:LORA-FA: MEMORY-EFFICIENT LOW-RANK ADAPTATION FOR LARGE LANGUAGE MODELS FINE-TUNING ABSTRACT 低秩自适应 (LoRA) 方法可以大大减少微调…...
STM32F103ZET6【标准库函数开发】-----TM1638模块驱动4位8段共阴极数码管
1. 硬件环境搭建 第一次接触TM1638模块时,我手头正好有块吃灰的正点原子战舰开发板。这个组合对初学者特别友好,就像乐高积木一样容易上手。先说说需要准备的硬件清单: 正点原子STM32F103ZET6开发板(其他型号也行,但引…...
用Python和PyTorch手把手搭建你的第一个脉冲神经网络(SNN)模型
用Python和PyTorch手把手搭建你的第一个脉冲神经网络(SNN)模型 当你第一次听说"脉冲神经网络"时,脑海中可能会浮现出科幻电影里那些会思考的机器。但事实上,这种模拟生物神经元工作方式的算法已经悄然走进现实。作为一名…...
Pi0机器人控制实战:从模型下载到Web演示完整流程
Pi0机器人控制实战:从模型下载到Web演示完整流程 1. 项目概述与核心价值 Pi0是一个创新的视觉-语言-动作流模型,专为通用机器人控制设计。这个开源项目将深度学习与机器人技术相结合,通过自然语言指令和视觉输入来生成精确的机器人动作。项…...
快速构建tomcat配置可视化原型:用快马一键生成配置向导界面
今天想和大家分享一个快速验证Tomcat配置方案的小技巧。作为一个Java开发者,经常需要折腾Tomcat的安装配置,每次都要重复下载、配环境变量、改server.xml这些步骤,特别耗时。最近发现用InsCode(快马)平台可以快速生成一个可视化配置向导&…...
Qwen3.5-2B企业落地案例:制造业设备图片故障诊断辅助系统搭建
Qwen3.5-2B企业落地案例:制造业设备图片故障诊断辅助系统搭建 1. 项目背景与挑战 在制造业生产线上,设备故障诊断一直是影响生产效率的关键环节。传统方式依赖工程师人工巡检,存在以下痛点: 人力成本高:需要专业工程…...
Qwen2.5-VL-7B-InstructGPU优化指南:视觉特征缓存机制与响应速度实测对比
Qwen2.5-VL-7B-Instruct GPU优化指南:视觉特征缓存机制与响应速度实测对比 1. 项目概述与优化背景 Qwen2.5-VL-7B-Instruct作为一款先进的多模态视觉-语言模型,在处理图像和文本交互任务时展现出强大能力。但在实际部署中,我们发现其GPU资源…...
DVWA SQL 注入:两种查表字段 Payload 结果差异详解
一、问题引入在 DVWA Medium 级别 SQL 注入实验中,我们通过 Burp Suite 抓包改包,对users表字段进行查询时,会遇到两种看似不同的执行结果:图 1:逐行展示users表的每一个字段名图 2:一行展示user表的所有字…...
Boss-Key终极指南:3秒掌握职场隐私保护的秘密武器
Boss-Key终极指南:3秒掌握职场隐私保护的秘密武器 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 在现代职场环境中࿰…...
告别复杂操作!Wan2.2-I2V-A14B一键生成480P高清视频
告别复杂操作!Wan2.2-I2V-A14B一键生成480P高清视频 1. 视频创作新体验:简单三步生成专业级视频 你是否曾经为制作一段简单的视频而头疼?传统视频制作需要学习复杂的剪辑软件,花费大量时间调整参数,甚至需要专业的拍…...
谷歌Home应用与Gemini Live更新:AI赋能智能家居与新闻交互新体验
谷歌Home应用更新:让智能家居控制更自然本周谷歌对其Home应用进行更新,借助Gemini AI助手,让用户控制智能家居变得“更加自然和可靠”。更新后,用户能以更自然的方式描述需求,如描述灯光类型为“海洋的颜色”ÿ…...
