JS mouseenter -> 加速度值增加; mouseleave -> 减速值减小

Posted

技术标签:

【中文标题】JS mouseenter -> 加速度值增加; mouseleave -> 减速值减小【英文标题】:JS mouseenter -> acceleration value increases; mouseleave -> deceleration value decreases 【发布时间】:2019-11-28 19:38:28 【问题描述】:

我正在尝试实现鼠标悬停效果。 当用户悬停元素时,它开始缓慢旋转,随着时间的推移速度会增加。当用户离开元素时,旋转会减少并最终停止。

我的方法是设置一个循环,将给定值乘以 1。 这行得通。

现在,当用户离开时,我必须以某种方式获取该值并将其除以某个数字。那是行不通的:-(

这是我的代码,我使用 jQuery

https://codepen.io/hhqh/pen/gOOVQPV?editors=1011

var deg = 1;
var img;

var keepGoing = true;
var keepStopping = true;

function myLoop(img) 
  console.log(img);
  deg *= 1.1;
  console.log(deg);
  img.css('transform', 'rotate(' + deg + 'deg)');

  if(keepGoing) 
    setTimeout(myLoop, 30, img);
  


function myStop(img) 

  console.log(img);
  deg /= 1.1;
  console.log(deg);
  img.css('transform', 'rotate(' + deg + 'deg)');

  if(keepStopping) 
    setTimeout(myStop, 30, img);
  




$('#spinner').on('mouseenter', function()
  var img = $(this).find('img');
  startLoop(img);
).on('mouseleave', function()
  var img = $(this).find('img');
  stopLoop(img);
);

function startLoop(img) 
  keepGoing = true;
  keepStopping = false;
  myLoop(img);


function stopLoop(img) 
  keepGoing = false;
  keepStopping = true;
  myStop(img);

如您所见,它只是跳回。我想慢慢减少值,但因为它旋转并且只是将数字相加,减少实际上是向后旋转它。 也许我必须得到当前的旋转,并做一个新的微积分,它是如何增加一个递减的数字。不知道如何..

【问题讨论】:

【参考方案1】:

你必须在特定条件下停止myStop函数,当旋转度数在起始位置时。

function myStop(img) 

  console.log(img);
  deg /= 1.1;
  console.log(deg);
  if (deg.toFixed(1) < 0.1) 
    return;
  
  img.css('transform', 'rotate(' + deg + 'deg)');

  if(keepStopping) 
    setTimeout(myStop, 30, img);
  

【讨论】:

以上是关于JS mouseenter -> 加速度值增加; mouseleave -> 减速值减小的主要内容,如果未能解决你的问题,请参考以下文章

将localStorage值增加一

mouseenter和hover的区别

在 mouseenter 上引导轮播循环并在 mouseleave + 间隔上暂停

safari、edge 和 IE 上的 mouseenter 和 mouseleave

jquery鼠标移入移出

js每日一练京东无延迟菜单