diff --git a/src/components/Intro.js b/src/components/Intro.js
index d35e8f1..97d4da7 100644
--- a/src/components/Intro.js
+++ b/src/components/Intro.js
@@ -5,164 +5,177 @@ import Topic from './subcomponents/Topic';
import { ChevronDoubleUp, ChevronDoubleDown } from 'react-bootstrap-icons';
class Intro extends React.Component {
- constructor() {
- super();
+ constructor() {
+ super();
- // Defaults for the state
- this.state = {
- start: false,
- prev: 'previous',
- curr: 'current',
- next: 'next',
- prevLoc: -1,
- currLoc: 0,
- nextLoc: 1,
- moving: false,
+ // Defaults for the state
+ this.state = {
+ start: false,
+ prev: 'previous',
+ curr: 'current',
+ next: 'next',
+ prevLoc: -1,
+ currLoc: 0,
+ nextLoc: 1,
+ moving: false,
+
+ };
+ }
+
+ // Topics to display in intro
+ // DISCLAIMER: Please add content to the topic or bugs may occur...
+ topics = [
+
+
+ This website helps you access the projects that I've worked on. You can navigate
+ at the top to different locations in the site. Within you can find information about me,
+ my github repositories, and articles I've posted. This website is coded with
+ React/Redux and hosted over Vercel. You can email me at
cam@camscode.com.
+
+ ,
+
+ View a list of projects I've done right on this website. You can easily direct to github
+ where you can see the project code itself.
+ ,
+
+ Read through some homemade articles that go over interesting topics and may teach you some skills in tech.
+
+ ];
+
+ handleKey = (e) => {
+ /**
+ * handleKey - Handle key events and hand off to handleInput
+ */
+ switch (e.key) {
+ case "ArrowUp": // If received an up Arrow
+ this.handleInput('up');
+ break;
+ case "ArrowDown": // If received a down Arrow
+ this.handleInput('down')
+ break;
+ default:
+ break;
+ }
+ }
+
+ handleInput = (input) => {
+ /**
+ * handleInput - handle input events. A majority of the functionality is to scroll through Intro topics
+ */
+
+ // Up Arrow
+ if (input === "up" && !this.state.moving && this.state.currLoc > 0) {
+
+ // Activate animation going to next topic
+ this.setState({
+ prev: 'current top',
+ moving: true
+ });
+
+ // Wait 900 ms until the transition is finished
+ setTimeout(() => {
+ // Once timeout finishes, place topics in correct location without transition
+ let prevloc = this.state.prevLoc - 1;
+ let currloc = this.state.currLoc - 1;
+ let nextloc = this.state.nextLoc - 1;
+ this.setState({
+ prev: 'previous notrans',
+ currLoc: currloc,
+ nextLoc: nextloc,
+ });
+
+ // wait another 75 ms to
+ setTimeout(() => {
+ this.setState({ // remove notrans from each div
+ prev: 'previous',
+ prevLoc: prevloc,
+ moving: false,
+ });
+
+ }, 75);
+
+ }, 900);
+ } else if (input === "down" && !this.state.moving && this.state.nextLoc < this.topics.length) {
+ // Activate transition going to previous topic
+ this.setState({
+ //curr: 'previous',
+ next: 'current',
+ moving: true,
+ });
+
+ // wait 900 ms before placing all topics into correct divs
+ setTimeout(() => {
+ // move all topics into correct divs
+ let prevloc = this.state.prevLoc + 1;
+ let currloc = this.state.currLoc + 1;
+ let nextloc = this.state.nextLoc + 1;
+ this.setState({
+ next: 'next notrans',
+ prevLoc: prevloc,
+ currLoc: currloc,
+ });
+
+ // wait 20ms and remove notrans
+ setTimeout(() => {
+ this.setState({
+ next: 'next',
+ nextLoc: nextloc,
+ moving: false,
+ });
+ }, 75);
+ }, 900);
+
+ } else if (input === "down" && this.state.nextLoc >= this.topics.length) {
+ // Set something to happen when you reach the end
+ }
};
- }
- handleKey = (e) => {
- /**
- * handleKey - Handle key events and hand off to handleInput
- */
- switch(e.key) {
- case "ArrowUp": // If received an up Arrow
+ onWheel(event) {
+ /**
+ * onScroll: Handle wheel event and moves intro up or down based on wheel scroll direction
+ */
+ if (event.deltaY < 0) {
this.handleInput('up');
- break;
- case "ArrowDown": // If received a down Arrow
- this.handleInput('down')
- break;
- default:
- break;
+ }
+
+ if (event.deltaY > 0) {
+ this.handleInput('down');
+ }
}
- }
- handleInput = (input) => {
- /**
- * handleInput - handle input events. A majority of the functionality is to scroll through Intro topics
- */
-
- // Up Arrow
- if (input === "up" && !this.state.moving && this.state.currLoc > 0 ) {
-
- // Activate animation going to next topic
- this.setState({
- prev: 'current top',
- moving: true
- });
-
- // Wait 900 ms until the transition is finished
- setTimeout(()=>{
- // Once timeout finishes, place topics in correct location without transition
- let prevloc = this.state.prevLoc-1;
- let currloc = this.state.currLoc-1;
- let nextloc = this.state.nextLoc-1;
+ componentDidMount() {
+ setTimeout(() => { // At the start, wait 100ms and enable intro
this.setState({
- prev: 'previous notrans',
- currLoc: currloc,
- nextLoc: nextloc,
+ start: true,
});
+ }, 100);
- // wait another 75 ms to
- setTimeout(()=>{
- this.setState({ // remove notrans from each div
- prev: 'previous',
- prevLoc: prevloc,
- moving: false,
- });
+ document.title = "HomePage"; // Set document title
- }, 75);
-
- }, 900);
- } else if (input === "down" && !this.state.moving && this.state.nextLoc < this.topics.length) {
- // Activate transition going to previous topic
- this.setState({
- //curr: 'previous',
- next: 'current',
- moving: true,
- });
-
- // wait 900 ms before placing all topics into correct divs
- setTimeout(()=>{
- // move all topics into correct divs
- let prevloc = this.state.prevLoc+1;
- let currloc = this.state.currLoc+1;
- let nextloc = this.state.nextLoc+1;
- this.setState({
- next: 'next notrans',
- prevLoc: prevloc,
- currLoc: currloc,
- });
-
- // wait 20ms and remove notrans
- setTimeout(()=>{
- this.setState({
- next: 'next',
- nextLoc: nextloc,
- moving: false,
- });
- }, 75);
- }, 900);
-
- } else if (input === "down" && this.state.nextLoc >= this.topics.length) {
- // Set something to happen when you reach the end
}
-
- };
- componentDidMount() {
- setTimeout(()=>{ // At the start, wait 100ms and enable intro
- this.setState({
- start: true,
- });
- }, 100);
+ render() {
- document.title = "HomePage"; // Set document title
+ // TODO: Fix bug where scrolling too fast will allow one to exit expected topic range
- }
-
- // Topics to display in intro
- // DISCLAIMER: Please add content to the topic or bugs may occur...
- topics = [
-
-
- This website helps you access the projects that I've worked on. You can navigate
- at the top to different locations in the site. Within you can find information about me,
- my github repositories, and articles I've posted. This website is coded with
- React/Redux and hosted over Vercel. You can email me at
cam@camscode.com.
-
- ,
-
- View a list of projects I've done right on this website. You can easily direct to github
- where you can see the project code itself.
- ,
-
- Read through some homemade articles that go over interesting topics and may teach you some skills in tech.
-
- ];
-
- render() {
-
- // TODO: Fix bug where scrolling too fast will allow one to exit expected topic range
-
- // Render page
- return (
-
-
{this.handleInput('up')}}>
-
- {this.topics[this.state.prevLoc]}
+ // Render page
+ return (
+
{ this.onWheel(event) }}>
+
0 ? "" : " hidden")} onClick={() => { this.handleInput('up') }}>
+
+ {this.topics[this.state.prevLoc]}
+
+
+ {this.topics[this.state.currLoc]}
+
+
+ {this.topics[this.state.nextLoc]}
+
+
{ this.handleInput('down') }}>
-
- {this.topics[this.state.currLoc]}
-
-
- {this.topics[this.state.nextLoc]}
-
-
{this.handleInput('down')}}>
-
- );
- }
+ );
+ }
}
const mapStateToProps = (state) => {
diff --git a/src/components/css/Intro.css b/src/components/css/Intro.css
index 0bcb979..95642a7 100644
--- a/src/components/css/Intro.css
+++ b/src/components/css/Intro.css
@@ -21,7 +21,7 @@
display: flex;
position:fixed;
transition: opacity 750ms ease-out, top 750ms ease-out;
- top:-99%;
+ top:-100%;
left:0;
justify-content: center;
align-items: center;
@@ -49,7 +49,7 @@
display: flex;
position:fixed;
transition: opacity 750ms ease-out, top 750ms ease-out;
- top:99%;
+ top:100%;
left:0;
justify-content: center;
align-items: center;
@@ -81,6 +81,19 @@
color: #C4C4C4
}
+.intro .navbutton.hidden {
+ opacity: 0;
+
+}
+
+.intro .navbutton.bottom {
+ margin-top: auto;
+}
+
+.intro .navbutton.top {
+ z-index: 14;
+}
+
.intro .navbutton {
z-index: 14;
font-size: 48px;
@@ -92,12 +105,7 @@
align-items: center;
justify-content: center;
-}
-
-.intro .navbutton.bottom {
- margin-top: auto;
-}
-
-.intro .navbutton.top {
- z-index: 14;
+ opacity: 1;
+ animation:none !important;
+ transition: opacity ease 0.25s;
}
\ No newline at end of file