如果说声长,一个更好的方法?

use*_*511 0 javascript jquery

我有这个可怕的冗长代码,在鼠标移动时运行:

if (distance < 215) {
  moveSmile(1)
  }

if (distance < 200) {
 moveSmile(2)
}

if (distance < 185) {
 moveSmile(3)
}

if (distance < 170) {
 moveSmile(4)
}

if (distance < 155) {
  moveSmile(5)
}

if (distance < 140) {
  moveSmile(6)
}
Run Code Online (Sandbox Code Playgroud)

它所调用的功能:

 function moveSmile (frameNum) {
   mouthX = startMouthPos + mouthFrameWidth * frameNum
   $('#mouth').css('background-position', -mouthX + 'px -359px')
 }
Run Code Online (Sandbox Code Playgroud)

我以15px的间隔移动div的背景位置,越接近目标div.有没有办法让它更短,更有效?

Cer*_*rus 5

只是一个快速的公式应该做的伎俩:

moveSmile(Math.ceil((215 - distance) / 15);
Run Code Online (Sandbox Code Playgroud)
(230 - 215) / 15 == 1
(230 - 200) / 15 == 2
...
(230 - 140) / 15 == 6
Run Code Online (Sandbox Code Playgroud)

现在,Math.ceil用于将未整齐分隔的步骤中的值舍15入到相应的值.


Chr*_*ung 5

moveSmile(Math.ceil((215 - distance) / 15));
Run Code Online (Sandbox Code Playgroud)

  • 如果你仔细看看代码,那么它不是别的,而是一个if的系列.因此,如果距离为"139",它将运行`moveSmile(1); moveSmile(2); moveSmile(3)`等等.我不知道OP是否是一个错误. (2认同)