【发布时间】:2026-02-12 06:45:01
【问题描述】:
背景
我使用 asp.net (C#) 和 html5/css3/javascript(带有一点 jQuery)创建了一个幻灯片应用程序。我正在尝试在 Windows Universal WebView 组件内运行 Windows 10(IoT 版本)的 Raspberry Pi 2 设备上显示此内容。
我遇到了幻灯片滞后的问题。我的幻灯片基于一个带有 3 个背景图像的 div:
-
顶部图片是幻灯片图片。显示为
background-size: contain。 - 中间图像是一种透明渐变,用于覆盖底部图像以产生影响。
- 底部图像是服务器在图像上传时生成的,是一个缩放和模糊的图像,旨在提供一种颜色热区的渐变飞溅映射。此过程中留下的任何图像伪影都将通过图像 #2 进行平滑处理。
问题
我用一行代码切换背景图片:
slide.style.backgroundImage = "url(" + slides[slideIndex % slides.length] + "), " +
"url(../images/egg-shell.png), " +
"url(" + blurred[slideIndex % blurred.length] + ")";
在我的浏览器中运行良好,但是,在 Raspberry Pi 上,底部图片和中间图片叠加显示在顶部图片之前。
异常
我必须做几件事才能使这项工作与 Raspberry Pi 和 Webview 组件一起使用,我只列出这些是因为它们可能会导致我的问题:
- 更改背景图片后,我必须将幻灯片元素的显示属性设置为无,然后返回块以重绘背景图片,否则它不会改变。
- 我正在通过加载一组 JS
Image对象来预加载图像,这些对象具有由 web 服务指定的路径,然后等待每个图像完成报告.onload以开始幻灯片放映。
整个应用程序非常轻巧。如果需要,我可以提供它,但必须有一些简单的东西我错过了。如果我将每个图像加载到单独的 <img> 元素中然后设置 z-indexs,我不知道效率。我也不知道通过让图像加载到当前幻灯片后面的单独幻灯片中是否会提高效率。这就是为什么问题是关于 DOM 操作和 Javascript 的问题。无论如何,感谢您阅读这篇冗长的解释,希望您能提供帮助!
【问题讨论】:
-
如果您要预先加载所有内容,为什么不在每张幻灯片上使用一个元素呢?这也为您提供了在幻灯片之间转换的各种不错的选择。
-
如何过渡以获得最佳性能? Translate3d 将利用硬件加速,但与 z-index 相比,RPi 可能太难了。但我也不知道。
-
“最佳”取决于您可能需要试验的 WebView 的实现。对于即时过渡,您可能需要request an animation frame 并在回调中隐藏最后一张幻灯片并使用 CSS 显示下一张。如果不清楚,我可以写一个简单的例子。
-
拜托,我试试看它是否有效。请记住,Windows 通用 WebView 组件以 IE11 文档模式呈现(有一些警告)。 Css3 动画在 RPi 上运行非常缓慢。我探索的大多数可行的解决方案都失败了这两个类别之一(IE11 兼容性或对 RPi 足够有效)。
标签: javascript performance dom background raspberry-pi