鼠标点击出现文字、表情、图片等等等

有些博客点击点击空白处会出现各种文字、表情、小图片等向上飘动,并逐渐消失。

实现起来很简单。

原理:通过点击事件获取pageX、pageY,创建元素(div、span、img等),加入到body中,添加特定class、id名,给定transition/animation从而实现响应效果。

以下是粗糙的实现方式

js:

  useEffect(()=>{
    dom = document.documentElement
    dom.addEventListener('click',handleClick)
    return ()=>{
      dom.removeEventListener('click',handleClick)
    }
  },[])

  function handleClick(e:MouseEvent){
    let text:string = '你'
    switch (count.current){
      case 0:
        text = '你'
        count.current++
        break;
      case 1:
        text = '好'
        count.current++
        break;
      case 2:
        text = '帅'
        count.current++
        break
      case 3:
        text = '我'
        count.current++
        break;
      case 4:
        text = '好'
        count.current++
        break;
      case 5:
        text = '爱'
        count.current = 0
        break
      default:
        text = '你'
        count.current = 0
    }
    let t = document.createTextNode(text)
    let span = document.createElement('span')
    span.id = 'clickSpan'+count.current
    span.className = 'animateSpan span'
    let x = e.pageX
    let y = e.pageY
    span.style.position = 'absolute'
    span.style.top = y - 10 + 'px'
    span.style.left = x - 10 + 'px'
    span.appendChild(t)
    dom.appendChild(span)
    setTimeout(()=>{
      span.style.top = y - 100 + 'px'
      span.style.opacity = '0'
    })
    setTimeout(()=>{
      dom.removeChild(span)
    },1000)

  }

less:

.span{
  position: absolute;
  left: 0;
  top: 0;
  color: #333;
  pointer-events: none;
}
.animateSpan{
  color: red;
  opacity: 1;
  z-index: 999;
  transition: all 1s linear;
}
#clickSpan0{
  color: aqua;
}
#clickSpan1{
  color: sandybrown;
}
#clickSpan2{
  color: darkcyan;
}

效果:

可以根据需求,把文字换成图片或者其他内容。

文章只提供思路,代码可以优化的地方很多,如果要使用,可以根据具体需求优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值