首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"window.innerWidth < 768“在Next.js中的帧运动

"window.innerWidth < 768“在Next.js中的帧运动
EN

Stack Overflow用户
提问于 2021-07-08 09:21:48
回答 2查看 1.1K关注 0票数 0

我想控制动画(Framer )何时可以使用window.innerWidth运行,但是在Next.js中我得到了以下错误消息:

ReferenceError: window is not defined

这是我的组件ValuesSection.jsx的简化版本:

代码语言:javascript
复制
import React, { useEffect } from "react";
import { useInView } from "react-intersection-observer";
import { motion, useAnimation } from "framer-motion";

export default function ValuesSection() {
  const controls = useAnimation();
  const [ref, inView] = useInView();
  const MobileView = {};
  const isMobile = window.innerWidth < 768;
  if (!isMobile) {
    MobileView = {
      visible: { y: 0, scale: 1 },
      hidden: { y: 250, scale: 0 },
    };
  }

  useEffect(() => {
    if (inView) {
      controls.start("visible");
    }
  }, [controls, inView]);

  return (
<>
 <motion.div
  key={value.name}
  ref={ref}
  animate={controls}
  initial="hidden"
  variants={MobileView}
 >Some content</motion.div>
</>

你能帮我理解我做错了什么吗?如果你能提供给我一个工作的例子,这将是伟大的和感激的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-08 09:59:11

在next.js项目中使用屏幕大小的最好方法是,当屏幕宽度大于或小于定义值时,可以使用来自materiial ui的Hook表示真或假,在我看来,它比window更好,因为它有很多选项,您可以在这里使用,这是您应该一步一步地做的事情

如果您还没有安装资料ui,请先安装

代码语言:javascript
复制
// with npm
npm install @material-ui/core

// with yarn
yarn add @material-ui/core

然后在组件内部导入并定义它。

代码语言:javascript
复制
import { useMediaQuery } from "@material-ui/core";


export default function ValuesSection() {

const IsTabletOrPhone = useMediaQuery("(max-width:1024px)");

如果屏幕大小大于1024px,则返回false,否则返回true

所以你可以用它

代码语言:javascript
复制
  if (!IsTabletOrPhone) {
    MobileView = {
      visible: { y: 0, scale: 1 },
      hidden: { y: 250, scale: 0 },
    };
  }

更新:

也许是因为我给它分配了一个大写字母,您可以尝试用小写将名称更改为isTabletOrPhone,如果不起作用,尝试将其改为let

代码语言:javascript
复制
let isTabletOrPhone = useMediaQuery("(max-width:1024px)");
票数 3
EN

Stack Overflow用户

发布于 2021-07-08 10:48:08

在Next.js中,页面是在服务器上预先录制的。在服务器上没有窗口。您可以先检查窗口是否存在,然后再访问它。

代码语言:javascript
复制
const isMobile = global.window && window.innerWidth < 768;

请注意,用户可以旋转电话或调整窗口大小,因此您应该将调整尺寸事件处理程序添加(并清理)到useEffect中。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68298868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档