javascript - 我在使用 setProperty() 为 background-image url 设置 CSS 变量时遇到问题
问题描述
我正在为范围滑块创建一个 React 组件,其中滑块拇指是一个图像,它沿着滑块条在某些值处发生变化。
我试图用 CSS 类来做到这一点,通过改变特定值的类,并且每个类都被分配一个来自本地图像文件夹的图像。这很好用,但我必须为我有图像的每个值创建一个类。如果您只有几张图片可以使用,这没什么大不了的,但我希望可以选择添加更多图片。
所以我想我会给 CSS 变量一个镜头,并用 javascript 更改图像 url。我能够得到一些有用的东西background-color
,但不是background-image
我真正想要改变的东西。
我可以为背景图像和背景颜色设置 CSS 变量...
:root {
--background-image: url('./Smileys/smiley4.png');
--background-color: red;
}
...并在此处设置背景图像和背景颜色
background-image: var(--background-image);
background-color: var(--background-color);
并且它会在第一次加载滑块时设置正确的图像,但是当我移动滑块时,图像消失并且没有设置新图像。颜色效果很好。
这是我正在尝试使用的 javascript。
document.documentElement.style.setProperty('--background-image', 'url("./Smileys/smiley2.png")')
document.documentElement.style.setProperty('--background-color', 'green')
我已经尝试了很多不同的变体,在 URL 的各种不同位置使用引号。我尝试了许多 jQuery 和连接选项,但真的很成功。
我不知道为什么它适用于背景颜色,但不适用于背景图像。
我应该注意图像文件夹中有五个图像,唯一的区别是名称中的数字smiley1.png
smiley2.png
等。我已经两次和三次检查了所有路径。四重检查可能是为了,但我不这么认为。
我很感激我能得到的任何帮助。我绝对愿意走完全不同的方向,但我开始走这条路,想找出一个解决方案,如果可能的话。
更新
我能够取得一些进展,但对我来说仍然没有多大意义。
我记录了我设置的初始网址
const el = getComputedStyle(document.documentElement)
.getPropertyValue('--background-image')
console.log(el)
把这个拿回来了...
url(\/static\/media\/smiley4\.e2025ea6\.png)
Sooo,我尝试像这样将这一行添加到我的javascript中
document.documentElement.style.setProperty('--background-image', 'url(\/static\/media\/smiley4\.e2025ea6\.png)')
它奏效了!!虽然,这并不是一个很好的解决方案,因为现在我必须完整地输入每个 url。
我希望以类似的方式命名所有图像,但数值除外,并根据数值进行更改。像这样的东西。
document.documentElement.style.setProperty('--background-image', 'url({`smiley${number}.png`)')
更新2
感谢kenput3r,我最终从我的图像文件夹中导入了图像,然后为图像创建了一个数组。
const number = Math.round(event.target.value)
const smileys = ['', smiley1, smiley2, smiley3, smiley4, smiley5]
document.documentElement.style.setProperty('--background-image', `url(${smileys[number]})`)
我仍然想对它进行一些重构,这样我就不必创建数组了,但我认为这几乎可以解决我的问题。感谢大家帮助我。
这个关于添加图像、字体和文件的链接绝对有帮助。
解决方案
相对路径在构建后不起作用。
导入您的图像,如下所示,并使用变量src
此处的文档添加图像、字体和文件
import smiley1 from './Smileys/smiley1.png`;
import smiley2 from './Smileys/smiley2.png`;
import smiley3 from './Smileys/smiley3.png`;
import smiley4 from './Smileys/smiley4.png`;
document.documentElement.style.setProperty(`--background-image`, `url(${smiley1})`);
如果你想通过索引访问它们,你总是可以把它们放在一个数组中:
const smileys = [smiley1, smiley2, smiley3, smiley4];
document.documentElement.style.setProperty(`--background-image`, `url(${smileys[0]})`);
推荐阅读
- python - 使用属性装饰器给两个字典起别名——属性可以下标吗?
- laravel - 中继器中的中继器导致重新排序后数据丢失
- c++ - 为什么vector的方法resize会创建一个额外的对象?
- swift - “类声明中的预期标识符”错误
- javascript - 如何使用正则表达式在 Javascript 中验证日期?
- r - 使用 R 数据框中的条件进行计数
- c# - 单击提交按钮时出现语法错误,我的 SQL 表有问题,所以想知道它是否可以链接
- python - 在没有 Selenium 的情况下获取当前 URL
- html - 超出指定大小的扩展元素
- rust - 为 RustC 添加新的 LLVM 代码生成选项