ionic2, Angular에서 android상에 scroll 이동할 때만 보이게 하기 개발/ionic2, Angular2020. 5. 12. 16:03
https://risha-lee.tistory.com/34
↑위 글과 연결된 글입니다.
지난 글에서 언급했듯이 요청받은 내용은 그냥 스크롤이 보이는 것이 아닌,
스크롤을 이동할 땐 보이지만, 스크롤을 이동하지 않을 땐 숨겨져 있는 기능이었다.
그래서 좀 생각해보았는데 어차피 기본은 안 보이는 것이고,
css를 추가해야만 보이니 class를 이용하여 토글 하면 좋겠다고 생각하였다.
그래서 아래의 코드 형태로 결과를 내게 되었다.
1. scss를 작성한다.
.scroll_view .scroll-content{
overflow-y: overlay;
}
.scroll_view .scroll-content::-webkit-scrollbar {
-webkit-appearance: none;
}
.scroll_view .scroll-content::-webkit-scrollbar:vertical {
width: 3px;
}
.scroll_view .scroll-content::-webkit-scrollbar:horizontal {
height: 3px;
}
.scroll_view .scroll-content::-webkit-scrollbar-thumb {
border-radius: 8px;
background-color: rgba(0, 0, 0, .5);
}
2. html을 작성한다.
<ion-header>
<ion-navbar>
<ion-title>
Ionic Blank
</ion-title>
</ion-navbar>
</ion-header>
<ion-content [ngClass]="scrolling ? 'scroll_view' : ''"
(ionScrollStart)="scrollStart()"
(ionScrollEnd)="scrollEnd()">
<!-- 본문 내용 작성 -->
</ion-content>
3. ts를 작성한다.
import { Component, NgZone } from '@angular/core';
import { Platform } from 'ionic-angular';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
scrolling = false;
constructor(public platform: Platform,
public _zone: NgZone) {
}
scrollStart() {
if (this.platform.is('android')) {
console.log("scrollStart");
this._zone.run(() => {
this.scrolling = true;
});
}
}
scrollEnd() {
if (this.platform.is('android')) {
console.log("scrollEnd");
this._zone.run(() => {
this.scrolling = false;
});
}
}
}
위의 코드를 적용하여 android에서 실행해보면 스크롤을 이동할 때만 스크롤이 보여지는 것을 볼 수 있다.
여기서 NgZone은 좀 생소할 수도 있는데
일전에 연동되는 변수를 이용하여 화면을 열심히 바꿔도 적용이 되지 않아 찾은 기능이다.
https://angular.io/guide/zone에서 다시 찾아보니
NgZone을 사용하면 HTML에서 업데이트하기 위해 구성 요소의 변경 사항을 자동으로 감지할 수 있다고 한다.
나는 보통 NgZone을 제대로 코드를 작성하였는데도 뭔가 화면 변화가 이루어지지 않을 때, 사용해보는 편이다.