开发者问题收集

TweenMax 无法正确初始化:“未捕获无法补间空目标。”

2015-12-15
10137

在我的应用中,我尝试使用 GSAP 的 TweenMax/TimelineMax 库 来为更改添加动画效果,但我的代码中出现了早期错误。简化(这是一个使用 ES6 的 React/Redux 应用):

import TimelineMax from 'gsap';
import TweenMax from 'gsap';
import GSAP from 'gsap-react-plugin';
import ReactDOM from 'react-dom';

someFunction() {
    var mailboxDropdown = ReactDOM.findDOMNode( this.refs.mailboxDropdown );
    // TweenLite.to(this, 0.1, { "y-offset": '-50px', 'opacity' : 0 });
    console.log(mailboxDropdown)
    var tl = new TimelineMax();
    console.log('here');
    tl.to(mailboxDropdown, 0.4, { "y-offset": '-50px' }, 'slideUp' )
    tl.to(mailboxDropdown, 1, { opacity: 0 }, 'slideUp-=.5');
};

错误很奇怪。首先,如果我不使用对象(例如 new TimelineMax({repeat: 1}) )初始化 TimelineMax(尽管文档说其默认构造函数参数为 null ),它甚至在到达 console.log('here') 之前就会抛出错误。

Uncaught Cannot tween a null target.

如果我 确实 使用对象初始化它,如上一句所述,则在尝试调用 tl.to 时会出错。具体来说:

Uncaught TypeError: tl.to is not a function

即使 to 在文档中 肯定 存在。 tl 对象似乎是 TweenMax 对象:

TweenMax {vars: Object, _totalDuration: 0, _duration: 0, _delay: 0, _timeScale: 1…}

但它对大多数方法没有响应,包括 add 和许多其他方法。

知道这是怎么回事吗?这对我来说非常令人困惑,因为所有文档/教程似乎都表明我所做的一切正常,并且所有相关对象( mailboxDropdown 等)似乎都定义正确。

3个回答

在发布此问题之前(经过大量搜索和盲目实验),我发现问题实际上与导入有关。我不确定 为什么 ,但删除 TimelineMax 导入解决了问题,因此原始代码中的所有内容都可以正常工作。也就是说,我的导入应该是这样的:

import TweenMax from 'gsap';
import GSAP from 'gsap-react-plugin';
import ReactDOM from 'react-dom';

不是这样的:

import TimelineMax from 'gsap';
import TweenMax from 'gsap';
import GSAP from 'gsap-react-plugin';
import ReactDOM from 'react-dom';

某种命名空间冲突/覆盖?

Sasha
2015-12-15

从“gsap/TimelineMax”导入 TimelineMax; 成功了

Majid Eltayeb
2018-03-24

根据 Greensock NPM 文档 ,您可以使用括号表示法指定单独的导出:

import {TimelineMax, TweenMax} from 'gsap'
benjarwar
2018-03-30