scroll nav / one page nav
single page nav
보통 한페이지에서 navigation 을 둬서 메뉴항목을 누르면, 그곳으로 scroll 이 되는 navigation 을 React js 를 이용해서 만들어 보자. 이것에 대한 정확한 명칭이 없어서 여러곳에서 다른 이름을 쓰는 듯 하다. 여기서는 single page nav 라고 부르기로 하자.react-scroll
여기서는 react-scroll library 를 사용할 것이다. 이 녀석의 사용은 간단하다.npm install react-scroll로 install 을 하고 아래처럼 사용하면 된다. 자세한 것은 react-scroll page 를 참고하면 된다.
참고로, test 를 할 때는 scroll 을 할만한 height 를 가지고 test 를 해야 한다. 이녀석을 scroll 을 해주는 것이기 때문에 화면이 scroll 이 필요없는 height 라면, 아무런 반응도 하지 않게 된다.
사실 이것으로 주요 기능은 전부 다 됐다. 이제 오른쪽에 고정하는 것만 하면 된다. 나머지 꾸미는 작업은 각자 알아서 하면 된다.
import {Link, Element} from 'react-scroll'
class ScrollTest extends React.Component{
constructor(props) {
super(props)
this.state = {}
}
render() {
return (
<div className='scrollTest'}>
<Link activeClass="active" to="test1" spy={true} smooth={true}
offset={50} duration={500} onSetActive={this.handleSetActive}>
Test 1
</Link>
<Link activeClass="active" to="test2" spy={true} smooth={true}
offset={50} duration={500} delay={1000}>
Test 2 (delay)
</Link>
<Link className='myclass' to="test3" spy={true} smooth={true} duration={500}>
Test 3 (anchor)
</Link>
{/* contents */}
<Element name='test1' className='element'>
<div className='scrollTestSector'>
Element 1
</div>
</Element>
<Element name='test2' className='element'>
<div className='scrollTestSector'>
Element 2
</div>
</Element>
<div id='test3' className='element'>
<div className='scrollTestSector'>
Element 3
</div>
</div>
</div>
);
};
}
ScrollTest.defaultProps = {}
fixed menu
이제 오른쪽에 고정시켜 보자. 이것은 ref. 5 의 화면을 보면 어떤 모습인지 알 수 있다. 아래처럼 css 를 설정해주면 된다./* css file */
.singleNav {
position: fixed;
right: 0;
top: 50%;
width: 8em;
margin-top: -2.5em;
}
import {Link, Element} from 'react-scroll'
class ScrollTest extends React.Component{
constructor(props) {
super(props)
this.state = {}
}
render() {
return (
<div className='scrollTest'}>
<ul className='singleNav'>
<li>
<Link activeClass="active" to="test1" spy={true} smooth={true}
offset={50} duration={500} onSetActive={this.handleSetActive}>
Test 1
</li>
</Link>
<li>
<Link activeClass="active" to="test2" spy={true} smooth={true}
offset={50} duration={500} delay={1000}>
Test 2 (delay)
</li>
</Link>
<li>
<Link className='myclass' to="test3" spy={true} smooth={true} duration={500}>
Test 3 (anchor)
</Link>
</li>
</ul>
{/* contents */}
<Element name='test1' className='element'>
<div className='scrollTestSector'>
Element 1
</div>
</Element>
<Element name='test2' className='element'>
<div className='scrollTestSector'>
Element 2
</div>
</Element>
<div id='test3' className='element'>
<div className='scrollTestSector'>
Element 3
</div>
</div>
</div>
);
};
}
ScrollTest.defaultProps = {}
References
- Single Page Site with Smooth Scrolling, Highlighted Link, and Fixed Navigation - Call Me Nick
- react-scroll-nav
- Creating a Single-Page App in React using React Router | kirupa.com
- fisshy/react-scroll: React scroll component
- CSS: fixed menus
댓글 없음:
댓글 쓰기