当前位置:   article > 正文

Vue3+ElementUIPlus颜色选择器,Ruoyi框架动态替换图片_element-plus --el-bg-color-page

element-plus --el-bg-color-page

需求为,需要动态的替换头部和底部图片的颜色,通过固定的颜色

 

要实现可以动态的通过颜色,去替换的效果。

一、通过将选择的颜色,通过Vuex来进行一个存储,用户后续的使用

  1. <el-form-item label="顶部底部背景" prop="menuColor">
  2. <div class="content-picker">
  3. <el-color-picker
  4. popper-class="custom-color-picker"
  5. :predefine="preColors"
  6. v-model="customForm.menuColor"
  7. ></el-color-picker>
  8. </div>
  9. </el-form-item>
  10. /**改变主题 */
  11. const changeTheme = () => {
  12. handleTheme('theme-custom',
  13. {
  14. menuBgColor: customForm.value.menuBgColor,
  15. menuColor: customForm.value.menuColor,
  16. menuTextColor: customForm.value.menuTextColor,
  17. headerTextColor: customForm.value.menuTextColor,
  18. });
  19. showCustomDia.value = false;
  20. }
  21. /**自定义顶部底部颜色的数组 */
  22. const preColors = ref([
  23. '#000000',
  24. '#00B578',
  25. '#07B9B9',
  26. '#8A38F5',
  27. '#396BDF',
  28. '#808080',
  29. '#EB2F96',
  30. '#FA5151',
  31. '#FF8F1F',
  32. '#FFC300',
  33. ])

并且自定义出你需要的颜色,并且修改el-color-picker的样式。由于我们自定义了下拉的样式

popper-class="custom-color-picker",所以不用担心会对颜色选择器造成影响。

 

  1. <style lang="less">
  2. .content-picker{
  3. display: flex;
  4. flex-direction: column;
  5. align-items: center;
  6. justify-content: center;
  7. }
  8. .custom-color-picker {
  9. .el-color-predefine {
  10. width: 300px !important;
  11. }
  12. .el-input__inner,
  13. .el-color-dropdown__link-btn,
  14. .el-color-predefine__color-selector {
  15. margin: 8px 10px !important;
  16. height: 40px !important;
  17. width: 40px !important;
  18. }
  19. .el-color-dropdown__main-wrapper {
  20. margin-bottom: 6px;
  21. display: none;
  22. }
  23. .el-input--small .el-input__wrapper {
  24. padding: 1px 7px;
  25. display: none;
  26. }
  27. }
  28. </style>

 通过这样的样式后,样式就会变成图片的效果这样,并且进行了一定程度的优化,可以有清空的按钮。后续通过保存,将这个颜色保存到Vuex中。

二.动态替换选择的颜色的图片

将你需要替换的颜色以去掉#的形式存放在asset的目录下 (简而言之,去掉 # 是为了确保路径的正确解析和访问,因为 # 在 URL 和文件系统中可能会被特殊处理。)

 

这样我们可以通过Vuex取出拿到的颜色,可以与你存储在asset目录下的图片的颜色保持一致。

  1. /**
  2. * 系统设置
  3. */
  4. const storeSettings = computed(() => store.state.settings);
  5. const menuColor = computed(() => {
  6. return storeSettings.value.menuColor ? storeSettings.value.menuColor.replace('#', '') : undefined;
  7. })
  8. const getBackgroundImageUrl = (color) => {
  9. if (!color) {
  10. return new URL(`../../../assets/images/layout/Bottom_Nav2.png`, import.meta.url).href;
  11. }
  12. return new URL(`../../../assets/logo_menui/${color}/bottom.png`, import.meta.url).href;
  13. }
  14. const bottomNavBgUrl = computed(() => getBackgroundImageUrl(menuColor.value));

 如果传的颜色为空的话,那就说明没有设置,需要给一个默认的图片。

通过以上方法bottomNavBgUrl.value的值就是一个图片的地址

  1. <div class="Bottom_Nav" :class="{ 'has-logo': settings.sidebarLogo }">
  2. <style lang="scss" scoped>
  3. .el-menu {
  4. background-color: rgb(255, 255, 255, 0);
  5. width: 100%;
  6. }
  7. .Bottom_Nav {
  8. //background-image: url(@/assets/images/layout/Bottom_Nav.png) !important;
  9. background-image: url(@/assets/images/layout/Bottom_Nav2.png);
  10. //background-image: url(@/assets/logo_menui/FFC300/bottom.png) !important;
  11. background-size: 100% 100% !important;
  12. // position: absolute!important;
  13. // bottom: -22px!important;
  14. //background-color: rgb(255, 255, 255, 0) !important;
  15. background-repeat: no-repeat !important;
  16. padding: 0 15%;
  17. //padding-left: 8%;
  18. }
  19. </style>
  1. onMounted(() => {
  2. // 获取第一个具有类名 .Bottom_Nav 的元素
  3. const bottomNav = document.querySelector('.Bottom_Nav');
  4. if (bottomNav) {
  5. bottomNav.style.backgroundImage = `url(${bottomNavBgUrl.value})`;
  6. }
  7. });

通过document的方式取到class为Bottom_Nav的类(可以自行替换) 

通过设置backgroudImage的方式将图片的以url()的形式替换为自定义颜色的图片。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/332410
推荐阅读
相关标签
  

闽ICP备14008679号