javascript - 如何在js中用两个不同的间隔为一个组件设置动画

标签 javascript reactjs jquery-animate state setinterval

我需要在名为 character 的组件上制作嘴巴动画。 我想做的是使用名为 openned 的状态来处理我的嘴巴状态。

我需要嘴部动画每 2 秒运行一次,以让 Angular 色有间隔地说话。这个想法是在下面显示文本,只有当文本出现时嘴才需要移动。

 state = {
openned : false
 }

  handleMouthState = () => {
this.setState({
  openned : ! this.state.openned
});
  }

  animeMouth = () => {
setInterval(this.handleMouthState.bind(this), 100);
  }

  animMouthWithInterval = () => {
setInterval( this.animeMouth.bind(this), 2000 );
  }

  componentDidMount() {
  setTimeout( this.animMouthWithInterval.bind(this) , 6000);
  }

这是我试过的代码,它运行良好,除了 animMouth 函数继续运行,即使它以 2 秒的间隔调用,我除了停止动画然后重新加载它

最佳答案

  1. 停止直接在 setInterval 中进行绑定(bind),而是在构造函数中进行。每次触发 setInterval 时它都会创建一个新函数,这是不好的。所以删除绑定(bind)。
  2. 你所有的函数都是箭头函数,因此不需要绑定(bind)
  3. 在执行 setInterval 之前清除之前的计时器

这是更新后的代码

   state = {
       openned : false
   }

   handleMouthState = () => {
       this.setState({
          openned : ! this.state.openned
       });
   }

  animeMouth = () => {
       if(this.mouthInterval){
             clearInterval(this.mouthInterval);
       }
       this.mouthInterval = setInterval(this.handleMouthState, 100);
  }

 animMouthWithInterval = () => {
     if(this.animeInterval){
             clearInterval(this.animeInterval);
       }
     this.animeInterval = setInterval( this.animeMouth, 2000 );
 }

 componentDidMount() {
     setTimeout( this.animMouthWithInterval,  6000);
 }

关于javascript - 如何在js中用两个不同的间隔为一个组件设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54652508/

相关文章:

jquery - jQuery 中 .animate 之后未执行 function() 调用的问题

使用宽度时 jQuery 动画故障 : "hide" + width: "show"

javascript - Href 动态链接

javascript - script标签如何解析node_modules的路径?

javascript - 自动扩展行和子行使用钩子(Hook) react 表

javascript - 如何修复响应 : {type: "cors"} when trying to create payment through paypal api

javascript - Cytoscape.js 中是否可以有双向边缘?

javascript - 正则表达式对 javascript block 注释执行全局匹配

html - 按钮内的可访问嵌套按钮?

javascript - 用于转到鼠标坐标的 Canvas 动画