마우스 휠로 전체 페이지 영역 넘기기
지난번 마우스 휠로 input 넘버 값 up, down 작업을 했었다.
응용해서 작업 하나 더 했는데 올린다.
HTML
<div class="box1">박스1입니다.</div>
<div class="box2">박스2입니다.</div>
<div class="box3">박스3입니다.</div>
<div class="box4">박스4입니다.</div>
<div class="box5">박스5입니다.</div>
<div class="box6">박스6입니다.</div>
<div class="box7">박스7입니다.</div>
박스 7개 생성.
몇 개를 생성해도 상관없다.
하지만 구분을 위해 class로 css 추가했기 때문에 구분을 위한다면 똑같이 추가할 것.
CSS
body,div{
margin:0;
padding:0;
}
div{
display: flex;
align-items: center;
justify-content: center;
}
.box1{background-color:red;}
.box2{background-color:orange;}
.box3{background-color:yellow;}
.box4{background-color:green;}
.box5{background-color:blue;}
.box6{background-color:navy;}
.box7{background-color:purple;}
JS 수정 전
const _width = window.innerWidth;
const _height = window.innerHeight;
const boxArr = document.getElementsByTagName('div');
for(let i = 0; i < boxArr.length; i++){
boxArr[i].style.width = _width + 'px';
boxArr[i].style.height = _height + 'px';
}
window.addEventListener('mousewheel', function(e){
e.preventDefault();
if(e.wheelDeltaY > 0){
console.log('업');
window.scrollTo(0,window.scrollY - _height);
}else{
console.log('다운');
window.scrollTo(0,window.scrollY + _height);
}
});
전체 페이지로 만들기 위해 window 크기 값을 가져와서 _width, _height 변수로 만들었다.
반복문으로 각각에 _width, _height값을 주어 전체 페이지로 만들고
그 다음 마우스 휠 이벤트를 바인딩 해줬다.
마우스 휠 기본 이벤트를 막고 up, down 분기 코드로 현재 scrollTop위치에 박스 height 값을 더하거나 뺀 뒤 scrollTop 값이 되도록 했다.
+ mousewheel 이벤트는 예전에 브라우저 호환성 확인 안하고 작성한 스크립트를 가져다 썼기 때문에 호환이 안 될 수 있다.
JS 수정내역!!
위의 js로 스크롤하게되면 스크롤하는 영역이 더해져서 (100px정도) 내가 원하는 페이지에 딱딱 안 멈추고 100px정도씩 어긋나는것이 확인된다.
따라서 window.scrollTo()에 들어가는 값에 스크롤 시 마다 내려가는 e.deltaY값을 빼줘야한다!
아래가 최종이다...
근데 연속적으로 마우스 휠을하면 에러가 생기는데, jquery에서는 queue에 하나씩 들어가도록 stop()?메소드가 있는데, 아직 js는 모르겠다.
찾아서 다시 수정해야겠다..
JS 최종
const _width = window.innerWidth;
const _height = window.innerHeight;
const boxArr = document.getElementsByTagName('div');
for(let i = 0; i < boxArr.length; i++){
boxArr[i].style.width = _width + 'px';
boxArr[i].style.height = _height + 'px';
}
window.addEventListener('mousewheel', function(e){
e.preventDefault();
if(e.wheelDeltaY > 0){
console.log('업');
window.scrollTo(0,window.scrollY - _height - e.deltaY);
}else{
console.log('다운');
window.scrollTo(0,window.scrollY + _height - e.deltaY);
}
});
[예제]
영역 안에서 마우스 휠을 업, 다운 해보도록!
See the Pen ePLmzp by leeyoonseo (@okayoon) on CodePen.
'Javascript' 카테고리의 다른 글
ajax 이슈, 파라미터 값이 안 보내져요. (processData) (0) | 2018.10.24 |
---|---|
input 포맷(전화번호 입력받기)__regex__replace__substr (0) | 2018.10.24 |
버튼 클릭하여 해당영역으로 스크롤 이동하기 scrollintoview(); (0) | 2018.10.23 |
자동으로 연도 변경하여 삽입하기 (0) | 2018.10.23 |
three.js 라이브러리 공부하기 (0) | 2018.10.16 |
마우스 휠로 input 숫자 값 변경하기 (0) | 2018.10.16 |
이메일 프론트단 보안하기(*, 별표, asterisk처리) (0) | 2018.10.10 |
최소사이즈 체크하기 (0) | 2018.10.02 |