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