ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

impress.js 参考 API 完全指南:Root Element、Step Element、CSS 状态类与 JavaScript 编程接口

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),仅供参考
返回列表