Skip to content

Commit c5b966a

Browse files
authored
Merge pull request #1462 from lade6501/scroll-to-top-button
feat : Added scroll to top feature
2 parents a6087ee + cd334a5 commit c5b966a

2 files changed

Lines changed: 74 additions & 19 deletions

File tree

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
"use client";
2+
import { Context } from "@context/store";
3+
import React, { useContext, useCallback, useEffect, useState } from "react";
4+
import { faArrowUp } from "@fortawesome/free-solid-svg-icons";
5+
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
6+
7+
function ScrollToTop() {
8+
let { theme } = useContext(Context);
9+
const [isVisible, setIsVisible] = useState(false);
10+
11+
// Memoize the visibility toggle logic
12+
const toggleVisibility = useCallback(() => {
13+
if (window.scrollY > 300) {
14+
setIsVisible(true);
15+
} else {
16+
setIsVisible(false);
17+
}
18+
}, []);
19+
20+
useEffect(() => {
21+
window.addEventListener("scroll", toggleVisibility);
22+
return () => window.removeEventListener("scroll", toggleVisibility);
23+
}, [toggleVisibility]);
24+
25+
const scrollToTop = () => {
26+
window.scrollTo({
27+
top: 0,
28+
behavior: "smooth",
29+
});
30+
};
31+
32+
if (!isVisible) {
33+
return null;
34+
}
35+
36+
return (
37+
<button
38+
className={`${
39+
theme ? "bg-[#63B5C3] text-white" : "bg-gray-100 text-black"
40+
} fixed right-8 bottom-12 z-10 rounded-full max-sm:w-32 max-sm:px-3 max-sm:py-2 px-5 py-3 transition duration-500 transform hover:scale-105`}
41+
onClick={scrollToTop}
42+
>
43+
<FontAwesomeIcon icon={faArrowUp} bounce />
44+
</button>
45+
);
46+
}
47+
48+
export default ScrollToTop;

website3.0/src/app/layout.js

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Authprovider from "@components/auth/Authprovider";
77
import { NextAuthProvider } from "./provider";
88
import { GlobalContext } from "@context/store";
99
import React from "react";
10+
import ScrollToTop from "@components/ScrollToTop";
1011
const inter = Inter({ subsets: ["latin"] });
1112

1213
export const metadata = {
@@ -23,18 +24,20 @@ export const metadata = {
2324
{ size: "32x32", href: "/HelpOps-H Fevicon-32.webp" },
2425
{ size: "16x16", href: "/HelpOps-H Fevicon-16.webp" },
2526
],
26-
}, /* Keywords and other details for SEO Optimization purpose */
27-
keywords: "DevOps, HelpOps, DevOps Support, DevOps Hub, Helpops Hub, DevOps Resources, DevOps Tutorials, DevOps Tools, DevOps Best Practices, Continuous Integration, Continuous Delivery, CI/CD, Infrastructure as Code, IaC, DevOps Automation, DevOps Monitoring, dev ops, dev ops what is, devops tools, dev ops pipeline, devops technologies, cloud devops, dev ops projects, learn devops, devops practices, dev ops team, devops support, devops journey, it dev ops, devops trends, devops community, devops guidelines, challenges with devops, challenges in devops, what is devops, devops meaning, devops azure, devops aws, azure devops pipeline, aws devops, devops blogs, devops benefits, devops basics, devops best practices, branching strategy in devops, build tools in devops, devops ci/cd, ci cd devops, copilot azure devops, devops definition, devops tools, devops full form, DevOps deployment, DevOps integration, DevOps security, DevOps metrics, DevOps efficiency, how to use devops, where to use devops, what is devops, what is helpopshub, about helpopshub, contact helpopshub, azfar alam, helpops team, helpopshub contact, helpops contact, helpopshub team, devops discussions, helpopshub discussions, devops arsenal, helpopshub opensource, devops issues, solve devops, trends in devops, devops trends, innovations in devops, devops technologies, technologies in devops, technologies of devops, azfar alam devops, azfar alam developer, azfar alam devops engineer, devoops engineer",
27+
} /* Keywords and other details for SEO Optimization purpose */,
28+
keywords:
29+
"DevOps, HelpOps, DevOps Support, DevOps Hub, Helpops Hub, DevOps Resources, DevOps Tutorials, DevOps Tools, DevOps Best Practices, Continuous Integration, Continuous Delivery, CI/CD, Infrastructure as Code, IaC, DevOps Automation, DevOps Monitoring, dev ops, dev ops what is, devops tools, dev ops pipeline, devops technologies, cloud devops, dev ops projects, learn devops, devops practices, dev ops team, devops support, devops journey, it dev ops, devops trends, devops community, devops guidelines, challenges with devops, challenges in devops, what is devops, devops meaning, devops azure, devops aws, azure devops pipeline, aws devops, devops blogs, devops benefits, devops basics, devops best practices, branching strategy in devops, build tools in devops, devops ci/cd, ci cd devops, copilot azure devops, devops definition, devops tools, devops full form, DevOps deployment, DevOps integration, DevOps security, DevOps metrics, DevOps efficiency, how to use devops, where to use devops, what is devops, what is helpopshub, about helpopshub, contact helpopshub, azfar alam, helpops team, helpopshub contact, helpops contact, helpopshub team, devops discussions, helpopshub discussions, devops arsenal, helpopshub opensource, devops issues, solve devops, trends in devops, devops trends, innovations in devops, devops technologies, technologies in devops, technologies of devops, azfar alam devops, azfar alam developer, azfar alam devops engineer, devoops engineer",
2830
author: "Azfar Alam",
29-
openGraph: { /* Details to display when website is shared */
30-
type: "website",
31+
openGraph: {
32+
/* Details to display when website is shared */ type: "website",
3133
url: "https://helpopshub.com",
3234
title: "Helpops-Hub",
3335
description: "Ensuring You Never Get Stuck In DevOps Again!",
3436
site_name: "Helpops-Hub",
3537
locale: "en_US",
3638
},
37-
twitter: { /* Details to display when website shared on twitter (now X) */
39+
twitter: {
40+
/* Details to display when website shared on twitter (now X) */
3841
card: "summary_large_image",
3942
url: "https://helpopshub.com",
4043
title: "Helpops-Hub",
@@ -45,23 +48,27 @@ export const metadata = {
4548
export default function RootLayout({ children }) {
4649
return (
4750
<html lang="en">
48-
<link rel="apple-touch-icon" sizes="180x180" href="/HelpOps-H Fevicon-180.webp" />
51+
<link
52+
rel="apple-touch-icon"
53+
sizes="180x180"
54+
href="/HelpOps-H Fevicon-180.webp"
55+
/>
4956
<link rel="canonical" href="https://www.helpopshub.com/" />
5057
<link rel="manifest" href="./manifest.json" />
5158
<body className={inter.className}>
52-
<div id="Background1"></div>
53-
<div id="Background2"></div>
54-
<React.StrictMode>
55-
56-
<GlobalContext>
57-
<NextAuthProvider>
58-
<Loader />
59-
<Header />
60-
{children}
61-
<Footer />
62-
</NextAuthProvider>
63-
</GlobalContext>
64-
</React.StrictMode>
59+
<div id="Background1"></div>
60+
<div id="Background2"></div>
61+
<React.StrictMode>
62+
<GlobalContext>
63+
<NextAuthProvider>
64+
<Loader />
65+
<Header />
66+
{children}
67+
<Footer />
68+
<ScrollToTop />
69+
</NextAuthProvider>
70+
</GlobalContext>
71+
</React.StrictMode>
6572
</body>
6673
</html>
6774
);

0 commit comments

Comments
 (0)