好久没更了!最近在学习svg动画

2018-06-15 11:53:36 浏览数 (1)

最近在学习svg,原来svg这么好用,完全就是只有想不到,只有做不到的动画!

在react中使用svg也是非常方便的,可以直接调用,用react的state来控制动画也很方便,至少比jquery或者原生方便太多了.

代码语言:javascript复制
<svg
  width='1000'
  height='400'
  xmlns="http://www.w3.org/2000/svg"
>
  <text style={{fontSize:10}} ref={ref => this.textaaa = ref} id="textexa" x="100" y="100" dx={this.state.dx} dy={this.state.dy}>
    ABCDEFGHIGKLMN
  </text>
</svg>
<div>
  <Button onClick={this.click.bind(this)}>点击运动</Button>
  
</div>

以上是我在react使用svg的动画,实现一个小小的动画.

代码语言:javascript复制
componentDidMount() {
 this.run(0);
}
代码语言:javascript复制
run(t){
  let array = [];
  let n = 16;
  let j = n;
  while (n--) {
    array.push(10)
  }
  let arrayY = [];
  let ly = 0;
  for (let i = 0; i < j; i  ) {
    let cy = -100 * Math.sin(0.02 * i * 20   t);
    arrayY.push(cy - ly);
    ly = cy;
  }
  this.setState({
    dx:array.join(' '),
    dy:arrayY.join(' ')
  })
  // while (this.state.n--) this.state.y.push(10);
  // this.textaaa.setAttribute('dx', array.join(' '));
  // this.textaaa.setAttribute('dy', arrayY.join(' '))
}
click() {
  let self = this;
  let t = self.state.t;
  t =0.02;
  this.setState({
    t
  });
  this.run(t);
  requestAnimationFrame(self.click.bind(this))
}

首先在componentDidMount中初始化一个上下的小波动,run(0),这个参数是用来控制上下波动的,这个函数里有几处逗比的写法,请见谅.

然后在点击按钮中,通过requestAnimationFrame的方法,来重复调用click事件,这里需要注意的是this,可能会找不到上下文,注意BInd一下,这样就可以绑定了.

非常简单的一个小动画,也充分说明了svg的强大之处.不行,我要好好学这个东西.

0 人点赞