transition.tween

对于每一个选择的元素插入帧,第一个参数是要改变的’attr’,’style’,’text’,第二个参数是一个函数。
对于每一个选择的元素会传入当前的datum ‘d’,索引 index 'i',当前的元素对象this,以及ease方法的时间t(范围是[0,1])

更改填充属性

transition.tween("attr.fill", function() {
  var node = this, i = d3.interpolateRgb(node.getAttribute("fill"), "blue");
  return function(t) {
    node.setAttribute("fill", i(t));
  };
});

更改值

transition.tween("text", function() {
    var i = d3.interpolateRound(100, 200);
    return function(t) {
        this.textContent = i(t);
    };
});

还有一些快捷的方法

transition.attrTween("fill", function() {
  return d3.interpolateRgb("red", "blue");
});
transition.attrTween("fill", function() {
  return d3.interpolateRgb(this.getAttribute("fill"), "blue");
});
transition.styleTween("fill", function() {
  return d3.interpolateRgb("red", "blue");
});
transition.styleTween("fill", function() {
  return d3.interpolateRgb(this.style.fill, "blue");
});
好的,下面是使用tween.js实现的打开盒子的动画示例代码: HTML部分: ```html <div id="box"></div> ``` CSS部分: ```css #box { width: 100px; height: 100px; background-color: #ccc; position: relative; overflow: hidden; } #box:before { content: ''; display: block; width: 60px; height: 60px; background-color: #fff; position: absolute; top: 20px; left: 20px; transform: rotate(-45deg); transition: transform 0.5s ease; } #box.open:before { transform: rotate(0deg); } ``` JavaScript部分: ```javascript // 创建动画对象 var tween = new TWEEN.Tween({ angle: -45 }) .to({ angle: 0 }, 500) // 盒子打开的动画时间 .easing(TWEEN.Easing.Quadratic.Out) // 缓动函数 .onUpdate(function () { // 更新盒子伪元素的旋转角度 var angle = this.angle; document.querySelector('#box:before').style.transform = 'rotate(' + angle + 'deg)'; }); // 监听盒子的点击事件,打开盒子 document.querySelector('#box').addEventListener('click', function () { // 添加.open类,触发伪元素旋转的动画 this.classList.add('open'); // 开始动画 tween.start(); }); // 循环渲染动画 function animate() { requestAnimationFrame(animate); TWEEN.update(); } animate(); ``` 这段代码主要实现了以下功能: 1. 点击盒子时,盒子添加.open类,触发伪元素旋转的动画; 2. 创建动画对象,使用tween.js实现盒子打开的动画; 3. 监听动画对象的更新事件,更新盒子伪元素的旋转角度; 4. 循环渲染动画。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值