javascript - 使用交叉点观察者设置背景图像 src 时,Safari 上的白色闪烁/闪烁?
问题描述
我研究了很多,无法解决这个问题。仅出现在 Safari(Mac 和 iOS)上。适用于 Chrome、FF、Edge 等。
更新:闪烁也发生在 FireFox 中......
我正在使用 IntersectionObserver API 以及所需的 polyfil 来延迟加载图像。当它们进入视野时,交叉点观察者将低分辨率图像集替换为 div,background-image
并将其替换为存储在 div 上的数据属性中的高分辨率图像。
当设置了模糊的初始图像时,行为正在“工作”,然后被高质量的图像替换,但中间发生了白色闪烁或闪光......(页面的背景是白色的,所以也许这就是显示的内容? )
经过一番阅读:(如何防止背景图像在更改时闪烁)我确实通过使用构造函数预加载图像来解决跳跃问题new Image()
。
const setBackgroundImage = (e) => {
let image = new Image();
image.onload = () => e.style.backgroundImage = `url(${e.dataset.bgImage})`;
image.src = e.dataset.bgImage;
};
一个示例 HTML 元素 (PHP):
<div class="my-div"
style="background-image: url('<?= $imagePreload ?? $image; ?>');"
data-bg-image="<?= $image; ?>"
</div>
我试过玩,backface-visibility: hidden
但没有运气。我没有为任何东西制作动画,只是用预加载的全尺寸图像替换src
on 。div
解决方案
您可以通过在滚动到视图之前加载更高分辨率的图像来解决此问题。将rootMargin
选项设置为类似于200px
创建时让IntersectionObserver
浏览器在图像进入视口之前开始加载图像 200 像素。
推荐阅读
- html - 超级菜单(仅限 CSS)悬停无法正常工作
- api - 第 3 方(条带化)元数据最佳实践?
- java - 一次构建所有 Maven 依赖项
- python - pyrogram - 用于获取实时位置更新的电报 API
- oracle - ora2pg 排除指令的问题
- delphi - 如何将 HTML 格式的文本作为 HTML 复制到 Firemonkey 中的剪贴板
- java - 红黑树 - 如何处理插入的第一个项目
- javascript - 如何在反应传单中选择一个区域
- scala - ScalaTest中的BeforeAndAfter和BeforeAndAfterEach有什么区别
- java - 从任何虚拟帐户发送邮件,而不在 java 中启用不太安全的应用程序选项