D3.js 动画 过度属性

import * as D3 from 'd3'

export default class DThree {
  createSvg (result) {
    let svg = D3.select(result)
      .append('svg')
      .attr('width', '300')
      .attr('height', '300')
    let rect = svg.append('rect')
      .attr('width', 100)
      .attr('height', 30)
      .attr('x', 10)
      .attr('y', 10)
      .attr('fill', 'steelblue')
    let rectTran = rect.transition()
      .duration(2000)
      .attrTween('width', (d, i, a) => {
        return t => {
          return Number(a) + t * 300
        }
      })
    console.log(rectTran)
  }
  createSvgTwo (result) {
    let svg = D3.select(result)
      .append('svg')
      .attr('width', 300)
      .attr('height', 300)
    let rect = svg
      .append('rect')
      .attr('width', 100)
      .attr('height', 30)
      .attr('x', 10)
      .attr('y', 10)
      .style('fill', 'steelblue')
    let rectTran = rect.transition()
      .duration(2000)
      .style('fill', 'red')
    console.log(rectTran)
  }
  createTextSvg (result) {
    D3.select(result).append('svg').remove()
    let svg = D3.select(result)
      .append('svg')
      .attr('width', 500)
      .attr('height', 300)
    let rect = svg.append('rect')
      .attr('width', 100)
      .attr('height', 30)
      .attr('x', 10)
      .attr('y', 10)
      .style('fill', 'steelblue')
    let rectTran = rect.transition()
      .duration(2000)
      .attrTween('width', (d, i, a) => {
        return t => {
          return Number(a) + t * 300
        }
      })
    let text = svg.append('text')
      .attr('x', 100)
      .attr('y', 10)
      .text(100)
      .attr('dy', '1.2em')
      .style('fill', 'white')
      .attr('text-anchor', 'end')
    let initx = text.attr('x')
    let initText = text.text()
    let textTran = text.transition()
      .duration(2000)
      .tween('text', function () {
        return function (t) {
          D3.select(this).attr('x', Number(initx) + t * 300).text(Math.floor(Number(initText) + t * 300))
        }
      })
    console.log(textTran)
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值