Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Progressbar implemented #568

Merged
merged 4 commits into from
Oct 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 29 additions & 25 deletions client/src/Components/NavBar/NavBar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import logo from '../../assets/Logo.png'; // Adjust the path as necessary
import SearchBar from "../SearchBar";
import { Tooltip } from '@mui/material';
import { pink } from '@mui/material/colors';
import ScrollProgressBar from './ScrollProgressBar';

const StyledAppBar = styled(AppBar)(({ darkMode }) => ({
backgroundColor: darkMode ? 'black' : '#002147', // Change color based on darkMode
Expand Down Expand Up @@ -105,27 +106,29 @@ function Navbar({ darkMode, toggleDarkMode }) {
const isActive = (path) => location.pathname === path;

return (
<StyledAppBar position="sticky" darkMode={darkMode}>
<Toolbar style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
<IconButton component={Link} to="/">
<Logo src={logo} alt="Logo" />
</IconButton>

{isMobile ? (
<>
<Toolbar style={{display: "flex", justifyContent: 'flex-end', alignItems: "center"}}>
<Tooltip title={darkMode ? "Switch to Light Mode" : "Switch to Dark Mode"}>
<IconButton onClick={toggleDarkMode} style={{ marginRight: '10px' }}>
<img src={darkMode ? sunIcon : moonIcon} alt="Toggle Dark Mode" style={{ width: '20px', height: '20px' }} />
</IconButton>
</Tooltip>

<MobileMenuButton onClick={handleMenuClick}>
<MenuIcon sx={{ fontSize: '2rem' }} />
</MobileMenuButton>
</Toolbar>

<MobileMenu open={openMenu}>
<>
<ScrollProgressBar />
<StyledAppBar position="sticky" darkMode={darkMode}>
<Toolbar style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
<IconButton component={Link} to="/">
<Logo src={logo} alt="Logo" />
</IconButton>

{isMobile ? (
<>
<Toolbar style={{ display: "flex", justifyContent: 'flex-end', alignItems: "center" }}>
<Tooltip title={darkMode ? "Switch to Light Mode" : "Switch to Dark Mode"}>
<IconButton onClick={toggleDarkMode} style={{ marginRight: '10px' }}>
<img src={darkMode ? sunIcon : moonIcon} alt="Toggle Dark Mode" style={{ width: '20px', height: '20px' }} />
</IconButton>
</Tooltip>

<MobileMenuButton onClick={handleMenuClick}>
<MenuIcon sx={{ fontSize: '2rem' }} />
</MobileMenuButton>
</Toolbar>

<MobileMenu open={openMenu}>
<IconButton onClick={handleMenuClick} style={{ marginBottom: '20px', color: '#fff' }}>
Close
</IconButton>
Expand Down Expand Up @@ -239,10 +242,11 @@ function Navbar({ darkMode, toggleDarkMode }) {
</IconButton>
</Tooltip>
</MenuContainer>
)}
</Toolbar>
</StyledAppBar>
)}
</Toolbar>
</StyledAppBar>
</>
);
}
}

export default Navbar;
54 changes: 54 additions & 0 deletions client/src/Components/NavBar/ScrollProgressBar.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import React, { useEffect, useState } from 'react';
import { styled } from '@mui/material/styles';

const ProgressBar = styled('div')({
position: 'fixed',
top: 0,
left: 0,
height: '5px',
background: 'linear-gradient(90deg, #00BFFF, #FFD700)', // Gradient from blue to yellow
zIndex: 1200,
boxShadow: '0 0 10px #00BFFF, 0 0 20px #FFD700', // Glowing effect with blue and yellow
transition: 'width 0.2s ease-out',
borderRadius: '2px', // Rounded edges
transform: 'translateZ(0)', // Fix any potential rendering issues
animation: 'pulse 2s infinite', // Pulse animation for extra glow effect
scrollBehavior:'smooth'
});

const ScrollProgressBar = () => {
const [scrollProgress, setScrollProgress] = useState(0);

const updateProgressBar = () => {
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
const scrollHeight = document.documentElement.scrollHeight - document.documentElement.clientHeight;
const progress = (scrollTop / scrollHeight) * 100;
setScrollProgress(progress);
};

useEffect(() => {
window.addEventListener('scroll', updateProgressBar);
return () => window.removeEventListener('scroll', updateProgressBar);
}, []);

return <ProgressBar style={{ width: `${scrollProgress}%` }} />;
};

// CSS keyframe animation for pulse effect
const styles = document.createElement('style');
styles.innerHTML = `
@keyframes pulse {
0% {
box-shadow: 0 0 5px #00BFFF, 0 0 10px #FFD700;
}
50% {
box-shadow: 0 0 20px #00BFFF, 0 0 30px #FFD700;
}
100% {
box-shadow: 0 0 5px #00BFFF, 0 0 10px #FFD700;
}
}
`;
document.head.appendChild(styles);

export default ScrollProgressBar;
2 changes: 1 addition & 1 deletion client/src/components/Header/Header.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ function Header(){
</div>
{/* mobile navigation */}
<div
className={`fixed z-40 w-full bg-gray-100 overflow-hidden flex flex-col lg:hidden gap-12 origin-top duration-700 ${
className={`fixed z-40 w-full bg-gray-100 overflow-hidden flex flex-col lg:hidden gap-12 origin-top duration-700 ${
!toggleMenu ? "h-0" : "h-full"
}`}
>
Expand Down
Loading