impress.js 参考 API 完全指南:Root Element、Step Element、CSS 状态类与 JavaScript 编程接口
前端【免费下载链接】impress.jsIts a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prezi.com.项目地址https://gitcode.com/gh_mirrors/im/impress.js点击查看免费下载impress.js 是一个基于 CSS3 transforms 与 transitions 的演示文稿框架其全部核心能力通过一套声明式 HTML 数据属性、状态化 CSS 类和轻量 JavaScript API对外暴露。本文以官方 DOCUMENTATION.md 为骨架结合 src/impress.js 核心源码逐行讲解如何通过data-*属性配置根元素与步骤元素、如何利用.past/.present/.future与.active类编写状态样式、以及如何通过impress()返回的 API 对象控制演示流程并监听impress:init、impress:stepenter、impress:stepleave事件。读完本文你将能够不依赖任何框架直接读懂并定制一套完整的 impress.js 演示文稿。一、HTMLRoot Element根元素impress.js 要求一个根元素Root Element演示文稿的全部内容都被创建在该元素内部。默认约定是idimpress的div初始化之后impress.js 会自动把根元素内部的所有子节点包装进一个零尺寸的 canvas 容器并对根元素应用position: absolute、transformOrigin: top left、perspective等样式见 src/impress.js 中init()的rootStyles与 canvas 包装逻辑。因此官方文档明确建议初始化之后不要在根元素上手动改动 impress.js 生成的样式、属性或类否则可能与框架的自动缩放、3D 透视计算冲突。1.1 过渡时长data-transition-duration在根元素上设置data-transition-duration可以改变步骤之间切换动画的时长单位为毫秒默认值为 10001 秒div idimpress>div idimpress >div idimpress >div idbored classstep>div idbored classstep>div idtitle classstep>div idits classstep>div idtiny classstep>div classstep>div idits-in-3d classstep>.future { display: none; }3.2 .present相机当前对准.present被添加到当前位于相机中心的步骤元素上非常适合用来在相机导航到该步骤时触发步骤内部元素的动画.present .rotating { transform: rotate(-10deg); transition-delay: 0.25s; }3.3 .past已访问过.past被添加到所有至少访问过一次的步骤元素上.past { display: none; }3.4 .active当前激活步骤与 impress-on-* 全局类.active被添加到当前可见于相机中心的步骤元素上。注意它与.present的细微差别.active由goto()在切换发生之前立即添加/移除src/impress.js 中el.classList.add(active)常与透明度过渡配合使用.step { opacity: 0.3; transition: opacity 1s; } .step.active { opacity: 1 }与此同时impress-on-*类会被添加到body元素上类名中的*即当前激活步骤的id。由于 CSS 无法从激活的步骤元素反向匹配到 body这类全局类让自定义全局样式成为可能.impress-on-overview .step { opacity: 1; cursor: pointer; } .impress-on-step-1, .impress-on-step-2, .impress-on-step-3 { background: LightBlue; }3.5 渐进增强.impress-not-supported当浏览器不支持 impress.js 所需特性时.impress-not-supported类会被添加到body元素可用来编写降级样式。核心检测逻辑在 src/impress.js要求浏览器支持 CSS 3D 变换perspective属性前缀探测、classList与datasetAPI三者缺一即判定不支持。无需手动添加这个类脚本检测到浏览器缺少关键特性时会自动添加。但官方文档推荐在 HTML 中手动加上它这样即使浏览器禁用 JavaScript用户也能拿到降级样式。当脚本确认浏览器支持全部特性后会自动移除该.impress-not-supported类并添加.impress-supported.impress-not-supported .step { display: inline-block; }完整的演示可见根目录 index.htmlbody classimpress-not-supported配合 fallback 消息公共样式参考 css/impress-common.css。四、插件体系Pluginsimpress.js 的许多新特性都以插件形式实现。官方文档明确插件文档的起点是 src/plugins/README.md每个插件目录下还有各自的 README见 src/plugins/。默认插件随核心一起分发并默认启用例如 navigation、autoplay、toolbar但多数默认插件什么都不做需要用户显式触发navigation插件监听方向键、Page Down/Up、空格、Tab 等按键autoplay插件读取 HTML 属性data-autoplay也可用 URL 参数?impress-autoplay55 为等待秒数触发toolbar插件寻找一个div元素如div idimpress-toolbar/div来显示 UI。与本文档关系最密切的是Relative Positioning Pluginrelsrc/plugins/rel/README.md它支持用相对上一步骤的坐标来定义步骤位置例如data-rel-x1000>var impressAPI impress( root );从源码看src/impress.jsimpress()还做了几件幕后工作浏览器不支持时返回一个所有方法均为空操作的占位 API同一个 rootId 已初始化时直接返回已缓存的 API 实例缓存在roots对象中并把全局impress.supported标志暴露给 JS 判断浏览器支持情况。六、JavaScriptImpressAPIImpressAPI 是处理 impress.js 常见操作的主 API包含以下方法。需要注意官方文档说明每个文档只支持一个 impress.js 实例虽然源码中的roots缓存允许对多个 rootId 各自初始化但实践上并不推荐。6.1 .init()在页面中全局初始化 impress.jsimpress().init();初始化完成后会在根元素上触发impress:init事件var rootElement document.getElementById( impress ); rootElement.addEventListener( impress:init, function() { console.log( Impress init ); }); impress().init();从 src/impress.js 的init()实现看完整流程包括构建配置对象、执行 pre-init 插件、写入移动端 viewport meta、把子节点包装进 canvas 元素、计算窗口缩放、为 body/root/canvas 设置基础样式、初始化全部步骤、设置画布初始状态最后触发impress:init事件并把 API 实例放进event.detail.api这也是插件文档推荐的取 API 方式。6.2 .tear()把 DOM 重置回调用init()之前的状态用于卸载impress.jsimpress().tear();典型使用场景需要动态修改演示内容时先tear()拆除、应用修改、再init()重新初始化——大多数情况下用户看不到闪烁或其他可见副作用。源码中tear()调用lib.gc.teardown()回收所有由 gc 库登记的事件监听与样式参见 src/lib/gc.js并删除roots中的对应缓存条目因此如果对多个 rootId 分别调用过init()也必须为每个 rootId 分别调用一次tear()。6.3 .next() 与 .prev()分别导航到演示的下一步与上一步内部通过goto()实现var api impress(); api.init(); api.next();var api impress(); api.init(); api.prev();源码中next()取steps.indexOf(activeStep) 1越界则回到第一个步骤形成循环prev()取索引减一越界则回到最后一个步骤并把 reason 分别标记为next/prev传给goto()供 pre-stepleave 插件读取。6.4 .goto( stepIndex | stepElementId | stepElement, [ duration ] )goto()是核心导航函数接受三种形式的第一个参数按步骤索引Numbervar api impress(); api.init(); api.goto(7);按步骤 idStringvar api impress(); api.init(); api.goto( overview );按步骤 DOM 元素HTMLElementvar overview document.getElementById( overview ); var api impress(); api.init(); api.goto( overview );第二个可选参数是过渡时长毫秒的 Number不传时使用演示的默认过渡时长步骤自身的data-transition-duration或根元素的全局配置。goto()是理解 impress.js 内部机制的最佳入口src/impress.js每次切换前会重新执行initAllSteps()因此动态修改步骤坐标、增删步骤后调用goto()即可生效计算目标画布状态时取步骤坐标的相反数translate: -step.translate、rotate: -step.rotate、scale: 1/step.scale因为移动的是相机而非步骤本身切换动画被拆分到两个元素上root负责缩放、canvas负责平移与旋转并依据放大zoomin还是缩小错开 transitionDelay使过渡更自然同步维护active类与 body 上的impress-on-*类并在进入新步骤时把 URL hash 更新为#/step-id#/前缀用于防止浏览器默认滚动到同名元素监听hashchange可在地址栏直接输入#/step-id直达某一步骤通过setTimeout在过渡结束后触发impress:stepenter源码注释解释了为何不用transitionend事件root 与 canvas 两个元素上可能同时发生/不发生过渡条件分支过于复杂。6.5 导航事件impress:stepenter 与 impress:stepleave导航到目标步骤时根元素上触发impress:stepenter事件离开当前步骤时触发impress:stepleave事件var rootElement document.getElementById( impress ); rootElement.addEventListener( impress:stepenter, function(event) { var currentStep event.target; console.log( Entered the Step Element currentStep.id ); });var rootElement document.getElementById( impress ); rootElement.addEventListener( impress:stepleave, function(event) { var currentStep event.target; var nextStep event.detail.next; console.log( Left the Step Element currentStep.id and about to enter nextStep.id ); });事件语义源码注释明确说明impress:stepleave在离开当前步骤、向下一步骤过渡刚开始时触发event.target为当前步骤event.detail.next为即将进入的步骤impress:stepenter在进入目标步骤、过渡完成时触发。此外核心还会在同一步骤被重绘时例如窗口缩放后重新 goto 当前步骤触发impress:steprefresh事件src/impress.js 的onStepEnter()插件开发时可监听它做重绘相关的处理。七、结语从文档到源码的验证路径本文所有结论都可回溯到仓库中的具体文件DOCUMENTATION.md 是行为规范src/impress.js 是全部默认值与事件流的实现依据src/lib/util.js 提供toNumber/toNumberAdvanced/triggerEvent等底层工具src/plugins/README.md 与 src/plugins/rel/README.md 说明插件注册机制与 rel 插件带来的兼容性变更。动手实践可参考仓库内的演示经典 index.html、2D 导航 examples/2D-navigation/index.html、3D 旋转顺序示例 examples/3D-rotations/index.html、经典幻灯片风格 examples/classic-slides/index.html以及 Markdown 演示 examples/markdown/index.html。若你的演示使用构建产物入口为 js/impress.js它是核心与全部默认插件的拼接文件。掌握本文的 HTML 属性、CSS 状态类与 JavaScript API 三套接口你就能完全自主地构建与定制自己的 impress.js 演示。赞分享前端【免费下载链接】impress.jsIts a presentation framework based on the power of CSS3 transforms and transitions in modern browsers and inspired by the idea behind prezi.com.项目地址https://gitcode.com/gh_mirrors/im/impress.js点击查看免费下载相关推荐Element UIelementTag 标签组件完全指南类型、可移除、动态编辑与主题定制Element UIelementTag 标签组件完全指南类型、可移除、动态编辑与主题定制 Element UI本仓库为 eleme/elementA前端UI组件设计系统Reor API完全参考扩展应用功能的编程接口指南Reor API完全参考扩展应用功能的编程接口指南 1. 简介 Reor是一款自组织AI笔记应用Self organizing AI note taking人工智能AI 应用本地部署RAG知识管理桌面应用Mermaid Live Editor免费的 mermaid 图表在线编辑器3 步实时预览Mermaid Live Editor免费的 mermaid 图表在线编辑器3 步实时预览 给技术文档配图还要一个个拖方框、连箭头吗Mermaid Li前端开发者工具数据可视化上一篇如何通过ExplorerPatcher实现Windows 11界面深度定制完整功能解析与配置指南下一篇Play Integrity API Checker三分钟了解Android设备安全检测的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

DRAM刷新机制详解:集中式、分散式与异步式刷新

DRAM刷新机制详解:集中式、分散式与异步式刷新

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 14:43:46 阅读更多 →
Windows单网卡双IP路由配置实战指南

Windows单网卡双IP路由配置实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 15:25:17 阅读更多 →
Opik Prompt Playground:不写代码,也能像做实验一样调提示词

Opik Prompt Playground:不写代码,也能像做实验一样调提示词

如果你正在开发基于大语言模型的应用,大概率会遇到这样的场景:为了让模型输出更符合预期,你反复修改提示词,然后写一段脚本调用 API,把结果打印出来,再手动对比。改了几版之后,你已经记不清哪一…

2026/10/2 21:25:16 阅读更多 →

最新新闻

互联网商业医疗保险直付平台:从理赔垫付到秒级结算的落地拆解

互联网商业医疗保险直付平台:从理赔垫付到秒级结算的落地拆解

简介:这份PDF文献面向医疗信息化从业者、医院信息中心技术人员及医疗保障研究者,聚焦互联网商业医疗保险直付平台的解决方案。内容系统梳理了商保的概况与现状、传统理赔流程的痛点,并重点论述平台设计原则,包括数据安全、实时性、…

2026/10/2 22:52:08 阅读更多 →
PPTX作为云架构契约:从幻灯片到可执行基础设施

PPTX作为云架构契约:从幻灯片到可执行基础设施

简介:本资源是一份面向智慧城市、大数据与人工智能领域技术决策者及系统架构师的《高效数据中心云基础架构解决方案》专业PPT课件,聚焦企业级IT基础设施向云化演进的核心路径。内容系统阐述动态基础架构管理(AIM)、基础架构云&…

2026/10/2 22:52:08 阅读更多 →
Jev AI研发智能体:任务闭环、本地部署与Codex集成实践

Jev AI研发智能体:任务闭环、本地部署与Codex集成实践

最近社区里聊 Jev 的人越来越多了,但大部分人还停留在"听说它很厉害"的阶段。有人说它是新的 AI 模型,有人说它就是个编码插件,还有人拿它和 Codex 对比,问是不是要抢饭碗。我前阵子也花了不少时间研究 Jev,…

2026/10/2 22:52:08 阅读更多 →
RAGFlow深度解析:企业知识库文档解析与本地部署实战

RAGFlow深度解析:企业知识库文档解析与本地部署实战

1. 先从“文档抽血”说起:RAGFlow 到底解决了什么 企业知识库这条赛道上,开源方案看着一堆,真能拿来当生产力的没几个。RAGFlow 是其中一个让我愿意花时间反复测试的项目。它最打动我的地方,不是又出了一款“聊天问答机器人”&…

2026/10/2 22:52:08 阅读更多 →
从数据传输结构拆解AXI协议:通道、握手与突发机制

从数据传输结构拆解AXI协议:通道、握手与突发机制

AXI协议这个东西,做数字IC和SoC的同学迟早要正面硬刚它。不管你是做设计、验证还是FPGA原型验证,面试时被问AXI的概率几乎是百分之百。但市面上讲AXI的资料两极分化严重:要么是ARM官方手册那种几百页的规格书,啃下来耗神费力&…

2026/10/2 22:52:08 阅读更多 →
TerraScan点云处理实战:参数原理与LiDAR测绘精度控制

TerraScan点云处理实战:参数原理与LiDAR测绘精度控制

简介:本资源是一份面向测绘、遥感、地理信息系统(GIS)及三维建模领域从业者与高校相关专业师生的技术参考文献,系统讲解基于TerraScan软件的LiDAR点云数据处理全流程。内容涵盖LiDAR技术原理与发展现状、TerraScan核心功能&#x…

2026/10/2 22:51:07 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 6:09:11 阅读更多 →