常見場景
在許多填寫表單的頁面中,都會彈出一個選擇器,讓你在彈窗中選擇項目。有時,彈窗本身容納不下内容,需要讓它不斷滾動來展示,但因為事件是冒泡的,有時就會造成底部(body 的Z-index肯定是在下面的 )的内容也在滾動。這内外一起滾,就有點尴尬了。
舉例,下面兩張圖裡,都有類似的問題。那麼怎麼解決呢?
從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)