【发布时间】:2020-07-08 23:09:33
【问题描述】:
我正在为范围滑块创建一个 React 组件,其中滑块拇指是一个图像,该图像沿滑块条以某些值发生变化。
我尝试使用 CSS 类来做到这一点,方法是更改特定值的类,并为每个类分配一个来自本地图像文件夹的图像。这很好用,但我必须为我有图像的每个值创建一个类。如果您只有几张图片可以使用,这没什么大不了的,但我希望可以选择添加更多图片。
所以我想我会试一试 CSS 变量并使用 javascript 更改图像 url。我能够为background-color 找到一些有用的东西,但不适用于background-image,这是我真正想要改变的。
我可以为 background-image 和 background-color 设置 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.pngsmiley2.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]})`)
我仍然想稍微重构一下,这样我就不必创建数组了,但我认为这几乎解决了我的问题。感谢大家帮助我。
这个Link 关于添加图像、字体和文件肯定很有帮助。
【问题讨论】:
-
您是否尝试过仅将路径设置为自定义属性,然后像
background-image: url(var(--background-image-path))一样使用它?不确定这是否会有所帮助。你真的应该尽量减少问题上的代码,有很多代码,可能大部分不需要显示你的问题。您应该发布一个最小的示例代码来重现您的问题。 -
感谢您的回答。是的,我确实尝试了几种不同的变体,但我想我会再试一次。对不起所有的代码!我会减少一些。
-
Can't repro你能检查一下你的开发工具的网络面板,看看资源是否收集到了吗?
-
感谢您提供非常清晰的细分。您使用的是静态网站生成器吗?您也许可以将图像导入变量,而不是输入那些长的静态路径。我唯一能想到的是,相对路径仅在第一次有效,因为完整路径是在构建时生成的。
-
text/plain很奇怪,text/html肯定是 404 错误页面。您可以尝试转到浏览器尝试加载的页面吗(从 url 上的网络面板右键单击-> 在新选项卡中打开)
标签: javascript css reactjs