前端vue自定义鼠标指针的图标并且单击鼠标时点击的地方会出现烟花特效

//实现在某一个div内鼠标的指针形状呈自定义的图标  。(也可以全局定义,当前时在某一个div内的实例)
//DOM
<div class="firework-container" @click="createFirework"></div>

//js部分

const createFirework = (event) => {

  const numParticles = Math.floor(Math.random() * 5) + 8; // 随机生成圆圈个数

  const colors =['red', 'green', 'blue', 'yellow', '#ff0000', '#00ff00', '#0000ff', '#FF8888', '#FDD55', '  #BBFF66', '#77FFEE', '#9999FF', '#FF77FF']; // 圆圈可选颜色数组

  const fireworkContainer = document.querySelector('.firework-container');
  for (let i = 0; i < numParticles; i++) {

    const firework = document.createElement('div');

    firework.className = 'firework';

    firework.style.left = event.clientX + 'px';

    firework.style.top = event.clientY + 'px';

    firework.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)]; 

    fireworkContainer.appendChild(firework); // 添加到容器中

    //移动的角度随机

    const angle = Math.random() * Math.PI * 2; // 任意角度

    // 移动距离随机

    const distance = Math.random() * 200 + 50; // 随机移动距离50 ~250像素

    const offsetX = Math.cos(angle) * distance;

    const offsetY = Math.sin(angle) * distance;

   //添加css动画

    firework.style.animation = `move 1s linear forwards`;

    firework.style.setProperty('--offsetX', `${offsetX}px`);// 设置x的偏移量

    firework.style.setProperty('--offsetY', `${offsetY}px`); // 设置Y的偏移量

    //动画结束移除小圆圈

    setTimeout(() => {

      firework.remove();

    }, 1000);

  }

};

//CSS样式

<style>

.firework-container {

  cursor: url(/xxx/xxx/xxx.png), auto;   //自定义图标的路径

  position: relative;

  width: 100%;

  height: 100%;

}

.firework {

  position: absolute;

  width: 5px;

  height: 5px;

  border-radius: 50%;

}

@keyframes move {

  0% {

    opacity: 1;

    transform: translate(0);

  }

  100% {

    opacity: 0;

    /* Use custom CSS properties for final position */

    transform: translate(var(--offsetX), var(--offsetY));

  }

}

</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值