首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我在使用setProperty()为背景图像url设置CSS变量时遇到了问题

我在使用setProperty()为背景图像url设置CSS变量时遇到了问题
EN

Stack Overflow用户
提问于 2020-07-08 23:09:33
回答 1查看 1.1K关注 0票数 1

我正在为一个范围滑块创建一个React组件,其中滑块拇指是一个图像,它在滑动条上的某些值上发生变化。

我试图用CSS类来实现这一点,方法是在特定的值上更改类,并且每个类都从本地图像文件夹中分配一个图像。这很好,但是我必须为我的每个值创建一个类,我有一个图像。如果你只有几张图片可以使用,那就没什么大不了的了,但是我想选择添加更多的图片。

所以我想我应该给CSS变量一次机会,用javascript修改图像url。我能够为background-color工作,但不能为background-image工作,这正是我真正想要改变的。

我可以为背景图像和背景颜色设置CSS变量.

代码语言:javascript
运行
复制
:root {
  --background-image: url('./Smileys/smiley4.png');
  --background-color: red;
}

...and在这里设置背景图像和背景色。

代码语言:javascript
运行
复制
background-image: var(--background-image);
background-color: var(--background-color);

当第一次加载滑块时,它将设置正确的图像,但当我移动滑块时,图像消失,没有设置新的图像。颜色很好。

这是我试图使用的javascript。

代码语言:javascript
运行
复制
document.documentElement.style.setProperty('--background-image', 'url("./Smileys/smiley2.png")')
document.documentElement.style.setProperty('--background-color', 'green')

我已经尝试了很多不同的变化,在各种不同的地方引用的网址。我已经尝试了许多jQuery和级联选项,但真的被淘汰了。

我不知道为什么它适用于背景颜色,但不是背景图像。

我应该注意到,图像文件夹中有五个图像,唯一的区别是名称smiley1.pngsmiley2.png等中的数字。我已经检查了所有路径。四倍支票可能是合理的,但我不这么认为。

我很感激我能得到的任何帮助。我绝对愿意走一个完全不同的方向,但我从这条路开始,如果可能的话,我想找出一个解决方案。

更新

我取得了一些进步,但这对我来说仍然没有多大意义。

我记录了我设置的初始url

代码语言:javascript
运行
复制
const el = getComputedStyle(document.documentElement)
    .getPropertyValue('--background-image')
    console.log(el)

把这个拿回来..。url(\/static\/media\/smiley4\.e2025ea6\.png)

所以,我尝试在我的javascript中添加这一行,如下所示

代码语言:javascript
运行
复制
document.documentElement.style.setProperty('--background-image', 'url(\/static\/media\/smiley4\.e2025ea6\.png)')

成功了!!尽管如此,这并不是一个很好的解决方案,因为现在我必须将每个url全部打印出来。

我希望将所有的图像命名为类似的,除了一个数字值,并让它们根据值进行更改。就像这样。

代码语言:javascript
运行
复制
document.documentElement.style.setProperty('--background-image', 'url({`smiley${number}.png`)')

UPDATE2

多亏了kenput3r,我最终从图像文件夹导入了图像,然后为图像创建了一个数组。

代码语言:javascript
运行
复制
const number = Math.round(event.target.value)

    const smileys = ['', smiley1, smiley2, smiley3, smiley4, smiley5]

    document.documentElement.style.setProperty('--background-image', `url(${smileys[number]})`)

我仍然希望对其进行重构,这样我就不必创建数组了,但我认为这很大程度上解决了我的问题。感谢大家的帮助。

这个添加图像、字体和文件的链接绝对是有帮助的。

这是滑块

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-09 14:25:21

构建之后,相对路径不起作用。

导入您的图像如下所示,并为src使用变量

博士在这里添加图像、字体和文件

代码语言:javascript
运行
复制
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})`);

如果要按索引访问它们,则始终可以将它们放在数组中:

代码语言:javascript
运行
复制
const smileys = [smiley1, smiley2, smiley3, smiley4];
document.documentElement.style.setProperty(`--background-image`, `url(${smileys[0]})`);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62804992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档