css 背景-剪辑文本鼠标跟踪动画

0g0grzrc  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(114)

我想跟踪用户的鼠标和显示渐变文本使用background-clip: text;
文本应该总是可见的黑色。只有当鼠标悬停在文本上时,渐变才会出现(在文本内部),并随着鼠标移动而移动。
这样的事情可能吗?
我发现这个tutorial在他们的动画背景。然而,当我试图添加background-clip: text;它不工作了。
这是我得到的:

const button = document.querySelector(".shiny");

button.addEventListener("mousemove", (e) => {
  const { x, y } = button.getBoundingClientRect();
  button.style.setProperty("--x", e.clientX - x);
  button.style.setProperty("--y", e.clientY - y);
});
.shiny {
  position: relative;
  display: block;
  color: black;
  padding: 10px 15px;
  background: #3984ff;
  border-radius: 10px;
  font-weight: bold;
  font-size: 33px;
  overflow: hidden;
}

.shiny::after {
  content: "";
  position: absolute;
  top: calc(var(--y, 0) * 1px - 50px);
  left: calc(var(--x, 0) * 1px - 50px);
  width: 100px;
  height: 100px;
  opacity: 0;
  transition: opacity 0.4s;
}

.shiny:hover::after {
  opacity: 0.9;
  background: radial-gradient(black, red 80%);
 
  *-webkit-background-clip: text;
    *background-clip: text;
    *-webkit-text-fill-color: transparent;
}
<a class="shiny" href="">BIG AND BOLD TEXT</a>
9avjhtql

9avjhtql1#

你不应该使用一个伪元素,而应该使用多个背景层:

const button = document.querySelector(".shiny");

button.addEventListener("mousemove", (e) => {
  const { x, y } = button.getBoundingClientRect();
  button.style.setProperty("--x", (e.clientX - x)+"px");
  button.style.setProperty("--y", (e.clientY - y)+"px");
});
.shiny {
  display: block;
  color: #000;
  padding: 10px 15px;
  background: 
    radial-gradient(50px at var(--x,0) var(--y,0),red,#000),
    #3984ff;
  -webkit-background-clip: text,padding-box;
          background-clip: text,padding-box;
  border-radius: 10px;
  font-weight: bold;
  font-size: 33px;
  text-decoration: none;
  transition: .3s;
}
.shiny:hover {
 color:#0000;
}
<a class="shiny" href="">BIG AND BOLD TEXT</a>

相关问题