Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.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_Html_Css_Reactjs - Fatal编程技术网

Javascript 在向下滚动时显示组件中的某个元素,在向上滚动时隐藏

Javascript 在向下滚动时显示组件中的某个元素,在向上滚动时隐藏,javascript,html,css,reactjs,Javascript,Html,Css,Reactjs,我正在创建一个按钮,当用户向下滚动时,该按钮将可见,当用户到达顶部时,该按钮将不可见。 我使用React钩子跟踪滚动,但无法访问用户滚动到的部分。我使用的是高度为100vh的Html部分(3个部分),顶部有一个固定的标题。当用户到达第2部分时,会显示一个登录/注册按钮,该按钮将在用户向下滚动ie时显示,并且在用户到达第一部分ie根部分之前保持可见。我使用了滚动捕捉类型:y必填是主容器的CSS 反应代码如下: import React, { useRef, useEffect, useSt

我正在创建一个按钮,当用户向下滚动时,该按钮将可见,当用户到达顶部时,该按钮将不可见。 我使用React钩子跟踪滚动,但无法访问用户滚动到的部分。我使用的是高度为100vh的Html部分(3个部分),顶部有一个固定的标题。当用户到达第2部分时,会显示一个登录/注册按钮,该按钮将在用户向下滚动ie时显示,并且在用户到达第一部分ie根部分之前保持可见。我使用了
滚动捕捉类型:y必填
是主容器的CSS

反应代码如下:

    import React, { useRef, useEffect, useState } from 'react'
    import { useHistory } from "react-router-dom";

    import Header from './Header'
    import Sec1 from './Sec1'
    import Sec2 from './Sec2'
    import Sec3 from './Sec3'

    import './Home.css'
    function Home() {

        
        let history = useHistory();
        const loginregister = () => {
            //on click login move to login register page      
        }

        var mainConatiner = useRef(null)


        useEffect(() => {
            mainConatiner.current.addEventListener('scroll', () => {
              console.log("srolling");
            })
        })



        return (

            <div className="main-container" ref={mainConatiner}>
                <Header loginregister={loginregister} />
                <div className="middle">
                    {/* Root */}
                    <Sec1 loginregister={loginregister} />

                    {/* Bank */}
                    <Sec2 />

                    {/* Section 3*/}
                    <Sec3 />
                </div>
            </div>
        )
    }

    export default Home

我想获得用户正在查看的部分,因为该部分会在单个滚动条上更改。
useffect()
钩子被多次调用

我在我的项目中也做过类似的事情,我将向您展示如何调用

我的想法是,我有一个聊天窗口,当用户向上滚动阅读以前的消息时,他可以看到一个按钮返回底部

我的ReactJS文件中有类似的东西,它呈现我的div

import React, { Component } from 'react';
import $ from 'jquery';

class Chat extends Component{

  

  constructor(props){

    super(props);
    this.state = {
      scroll : true,
      chatMessages : []
    }

  }


  componentDidMount(){
    if(this.state.scroll){
          this.scrollToBottom();
    }
    this.scrollToBottom(); //Initially scroll to the bottom of page.
  }
  scrollToBottom(){ //Scroll to the bottom of a div
    $('#chat_messages_container').scrollTop($('#chat_messages_container')[0].scrollHeight);
  }
  handleScroll(){ //Handle every scroll event
    let elem = $('#chat_messages_container');
    if(elem!=undefined){
      if((elem[0].scrollHeight - elem.scrollTop()) > 1300){
        this.setState({
          scroll : false
        });
      }
      else{
        this.setState({
          scroll : true
        })
      }
    }
  }
 
  render(){
    let chatPoruke = [];
    for (var i = 0; i < this.state.chatMessages.length; i++) { //Getting messages
      var poruka_obj = this.state.chatMessages[i];
      chatPoruke.push(
        <ChatMessage props={poruka_obj} key={i}/>
      );
    }
    let scrollBackToBottom = "";
    if(!this.state.scroll){ //If false -> it renders the button for scroll to bottom
      scrollBackToBottom = <div id="scrollToBottom" onClick={()=>{this.scrollToBottom()}}><i className="fas fa-arrow-down"></i> Scroll Down <i className="fas fa-arrow-down"></i></div>
    }

    return(
      <div id="chatdiv">

        <div id="chat_messages_container" onScroll={()=>{this.handleScroll()}}>
          {chatPoruke}

        </div>
        <div id="chat_bottom">
        {scrollBackToBottom}
        </div>
      </div>
    )
  }

}

export default Chat;
import React,{Component}来自'React';
从“jquery”导入美元;
类聊天扩展组件{
建造师(道具){
超级(道具);
此.state={
卷轴:没错,
聊天信息:[]
}
}
componentDidMount(){
if(this.state.scroll){
这个.scrollToBottom();
}
this.scrollToBottom();//最初滚动到页面底部。
}
scrollToBottom(){//滚动到div的底部
$(“#聊天#消息#容器”).scrollTop($(“#聊天#消息#容器”)[0]。scrollHeight);
}
handleScroll(){//处理每个滚动事件
让elem=$('chat\u messages\u container');
如果(元素!=未定义){
如果((元素[0].scrollHeight-elem.scrollTop())>1300){
这是我的国家({
卷轴:假
});
}
否则{
这是我的国家({
卷轴:对
})
}
}
}
render(){
让chatPoruke=[];
对于(var i=0;i它会呈现滚动到底的按钮
scrollBackToBottom={this.scrollToBottom()}}>向下滚动
}
返回(
{this.handleScroll()}}>
{chatPoruke}
{scrollBackToBottom}
)
}
}
导出默认聊天;
这一切是如何运作的: 在return中,您可以看到我有一个
chat\u messages\u容器
div,它将逐个包含所有消息。我将
onScroll
事件添加到(每当用户在该div内滚动时),它将触发我的
handleScroll()
函数


handleScroll()
函数决定用户是否已滚动到足以让我的组件更新其状态。滚动到false,一旦它将其更改为false,我的按钮就会显示。

我已经对我的项目做了类似的事情,我将向您演示如何操作

我的想法是,我有一个聊天窗口,当用户向上滚动阅读以前的消息时,他可以看到一个按钮返回底部

我的ReactJS文件中有类似的东西,它呈现我的div

import React, { Component } from 'react';
import $ from 'jquery';

class Chat extends Component{

  

  constructor(props){

    super(props);
    this.state = {
      scroll : true,
      chatMessages : []
    }

  }


  componentDidMount(){
    if(this.state.scroll){
          this.scrollToBottom();
    }
    this.scrollToBottom(); //Initially scroll to the bottom of page.
  }
  scrollToBottom(){ //Scroll to the bottom of a div
    $('#chat_messages_container').scrollTop($('#chat_messages_container')[0].scrollHeight);
  }
  handleScroll(){ //Handle every scroll event
    let elem = $('#chat_messages_container');
    if(elem!=undefined){
      if((elem[0].scrollHeight - elem.scrollTop()) > 1300){
        this.setState({
          scroll : false
        });
      }
      else{
        this.setState({
          scroll : true
        })
      }
    }
  }
 
  render(){
    let chatPoruke = [];
    for (var i = 0; i < this.state.chatMessages.length; i++) { //Getting messages
      var poruka_obj = this.state.chatMessages[i];
      chatPoruke.push(
        <ChatMessage props={poruka_obj} key={i}/>
      );
    }
    let scrollBackToBottom = "";
    if(!this.state.scroll){ //If false -> it renders the button for scroll to bottom
      scrollBackToBottom = <div id="scrollToBottom" onClick={()=>{this.scrollToBottom()}}><i className="fas fa-arrow-down"></i> Scroll Down <i className="fas fa-arrow-down"></i></div>
    }

    return(
      <div id="chatdiv">

        <div id="chat_messages_container" onScroll={()=>{this.handleScroll()}}>
          {chatPoruke}

        </div>
        <div id="chat_bottom">
        {scrollBackToBottom}
        </div>
      </div>
    )
  }

}

export default Chat;
import React,{Component}来自'React';
从“jquery”导入美元;
类聊天扩展组件{
建造师(道具){
超级(道具);
此.state={
卷轴:没错,
聊天信息:[]
}
}
componentDidMount(){
if(this.state.scroll){
这个.scrollToBottom();
}
this.scrollToBottom();//最初滚动到页面底部。
}
scrollToBottom(){//滚动到div的底部
$(“#聊天#消息#容器”).scrollTop($(“#聊天#消息#容器”)[0]。scrollHeight);
}
handleScroll(){//处理每个滚动事件
让elem=$('chat\u messages\u container');
如果(元素!=未定义){
如果((元素[0].scrollHeight-elem.scrollTop())>1300){
这是我的国家({
卷轴:假
});
}
否则{
这是我的国家({
卷轴:对
})
}
}
}
render(){
让chatPoruke=[];
对于(var i=0;i它会呈现滚动到底的按钮
scrollBackToBottom={this.scrollToBottom()}}>向下滚动
}
返回(
{this.handleScroll()}}>
{chatPoruke}
{scrollBackToBottom}
)
}
}
导出默认聊天;
这一切是如何运作的: 在return中,您可以看到我有一个
chat\u messages\u容器
div,它将逐个包含所有消息。我将
onScroll
事件添加到(每当用户在该div内滚动时),它将触发我的
handleScroll()
函数


handleScroll()
函数决定用户是否滚动了足够的时间,以便我的组件更新其状态。滚动到false,一旦它将其更改为false,我的按钮就会出现。

查看包。@ohlupo感谢您提供包名。我通过更改阈值来完成这项工作。请查看包。@ohlupo感谢您提供包名。我通过更改阈值来实现这一点。此外,我的div chat_messages_容器具有固定高度,因此,一旦填充,它将添加滚动功能供我使用。谢谢您,但我不想使用Jquery。此外,我的div chat_messages_容器具有固定高度,因此,一旦填充,它将为我添加滚动功能。谢谢你,但我不想使用Jquery。