当前位置: 首页 > 知识库问答 >
问题:

react.js - 为什么wowjs在UmiJs 3.x中不生效?

齐昆
2024-05-25

插入一个在线编辑,欢迎尝试stackblitz

使用的场景:UmiJs 3.x

  1. 安装

    yarn add wowjs    // V1.1.3
  2. 引入

    import 'animate.css';import { WOW } from 'wowjs';
  3. 初始化

    useEffect(() => {  new WOW().init();}, []);
  4. 使用

    <div className="wow fadeInLeft"></div>
  5. 结果
    然而,并没有效果,设置wow的dom只是在初始化的时候有动画,并不会在浏览器滚动至该dom位置时开始动画。

尝试解决

百度了一些解决方案,以及自己尝试发现问题所在

  1. body设置了height: 100%;的问题
    结果:移除后依然不生效
  2. 关注到通过wow生成的class是animated而不是animate__animated(因为看到单独使用animate.css生成的class是animate__animated),于是初始化改为了:

    new WOW({ animateClass: 'animate__animated' }).init();

    结果:没用

  3. 看到控制台有两条警告
WOW.js cannot detect dom mutations, please call .sync() after loading new content.wow.js:139 MutationObserver is not supported by your browser.

于是初始化改为了

new WOW({ animateClass: 'animate__animated', live: false }).init();

结果:没用

  1. 使用class而不是className
    结果发现两者都能注入正确的class,却对问题并没有帮助

共有1个答案

田权
2024-05-25

wowjs在UmiJs 3.x中不生效的原因可能有多种,但根据你提供的信息和尝试的解决步骤,我可以给出一些可能的解释和建议:

  1. 确保依赖版本兼容:确保wowjsanimate.css的版本与你的UmiJs 3.x项目兼容。
  2. 滚动事件处理wowjs依赖滚动事件来触发动画。如果你的页面使用了某种滚动优化技术(如虚拟滚动、自定义滚动容器等),这可能会影响到wowjs的滚动事件监听。确保wowjs能够正确绑定到滚动事件上。
  3. CSS加载顺序:确保animate.csswowjs之前加载,因为wowjs需要依赖animate.css中的动画定义。
  4. 检查DOM结构wowjs需要在DOM结构完全加载后才能正确工作。确保你的动画元素在初始化wowjs时已经在DOM中了。
  5. MutationObserver警告:虽然你尝试通过设置live: false来禁用MutationObserver,但警告信息表明你的浏览器可能不支持MutationObserver。这通常发生在较旧的浏览器版本中。如果你的用户群中有使用这类浏览器的,你可能需要考虑一个替代方案或降级处理。
  6. 查看网络请求:检查浏览器开发者工具中的网络请求,确保wowjsanimate.css文件都已成功加载,没有404错误或其他网络问题。
  7. 检查控制台错误:除了警告信息外,还要检查控制台是否有其他错误。这些错误可能会提供关于问题的更多线索。
  8. 尝试简化代码:为了排除其他因素的干扰,你可以尝试在一个更简单的环境中(如一个单独的HTML文件)测试wowjs,以确保其能正常工作。然后逐步引入UmiJs 3.x的特性,观察何时出现问题。

基于你提供的信息,我无法确定确切的原因。但你可以尝试上述建议,逐步排查问题所在。如果问题仍然无法解决,你可能需要查看更详细的文档、搜索相关论坛或社区,或者考虑寻求专业的技术支持。

 类似资料:
  • 基于此,我认为我应该完全开始在中使用

  • 问题内容: 考虑以下示例: 我不确定Java语言规范中是否有一项规定要加载变量的先前值以便与右侧()进行比较,该变量应按照方括号内的顺序进行计算。 为什么第一个表达式求值,而第二个表达式求值?我本来希望先被评估,然后再与自身()比较并返回。 这个问题与Java表达式中子表达式的求值顺序不同,因为这里绝对不是“子表达式”。需要 加载 它以进行比较,而不是对其进行“评估”。这个问题是特定于Java的,

  • 这个问题与Java表达式中子表达式的求值顺序不同,因为在这里肯定不是“子表达式”。需要加载它进行比较,而不是“求值”。这个问题是特定于Java的,表达式来自一个真实的项目,而不是通常为棘手的面试问题而设计的牵强附会的不切实际的构造。它应该是比较和替换习语的一行替换 它比x86 CMPXCHG指令还要简单,因此在Java中应该使用更短的表达式。

  • 我读在初始渲染时只被调用一次,但我看到它被渲染了多次。 似乎我创建了一个递归循环。 组件didMount调度动作来获取数据 一旦接收到数据,它就会触发成功操作,将数据存储在redux状态。 父反应组件连接到redux存储,并且具有mapStateToProps用于刚刚在上述步骤中更改的条目 父渲染子组件(通过变量编程选择) 子组件的组件didMount再次被调用 它消除了获取数据的操作 我想这就是

  • 问题内容: 我期望值可以交换。但是它给出x = 0和y = 1。当我尝试使用C语言时,它会给出正确的结果。 问题答案: 您的陈述大致相当于这种扩展形式: 与C语言不同,在Java中,保证二进制运算符的左操作数在右操作数之前进行求值。评估如下: 您可以反转每个xor表达式的参数顺序,以便在再次评估变量之前完成赋值: 这是一个更紧凑的版本,也可以使用: 但这是交换两个变量的真正可怕的方法。使用临时变量