最近在学习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的强大之处.不行,我要好好学这个东西.