-webkit-overflow-scrolling: auto | touch;
auto
: 普通滾動,當手指從觸摸屏上移開,滾動當即中止touch
:滾動回彈效果,當手指從觸摸屏上移開,內容會保持一段時間的滾動效果,繼續滾動的速度和持續的時間和滾動手勢的強烈程度成正比。同時也會建立一個新的堆棧上下文。vue
over-flow: auto; /* winphone8和android4+ */ -webkit-overflow-scrolling: touch; /* ios5+ */
上代碼:android
<div class="scrollContainer"> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> </ul> </div>
.scrollContainer{ width: 100px; height: 50px; -webkit-overflow-scrolling: touch; overflow-y: auto; overflow-x: hidden; } .scrollContainer>ul>li{ height: 20px; width: 100%; }
scrollContainer
加上定位position: absolute|relative
,滑動幾回後可滾動區域會卡主,不能在滑動此時,你應該給父級元素scrollContainer
加上以下代碼:ios
//解決第一個bug z-index:1; //解決第二個bug -webkit-backface-visibility: hidden; -webkit-transform: translate3d(0,0,0);
在vue項目中,咱們可能會遇到這樣的需求,例如:web
商品列表頁中,點擊某一商品,進入到詳情頁。vuex
從詳情頁中返回到商品列表頁,頁面應當顯示的頁面應當是以前的樣子。api
也就是說,滾動條的位置應該緩存下來;緩存
activated
中,監聽當前scrollContainer
父元素的滾動事件,滾動時的回調中,獲取到scrollTop
(滾動條距離滾動元素即scrollContainer
的距離)的值,存入到以及在deactivated
中移除掉當前滾動事件的監聽。sessionStorage|localStorage
中。固然,若是你使用了vuex,能夠直接將值放入vuex中進行管理;scrollTop
值從新賦予給當前div的滾動條我是用的vuex進行管理的滾動條位置,實現代碼以下:session
<div class="scrollContainer" ref="scroll"> //加了一個ref,用於獲取當前dom <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> </ul> </div>
computed:{ ...mapGetters([ "home_list_top" //vuex中的存放的滾動條的位置 ]) } ... methods:{ recordScrollPosition(e) { this.$store.dispatch("setHomeListTop",e.target.scrollTop); //實時存入到vuex中 } } ... activated(){ //滾動條位置的監聽放到activated是由於此頁面被keep-alive緩存了 this.$refs.scroll.scrollTop = this.home_list_top; //this.$refs.scroll拿到滾動的dom,即scrollContainer,this.home_list_top是存入到vuex裏的值 this.$refs.scroll.addEventListener("scroll",this.recordScrollPosition); //添加綁定事件 }, deactivated(){ //keep-alive 的頁面跳轉時,移除scroll事件 this.$refs.scroll.removeEventListener("scroll",this.recordScrollPosition); //清除綁定的scroll事件 }
若是有更好的辦法,互相交流。