如何让link的背景跟随光标?

How to make link's background follows cursor?

我正在尝试制作动画 link。根据光标从哪一侧输入 link - 它的背景应该从下到上或从上到下显示。链接应该有背景跟随光标的效果。

我设法使背景从下到上显示,但为什么反之不起作用?

Codepen

 <ul class="list">
  <li class="list__item">test link 1</li>
  <li class="list__item">test link 2</li>
  <li class="list__item">test link 3</li>
  <li class="list__item">test link 4</li>
  <li class="list__item">test link 5</li>
</ul>

.list__item {
  border: 1px solid red;
  display: flex;
  width: 300px;
  padding: 10px;
  cursor: pointer;
}

.from-top {
  transition: all .2s ease;
  background: linear-gradient(to bottom, red 50%, transparent 50%);
  background-position: top;
  background-size: 100% 200%;
}

.from-bottom {
  transition: all .2s ease;
  background: linear-gradient(to top, red 50%, transparent 50%);
  background-position: bottom;
  background-size: 100% 200%;
}


const list = document.querySelectorAll('.list__item');
list.forEach(item => {
   item.addEventListener('mouseover', (evt) => {
     if (evt.offsetY < 10) {
       console.log('top', evt.offsetY);
       item.classList.add('from-top');
     } else {
       console.log('bottom', evt.offsetY);
       item.classList.add('from-bottom');
     }
   });
  item.addEventListener('mouseleave', (evt) => {
    item.classList.remove('from-top');
    item.classList.remove('from-bottom');
  });
});

为了更好地理解这里发生的事情,我建议您弄清楚您实际上要为哪个 属性 制作动画。

我对你的笔做了一些修改,让它可以工作。 Here 你可以看到我的主要 属性 是 background-size

它在你的例子中用 from top 方向不起作用的原因是你动画 background-size 以及 background-position 初始值是top 并且你试图从 toptop 进行动画处理——这就是为什么在这种情况下没有任何反应,反之亦然 from bottom 方向,因为那里动画从最初的 top 变为您在 .from-bottom class.

中定义的 bottom