天天看點

vue禁止頁面滾動條_vue彈窗後如何禁止滾動條滾動?

常見場景

在許多填寫表單的頁面中,都會彈出一個選擇器,讓你在彈窗中選擇項目。有時,彈窗本身容納不下内容,需要讓它不斷滾動來展示,但因為事件是冒泡的,有時就會造成底部(body 的Z-index肯定是在下面的 )的内容也在滾動。這内外一起滾,就有點尴尬了。

舉例,下面兩張圖裡,都有類似的問題。那麼怎麼解決呢?

vue禁止頁面滾動條_vue彈窗後如何禁止滾動條滾動?
vue禁止頁面滾動條_vue彈窗後如何禁止滾動條滾動?

從event. target入手

一種思路就是從事件入手,如果事件對象不是彈窗的話,就讓它什麼都不做。

(其實這裡有個疑惑,為什麼不能通過阻止冒泡來阻止外層的body滾動呢?換了好幾個事件類型都不行,不管是scroll還是touchmove,很奇怪。

實踐發現,touchmove事件的确不會冒泡了,但body仍然在滾動。。。那我不就不知道事件實作的機制到底是什麼了,而且用浏覽器模拟的移動端,也不知道是不是模拟有誤。。。

總之,event.stopPropagation() 方法在這裡不是很管用。。。

)。

比如圖一中的每一欄滾動條,classname為listcol,而彈窗為.listcol,那麼可以這麼做:

$('.box--listcol').on('touchmove', function(event) {

if(event.target.className.indexOf('listcol') === -1)