首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的Javascript代码中的元素在达到200 it后不停止移动?

为什么我的Javascript代码中的元素在达到200 it后不停止移动?
EN

Stack Overflow用户
提问于 2021-05-12 02:02:08
回答 2查看 70关注 0票数 0

代码中的"voila“元素在达到200 in后不会停止吗?

代码的逻辑有什么问题?

那我该怎么做呢。

代码语言:javascript
复制
var voila = document.querySelector(".voila");
voila.textContent = "hahahaha";
voila.style.position = "absolute";


setInterval(function() {
  var left = parseInt(window.getComputedStyle(voila).getPropertyValue("left"));
  if (left >= 0) {
    voila.style.left = left + 2 + "px";
  } else if (left <= 200) {
    voila.style.left = left - 10 + "px";
  }
}, 10);
代码语言:javascript
复制
* {
  padding: 0;
  margin: 0;
}
代码语言:javascript
复制
<div class="voila"></div>

有什么帮助吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-12 02:27:22

我觉得你想这么做。

代码语言:javascript
复制
var voila = document.querySelector(".voila");
voila.textContent = "hahahaha";
voila.style.position = "absolute";


setInterval(function() {
  var left = parseInt(window.getComputedStyle(voila).getPropertyValue("left"));
  if (left >= 0 && left <= 200) {
    voila.style.left = left + 2 + "px";
  }
}, 10);
代码语言:javascript
复制
* {
  padding: 0;
  margin: 0;
}
代码语言:javascript
复制
<div class="voila"></div>

以及css的方法(更好)

代码语言:javascript
复制
.voila {
  x-transition: all 1s ease-in-out;
  animation: anim 1.7s infinite;
  position: absolute;
}

@keyframes anim {
  0% {
    left: 0;
  }
  50% {
    left: 200px;
  }
  100% {
    left: 0;
  }
}
代码语言:javascript
复制
<div class="voila">ABC</div>

票数 2
EN

Stack Overflow用户

发布于 2021-05-12 02:29:18

这部分else if (left <= 200)是无意义的。

你可以这样做:

代码语言:javascript
复制
const voila = document.querySelector('.voila');
voila.textContent    = 'hahahaha';
voila.style.position = 'absolute';
voila.mov = { pos: 0, min: 0, max:200, stepOn: 2, stepBack: -10, step: 2 }


setInterval(() =>
  {
  voila.mov.pos += voila.mov.step

  if (voila.mov.pos >= voila.mov.max) voila.mov.step = voila.mov.stepBack
  if (voila.mov.pos <= voila.mov.min) voila.mov.step = voila.mov.stepOn
 
  voila.style.left = `${voila.mov.pos}px`
  }, 10) 
代码语言:javascript
复制
* {
  padding : 0;
  margin  : 0;
}
代码语言:javascript
复制
<div class="voila"></div>

您也可以使用requestAnimationFrame()

代码语言:javascript
复制
const voila  = document.querySelector('.voila')
 
voila.textContent    = 'hahahaha';
voila.style.position = 'absolute';
voila.mov = { pos: 0, min: 0, max:200, stepOn: 2, stepBack: -10, step: 2 }

function movInOut()
  {
  voila.mov.pos += voila.mov.step

  if (voila.mov.pos >= voila.mov.max) voila.mov.step = voila.mov.stepBack
  if (voila.mov.pos <= voila.mov.min) voila.mov.step = voila.mov.stepOn

  voila.style.left = `${voila.mov.pos}px`

  requestAnimationFrame(movInOut)
  }
requestAnimationFrame(movInOut)
代码语言:javascript
复制
*{
  padding: 0;
  margin: 0;
}
代码语言:javascript
复制
<div class="voila"></div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67496435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档