react中去掉定时器失败

react中去掉定时器失败

最近遇见一个需求,鼠标进入动画开始,鼠标移出动画从当前位置倒放,于是参照别人的网站,没有用MP4而是把动画的每一帧搞成一张长图,通过移动图片的background-position-y来展现动画效果。

具体大概就是使用定时器,鼠标进入时,定时器开始,当图片到底部时,清除这个定时器;
然后鼠标移出时,先清除之前的那个进入时的定时器(所以鼠标进入时,也要先清除倒放的这个定时器),然后再开始倒放的定时器,到图片开始的位置时,再清除当前定时器。

思路大概就是这样,很简单,但却遇见了问题,那就是定时器清除不掉。
原因就是定时器要定义在全局

所以最后,代码就是这样的


var timer: any = null;//一定要定义在这个外面
const Home: FC<Iprops> = (props) => {
const [posiy, setPosy] = useState(0);
return(
<div
                        className={classNames(styles["box_img"])}
                        style={{
                          backgroundImage: "url(" + icon + ")",
                          backgroundPositionY: posiy + "px",
                        }}
                        onMouseEnter={(e) => {
                          e.stopPropagation();
                          clearInterval(timer);
                          timer[index] = setInterval(() => {
                            setPosy((posiy) => {
                              if (posiy> -900) {
                                posiy = posiy - 100;
                                return posiy ;
                              } 
                              else {
                                clearInterval(timer);
                                posiy = -900;
                                return posiy ;
                              }
                            });
                          }, 50);
                        }}
                        onMouseLeave={(e) => {
                          e.stopPropagation();
                          clearInterval(timer);
                          timer = setInterval(() => {
                            setPosy((posiy) => {
                              if (posiy < -100) {
                                posiy  = posiy  + 100;
                                return posiy ;
                              } 
                              else {
                                clearInterval(timer);
                                posiy= 0;
                                return posiy ;
                              }
                            });
                          }, 50);
                        }}
                      ></div>
)
}
export default Home;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值