CSS 加载时背​​景颜色过渡/滑过

2023-12-05

我发现一个 CSS 过渡在悬停时效果很好,它会将我的背景颜色滑过,但仅限于悬停时。 CSS 有没有办法让这种情况在加载而不是悬停时发生?

color: #FF0000;
display: inline-block;
background-color: #fff;
background-position: 0 100%;
padding-left: 10px;
padding-right: 10px;
-webkit-transition: background-position 1s ease-in 1s;
-moz-transition: background-position 1s ease-in 1s;
transition: background-position 1s ease-in 1s;

仅使用 CSS 无法延迟动画或过渡效果的执行/应用,直到加载特定资源的确切时刻。然而,它可以使用 JavaScript 来完成,但这仍然很棘手,因为没有load/onload背景图像加载事件(据我所知)。

但是您可以利用浏览器的缓存机制:如果在页面中多次使用资源,它不会多次加载资源(除非在非常特殊的情况下,这不是默认的,因此不适用此处)。

所以解决方案是将元素的背景图像用作src of an <img>,并触发里面的动画onload那个事件<img>.

概念证明:

body {
  margin: 0;
  min-height: 100vh;
  background: #ccc url('https://s22849.pcdn.co/wp-content/uploads/2016/10/placeholder-large-1.png') no-repeat center 0;
  transition: background-position 1s cubic-bezier(.4,0,.2,1);
}
body.loaded {
  background-position: center center;
}
.placeholder {
  height: 0;
}
<script type="application/javascript">
function moveBackground() {
  document.body.classList.add('loaded');
}</script>
<img src="https://s22849.pcdn.co/wp-content/uploads/2016/10/placeholder-large-1.png" onload="moveBackground()" class="placeholder" />

关键部分是:

  • 网址是exactly相同
  • the <img>高度为0(所以不显示)。

一种更干净的方法是不添加<img>完全到 DOM.

当改变src的财产<img>,浏览器将加载它,即使它尚未添加到文档对象模型中。还有onload事件仍然会触发<img>,一旦浏览器准备好渲染它(这意味着立即渲染已经缓存的图像)。

所以你需要做的就是创建一个<img>,设置其src到你的元素的当前backgroundImage(剥离周围url())并且,在其onload事件触发动画。在我们的例子中,这是通过添加loaded元素的类。

const element = document.body,
  src = window.getComputedStyle(element).backgroundImage.slice(4, -1).replace(/"/g, "");
if (src && src.length) {
  const img = document.createElement('img');
  img.onload = () => element.classList.add('loaded');
  img.src = src;
}
body {
  margin: 0;
  min-height: 100vh;
  background: #ccc url('https://s22849.pcdn.co/wp-content/uploads/2016/10/placeholder-large-1.png') no-repeat center 0;
  transition: background-position 1s cubic-bezier(.4, 0, .2, 1);
}

body.loaded {
  background-position: center center;
}

如果您在项目中实现上述内容时遇到困难,请提供更多代码(我将向您展示如何针对您的特定情况执行此操作)。

正如您可以测试的,动画始终执行图像加载后。 (在隐身窗口或禁用缓存的情况下进行测试)。

更好的测试是使用损坏的 URL(当元素具有loaded类 - 我为其添加了红色边框)。由于找不到资源,loaded永远不应该应用类并且不应该执行动画。

最后,4 秒后,让我们放置一个有效的backgroundImage在元素上,再次运行我们的例程并查看背景动画是否正确:

function onLoadBackgroundImage(element) {
  const src = window.getComputedStyle(element).backgroundImage.slice(4, -1).replace(/"/g, "");
  if (src && src.length) {
    const img = document.createElement('img');
    img.onload = () => element.classList.add('loaded');
    img.src = src;
  }
}
/* 4 seconds later... 
 * we actually load a valid image so we can see 
 * if the animation happens when it loads or it already happened */
setTimeout(function() {
  const el = document.body;
  el.style.backgroundImage = `url('https://s22849.pcdn.co/wp-content/uploads/2016/10/placeholder-large-1.png')`;
  onLoadBackgroundImage(el);
}, 4000);
body {
  margin: 0;
  min-height: 100vh;
  background: #ccc url('https://non-existent-url') no-repeat center 0;
  transition: background-position 1s cubic-bezier(.4, 0, .2, 1);
}

body.loaded {
  background-position: center center;
  border: 3px solid red; /* let's make the application of .loaded obvious */
  box-sizing: border-box;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS 加载时背​​景颜色过渡/滑过 的相关文章

  • 如何从 bootstrap-markdown.js 调用 .getContent 和 .parseContent

    我是使用 Bootstrap 插件的新手 刚刚通过代码学院 http www codecademy com en skills make an interactive website 我真的很想用这个很棒的引导 Markdown 插件 ht
  • jQuery 或 Javascript - 如何禁用窗口滚动而不溢出:隐藏;

    您好 是否可以在不使用的情况下禁用窗口滚动overflow hidden 当我悬停一个元素时 我试过 chat content on mouseenter function document scroll function e if e h
  • 删除圆形图像周围的边框

    我有一个圆形图像 png 文件 中间是透明的 我需要将图像内的背景设置为纯色 为此 我将背景设为纯色 然后将border radius 50 但这会产生一条丑陋的小白线 有没有办法摆脱这个问题 或者我必须在图像编辑器中手动为图像着色 div
  • HTML5 仅拖放图像

    我想做的是 如果所有拖动的文件都是图像 则将其删除 但如果有其他文件扩展名 则不要删除它们 而仅删除图像 这是我的尝试 HTML div div JavaScript var dropzone document getElementById
  • 通过 jQuery 选择动态 HTML 元素

    我正在构建一个 ASP NET MVC 应用程序 并且正在使用jQuery Blueimp https github com blueimp jQuery File Upload动态添加到页面的 PartialView 上的插件 根据插件的
  • HTML:如何强制链接在新选项卡而不是新窗口中打开[重复]

    这个问题在这里已经有答案了 I use target blank 在新选项卡中打开链接 但在 IE 中它会打开一个新窗口 这是完全合乎逻辑的 因为这就是 blank应该做的 我不知道如何target blank 在其他浏览器中的行为 有什么
  • * 到底有多慢?

    大家都表示 选择器非常慢 但它到底有多慢呢 我总是试图避免它 但有时它非常有用 例如 h1 margin top 1em 简单来说 通用选择器 速度只与页面上的元素一样慢 Since 从右到左匹配浏览器获取每个元素并将其与所有候选规则进行匹
  • 在iOS上,“添加到主页”缓存保存在哪里,如何清除它?

    我正在 iPad iOS v7 上制作一个 html5 游戏 当我将其添加到主页时 它非常顽固地释放缓存 如果我在 Safari 中查看它 这会按照您所期望的方式工作 如果我刷新一次或两次 页面就会以最新状态缓存 但在主页上却是另一回事 它
  • Django:使用条件 {% extends %} 使 {% block "div" %} 成为条件

    我想分享一个 AJAX 和常规 HTTP 调用之间的模板 唯一的区别是一个模板需要扩展 base html html 而另一个则不需要 我可以用 extends request is ajax yesno app base ajax htm
  • 如何在 Lift 框架中添加新页面

    如何在 lift 中的 webapp 目录中添加一个可供用户访问的新页面 目前只能通过index html访问http localhost 8080 com http localhost 8080 or http localhost 808
  • 更改API数据输出的布局

    我是 API 集成和 PHP 的新手 我最近将 VIN 解码器集成到我的应用程序中 在输入框中输入车辆的 VIN 选择提交 然后就会显示 API 数据库中有关该车辆的所有信息 数据存储为关联数组 其中包含类别及其相应元素 例如 对于 VIN
  • 如何转义 HTML 字符?在.NET中-->“

    如何在 NET 中转义 HTML 字符 我正在从 json 字符串中获取 html 并在标题中得到 amp quot more text 看起来我需要做两次才能得到 amp quot 成为 quot 那么它就是一个 如何转义 NET 中的所
  • 如何在 select 和 option 标签中添加 JSON 数据?

    我有这个html代码 div class searchfilter div class searchwrapper div div
  • 检索 css3 缩放元素的宽度/高度

    我正在与 offsetWidth 属性的奇怪之处 我认为 作斗争 这是场景 比方说 我有一个span标签 在我的js中 在某个时刻我执行css3转换 对于这个元素 例如 el set styles transform scale scale
  • 如何使跨度标签不可删除?

    我正在尝试使 contenteditable div 内的跨度标记不可删除 div Editable span Read Only span div 只读范围确实是只读的 但我可以通过单击删除键来删除整个范围 有没有一种属性方法可以告诉sp
  • 内嵌显示定义术语和描述

    我正在为页面上的某些元素使用定义列表 并需要它们内联显示 例如 它们normally看起来像 我需要它们看起来像 注意多个 DD 我可以让它们在 moz 中使用 float 来正常工作 但无论我尝试什么 它们都无法在 IE 中工作 我通常会
  • 如何通过 jQuery 中的类获取特定 html 元素的innerHTML?

    我有这样的 HTML 代码 div class a html value 1 div div class a html value 2 div 我怎样才能访问html value 1 and html value 2使用jquery 分别地
  • Facebook 点赞按钮消失

    我的网站中的 Facebook Like 按钮出现问题 添加此代码 由 facebook 提供 按钮在创建时正确显示在任何页面中
  • PDF 在 Safari 中隐藏 Jquery Modal

    这是与我有关的事情this https stackoverflow com questions 24052681 pdf hide jquery modal in ie问题 在 IE 中 我在对话框中使用 iframe 解决了问题 所以它工
  • Bootstrap 导航栏与 Google 位置重叠自动完成下拉菜单

    我有一个导航栏 我试图在其中添加一个地点搜索框 除了谷歌位置提示框的一小部分被导航栏重叠 如下图所示 之外 一切几乎都有效 我尝试过改变z index输入框的值改为10或2000或90000但似乎没有效果 我还缺少其他需要做的事情吗 这是

随机推荐

  • Ng-animate 停止使用 $templateRequest 装饰器工作

    当我的用户未经身份验证时 我试图避免使用 Angular js 出现模板错误 为了做到这一点 我来到了这个堆栈溢出解决方案 它对我有用 但现在我注意到我的 ng animate 停止工作而没有抛出控制台错误 我缺少什么 Update 这是使
  • if 语句中的布尔值

    今天 我收到了关于代码的评论 考虑到我在学校作业中检查变量是真还是假的方式 我写的代码是这样的 var booleanValue true function someFunction if booleanValue true return
  • oracle中需要修剪空格

    无法修剪表中以下数据中的空格 列数据类型为 VARCHAR2 650 CHAR 我尝试了修剪功能来消除空白 但这对我不起作用 我的表中的数据 xxxxxxxxxx yyyyyyyyy 12 7 14 12 13 14 xxxxxxxxxx
  • 分配给 BigInteger 数组中的 an 元素时出错

    这是我的代码 当我创建数组时它显示错误BigInteger并尝试赋值 package test import java math import java lang import java util public class Test pub
  • Tomcat工作目录必须定期清理

    我们的 Tomcat 遇到了一个问题 我的同事都无法真正解释 我们有一只雄猫 版本7 0 26 在 Linux 计算机上 部署是通过爆炸战争 我们的类是jar打包的 其余的直接进入WEB INF和META INF 另外还有一个内容管理服务器
  • Spring Security 6 和 JSP 视图渲染

    我正在将应用程序从 Spring Boot 2 7 升级到 Spring Boot 3 其中包括更新到 Spring Security 6 我们设置了以下属性 spring mvc view prefix WEB INF view spri
  • 从 RStudio EC2 实例中的 S3 读取大型 JSON 文件(Louis Aslett 的 AMI)

    我正在经历与这个问题类似的问题here 我在 AWS S3 上有一个大的 JSON 文件 并尝试通过 RStudio 来自 Louis Aslett 的 AMI 的 EC2 实例 访问它 我什至尝试从 t2 迁移到具有 30GB 内存的 r
  • 使用 CSS 变换倾斜后应用于位置 div 的边距

    可能比 CSS 更多的数学知识 但我正在尝试确定一种在应用 CSS skewY 变换后调整 div 位置的方法 在下面的代码片段中 带有蓝色边框的 div 应用了 3 5 度的倾斜度 我想知道是否有数学方法可以知道倾斜度是多少top应用于蓝
  • 序列化多部分表单请求以在 Play 2.1 上进行测试

    我正在为 play2 1 编写一个使用路由函数的多部分表单的后置控制器测试 route FakeRequest POST postControllerRoute url FakeHeaders Seq HeaderNames CONTENT
  • Powershell 中的 New-Object -ComObject 和 VB 中的 CreateObject() 有什么区别?

    我有一个关于 Windows PowerShell 在处理 Com Interop 时如何工作的问题 我有一个第三方应用程序 我们称之为ThirdPartyApp 公开了一个我可以调用的 API 我可以提前绑定它 例如Excel 或 Vis
  • Bokeh 自动填充日期时间轴缺失值:如何停止?

    我正在尝试构建一个交互式情节pandas dataframe的财务数据 当市场休市或周末时 数据帧指数存在一些差距 问题是 当我使用数据帧索引作为 xasis 时 Bokeh 总是自动填充这些空白 使其在视觉上很难看 如何才能无间隙地打印数
  • 在 Fortran 牛顿法中传递附加参数

    我在实现在 Fortran 程序中调用牛顿法的方法时遇到问题 所以我想用牛顿法来求解以下方程the link 但是 我的程序与上面的示例略有不同 就我而言 方程需要一些在运行时产生的附加信息 subroutine solve f fp x0
  • 如果工作表编号/名称是变量/变体,则引用公式中的下一个或上一个工作表

    如果工作表编号 名称是变量 变体 如何引用公式中的下一个或上一个工作表 我已经看到用 vba 来做到这一点的方法 有没有办法用公式或函数来做到这一点 这是使用常规 Excel 公式列出所有工作表名称的另一种方法 Cell A1 CELL f
  • 非等待异步方法在 UI 线程上运行?

    我想要一个方法 我们称之为M1 执行一些async循环中的代码 让我们调用第二个方法M2 在每次迭代中 UI 应使用以下结果进行更新M2 为了等待M2 M1需要是async But M1应该在 UI 线程上运行 以避免竞争条件 因此它将在没
  • Python 将字符串转换为浮点型

    我有一个看起来像这样的字符串 a 92 345 r n r n a strip 当我尝试使用将其转换为浮点数时np float a 要不就float a I get Value error could not convert string
  • 使用 lapply 进行多元回归并更改公式,而不是数据集

    我见过一个列表应用 lapply 的例子 它可以很好地获取数据对象列表 并返回回归输出列表 我们可以将其传递给 Stargazer 以获得格式良好的输出 将 stargazer 与通过在分割 data frame 上进行 lapply in
  • 带 preg_match 的 PHP switch 语句

    我在 switch 语句中创建 preg match 时遇到一些问题 我想编写与 oop page view some number 匹配的 preg match 目前它的工作原理如下 如果我在浏览器中运行http example com
  • JQuery Mobile 文件上传[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我一直在到处寻找 但找不到任何例子 有谁知道我在哪里可以找到有关使用 JQuery Mo
  • 将 Firestore 依赖项和类型导入到 node.js

    在今年的 FirebaseSummit 演讲之后 我最近将我的云函数更新为 TypeScript 我的所有代码看起来都很酷 但我在尝试恢复 Firestore API 的类型时遇到一些问题 例如QuerySnapshot DocumentR
  • CSS 加载时背​​景颜色过渡/滑过

    我发现一个 CSS 过渡在悬停时效果很好 它会将我的背景颜色滑过 但仅限于悬停时 CSS 有没有办法让这种情况在加载而不是悬停时发生 color FF0000 display inline block background color ff