Skip to content
📈0️⃣

滑动鼠标修改卡片颜色色值

效果演示




代码展示

vue
<script setup>
// 滑动鼠标修改色值 hsl(num, 91%, 95%)
import { onMounted } from "vue";
const initCard = (vm) => {
  const html = document.documentElement;
  const defaultColor =
    getComputedStyle(html).getPropertyValue("--bg-card-color");
  let x = 37;
  vm.addEventListener("mousemove", function (event) {
    x = event.clientX;
    html.style.setProperty("--bg-card-color", defaultColor.replace(/(\d+)/, x));
  });
  vm.addEventListener("mouseout", function (event) {
    x = 37;
    html.style.setProperty("--bg-card-color", defaultColor);
  });
};

onMounted(() => {
  initCard(document.querySelector(".test-a-bg-box .card"));
});
</script>
vue
<template>
  <section class="test-a-bg-box">
    <div class="card"></div>
  </section>
</template>
vue
<style lang="scss">
:root {
  --bg-card-color: hsl(37, 91%, 95%);
  --bg-card-shadow: silver;
}
// 深色主题, 即 color-scheme: dark;
html.dark {
  --bg-card-color: hsl(37, 18%, 35%);
  --bg-card-shadow: #000000;
}
.test-a-bg-box {
  .card {
    width: 260px;
    height: 150px;
    border-radius: 16px;
    box-sizing: border-box;
    text-align: center;
    font-size: 18px;
    line-height: 2;
    color: #666666;
    user-select: none;
    filter: drop-shadow(0 0 9px var(--bg-card-shadow));
    /* 1. 圆半径10px => x轴0px y轴50% */
    background-image: radial-gradient(
        10px at 0px 50%,
        transparent 100%,
        var(--bg-card-color) 100%
      ),
      radial-gradient(
        10px at 20px 50%,
        transparent 100%,
        var(--bg-card-color) 100%
      ),
      linear-gradient(0deg, var(--bg-card-color), var(--bg-card-color));
    background-repeat: no-repeat, no-repeat, no-repeat;
    background-size: 20px 100%, 20px 100%, calc(260px - 40px) 100%;
    background-position: 0px 0px, calc(260px - 20px) 0px, 20px 0px;
    transition: 0.3s background-image ease;
  }
}
</style>