Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当滚动点击位置时显示元素_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript 当滚动点击位置时显示元素

Javascript 当滚动点击位置时显示元素,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我正在尝试做一个滚动到顶部按钮。我已经完成了上半部分的卷轴,但我正在努力完成显示部分。我错过了什么 当位置返回正确的值但我的“显示”不起作用时,show操作。这是我得到的 import React, { useEffect, useState } from 'react' import ArrowDown from "components/svg/ArrowDown" import { injectIntl } from "react-intl" import { useMediaQuery }

我正在尝试做一个滚动到顶部按钮。我已经完成了上半部分的卷轴,但我正在努力完成显示部分。我错过了什么

当位置返回正确的值但我的“显示”不起作用时,
show操作。这是我得到的

import React, { useEffect, useState } from 'react'
import ArrowDown from "components/svg/ArrowDown"
import { injectIntl } from "react-intl"
import { useMediaQuery } from 'react-responsive'
import { TO_MEDIUM } from 'core/ui/breakpoints'

const TheToTop = ({ intl }) => {
  const [windowHeight, setWindowHeight] = useState(0)

  const toMedium = useMediaQuery({
    query: TO_MEDIUM
  })

  const scrollAction = () => {
    const htmlElement = document.querySelector('html')

    htmlElement.scrollTo({
      top: 0
    })
  }

  const showActionWhenPosition = () => {
    const scrollPosition = window.scrollY
    console.log(scrollPosition)

    if (scrollPosition > windowHeight) {
      console.log('yes')
    } else {
      console.log('no')
    }

    return scrollPosition > windowHeight
  }

  useEffect(() => {
    setWindowHeight(window.innerHeight / 2)
  }, [])

  useEffect(() => {
    document.addEventListener('scroll', showActionWhenPosition)

    return () => {
      document.removeEventListener('scroll', showActionWhenPosition)
    }
  })

  return (
    <React.Fragment>
      {(toMedium && showActionWhenPosition()) && <button className="to-top" onClick={() => scrollAction()}>
        <ArrowDown className="to-top__action-svg-arrow" />
      </button>}
    </React.Fragment>
  )
}

export default injectIntl(TheToTop)
import React,{useffect,useState}来自“React”
从“组件/svg/ArrowDown”导入ArrowDown
从“react intl”导入{injectIntl}
从“react responsive”导入{useMediaQuery}
从“core/ui/breakpoints”导入{TO_MEDIUM}
常量主题=({intl})=>{
常量[windowHeight,setWindowHeight]=使用状态(0)
常量toMedium=useMediaQuery({
查询:至中
})
常量滚动动作=()=>{
const htmlElement=document.querySelector('html')
htmlElement.scrollTo({
排名:0
})
}
当位置=()=>{
const scrollPosition=window.scrollY
console.log(滚动位置)
如果(滚动位置>窗口高度){
console.log('yes')
}否则{
console.log('no')
}
返回滚动位置>窗口高度
}
useffect(()=>{
setWindowHeight(window.innerHeight/2)
}, [])
useffect(()=>{
document.addEventListener('滚动',显示位置时的操作)
return()=>{
document.removeEventListener('scroll',showActionWhenPosition)
}
})
返回(
{(tomedim&&showActionWhenPosition())&&scrollAction()}>
}
)
}
导出默认injectIntl(主题)

您应该使用状态。比如说

import React, { useEffect, useState } from 'react'
import ArrowDown from "components/svg/ArrowDown"
import { injectIntl } from "react-intl"
import { useMediaQuery } from 'react-responsive'
import { TO_MEDIUM } from 'core/ui/breakpoints'

const TheToTop = ({ intl }) => {
  const [windowHeight, setWindowHeight] = useState(0)
  const [shouldShow, setShouldShow] = useState(false)

  const toMedium = useMediaQuery({
    query: TO_MEDIUM
  })

  const scrollAction = () => {
    const htmlElement = document.querySelector('html')

    htmlElement.scrollTo({
      top: 0
    })
  }

  const showActionWhenPosition = () => {
    const scrollPosition = window.scrollY
    console.log(scrollPosition)

    if (scrollPosition > windowHeight) {
      setShouldShow(true)
    } else {
      setShouldShow(false)
    }
  }

  useEffect(() => {
    setWindowHeight(window.innerHeight / 2)
  }, [])

  useEffect(() => {
    document.addEventListener('scroll', showActionWhenPosition)

    return () => {
      document.removeEventListener('scroll', showActionWhenPosition)
    }
  })

  return (
    <React.Fragment>
      {(toMedium && shouldShow ) && <button className="to-top" onClick={() => scrollAction()}>
        <ArrowDown className="to-top__action-svg-arrow" />
      </button>}
    </React.Fragment>
  )
}

export default injectIntl(TheToTop)
import React,{useffect,useState}来自“React”
从“组件/svg/ArrowDown”导入ArrowDown
从“react intl”导入{injectIntl}
从“react responsive”导入{useMediaQuery}
从“core/ui/breakpoints”导入{TO_MEDIUM}
常量主题=({intl})=>{
常量[windowHeight,setWindowHeight]=使用状态(0)
const[shouldShow,setShouldShow]=useState(false)
常量toMedium=useMediaQuery({
查询:至中
})
常量滚动动作=()=>{
const htmlElement=document.querySelector('html')
htmlElement.scrollTo({
排名:0
})
}
当位置=()=>{
const scrollPosition=window.scrollY
console.log(滚动位置)
如果(滚动位置>窗口高度){
setShouldShow(真)
}否则{
setShouldShow(错误)
}
}
useffect(()=>{
setWindowHeight(window.innerHeight/2)
}, [])
useffect(()=>{
document.addEventListener('滚动',显示位置时的操作)
return()=>{
document.removeEventListener('scroll',showActionWhenPosition)
}
})
返回(
{(toMedium&&shouldShow)&&scrollAction()}>
}
)
}
导出默认injectIntl(主题)
由于页面未重新呈现而无法工作的原因