16 文字阴影的鼠标随动效果

优质
小牛编辑
126浏览
2023-12-01

挑战任务

初始文件index-start.html中提供了一个包含了h1元素的div元素,h1元素已经设置了text-Shadow的样式。本次编程挑战中需要完成的效果是根据用户当前的鼠标位置来操纵文字阴影的位置。

实现效果

结果展示

基本知识

text-shadow样式为标准CSS3样式,用于添加一个或多个文字阴影,用于其的语法格式为:

  1. text-shadow: h-shadow v-shadow blur color

过程指南

1.在script标签中,我们使用3个变量,一个指向div元素,一个指向其子元素h1,最后一个变量factor用于标记阴影距离h1中心的距离和鼠标距离h1中心距离的比例,用于计算阴影的具体位置。

2.在hero元素上监听鼠标移动事件mousemove,并添加事件处理的回调函数shadowMove.

  1. hero.addEventListener('mousemove',shadowMove);

3.为获得第一个阴影的瞬时位置,需要通过鼠标位置距离h1中心的距离乘以factor系数来获得,pos表示鼠标当前位置的坐标,range指代hero元素的宽和高:

  1. var disX = parseInt((pos.x-range.x/2)*factor);
  2. var disY = parseInt((pos.y-range.y/2)*factor);

4.从事件发生的event对象中获取需要的值:

  1. var range = {
  2. x:hero.offsetWidth,
  3. y:hero.offsetHeight
  4. }
  5. var pos = {
  6. x:e.target.offsetLeft+e.offsetX,
  7. y:e.target.offsetTop+e.offsetY
  8. }

5.计算出h1元素第一个阴影位置后,可以以坐标镜像或旋转90°等不同的方式来生成其他阴影,本例中我们采用绕h1元素中心旋转90°的方式共生成4个阴影:

  1. text.style.textShadow = `
  2. ${xWalk}px ${yWalk}px 0 rgba(255,0,255,0.7),
  3. ${xWalk * -1}px ${yWalk}px 0 rgba(0,255,255,0.7),
  4. ${yWalk}px ${xWalk * -1}px 0 rgba(0,255,0,0.7),
  5. ${yWalk * -1}px ${xWalk}px 0 rgba(0,0,255,0.7)
  6. `;