日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

禁止遮罩层以下屏幕滑动----正解(更新版)

發布時間:2024/10/12 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 禁止遮罩层以下屏幕滑动----正解(更新版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

相信大家在做移動端開發的時候會經常遇到這種場景,需要適時的彈出遮罩(有時為了突出還會在外面加上蒙層),彈窗出現以后,為了追求良好的用戶體驗,遮罩以下的屏幕是禁止滑動的。在網上找了很多資料,大體就這兩種做法,但都有不完善的地方。加上自己的思考和總結,想到一個辦法,應該可以解決你的問題。

a)大眾型

一般,大家想到的都是給body或者html添加overflow:hidden樣式,當然height要設置成100%。這樣在大多數機型上是可以的,但有個別的就是不起作用,我也不知道為什么(求知道的大神告知)。

b)高端型

因為有這種彈窗遮罩需求的,一般為移動端,pc很少會出現,就算是在pc的場景里有需要,上面那種方法也是可以解決的,所以可以考慮從移動端特有的滑動事件touchmove下手,當彈窗出現以后阻止該事件的默認行為(關閉彈窗后解除阻止)不就行了嗎,于是又有了下面的方法。

1 $(document).on('touchmove',function(e) { 2 var e = e || window.event; 3 e.preventDefault(); 4 })

?

這種方法在移動端是可以解決滑動的問題,但有種情景就顯得有點尷尬了,移動端屏幕本來就小,如果彈窗的內容過多也需要滑動(比如很長的活動規則),因為彈窗出現的時候已經禁止了滑動事件,那可如何是好????

c)改進型

在這種情形之下我想到了另外一種完美的辦法,就是在禁止滑動之前先做一下判斷,如果是在彈窗中觸發的滑動事件就不阻止默認行為,其他地方同上。判斷那部分我是通過類名判斷的,通過其他的方法也是可以的(比如id),具體如下:

1 $(document).on("touchmove",function(e) { 2 var e = e || event, 3     target = e.target || e.srcElement; 4 if(e.target.className.indexOf("shadeBox") >= 0) { 5 e.preventDefault(); 6 } 7 })

?

上面的類名shadeBox是彈窗的蒙層的類名。也就是在蒙層上面滑動,事件是被禁止的,剩下的一部分就是彈窗了,所以彈窗的內容可以滑動。

以上有什么說的不對的,或者第三種方法還有不試用的情景的,還望指出,大家共同學習進步\(^o^)/~

?

更新說明:

  當我把這個東西分享給身邊人用的時候,最后還是發現了問題,果然群眾的眼睛還是雪亮的。問題如下:

當彈框內容過多,彈框也需要滑動的時候,因為彈框內部沒有禁止touchmove,所以是可以滾動的,問題是當滾動到最底部繼續往下滑的時候,奇怪的事情就發生了,此時頁面還是會發生滑動,(在最上面的時候和這道理一樣)。

我想的是可能彈框內部touchmove冒泡,然后到body上發生滑動。于是在彈框內部阻止冒泡不就行了,于是做如下調整:

1 $(document).on("touchmove",function(e) { 2 var e = e || event, 3     target = e.target || e.srcElement; 4 if(e.target.className.indexOf("shadeBox") >= 0) { 5 e.preventDefault(); } 6 else { 7 e.stopPropagation(); 8 } 9 })

?

修改以后,發現然并卵。。。

不知道為什么彈框內部并沒有阻止touchmove的冒泡,好奇怪。

現在的想法是,監聽滑動事件,當滑動到底部或者最頂端時,禁止touchmove,并根據手指滑動的方向來釋放開touchmove事件,即頂部的時候往下滑是放開事件,最底部的時候向上滑是放開事件。

雖然這邊說的簡單,但要實現這一功能確實太麻煩,如果只是在h5頁面里面,完全沒必要花這么多時間和精力在這個上面,如果是APP,追求極致那就另當別論了。

再說上面的情況是彈框內容過多的時候也需要滑動,如果彈框不需要滑動,跳出彈框以后直接全局禁用touchmove就好了,就沒有上面的問題了。

不知道還有沒有更好的做法?????

??

轉載于:https://www.cnblogs.com/gaohui/p/5819777.html

總結

以上是生活随笔為你收集整理的禁止遮罩层以下屏幕滑动----正解(更新版)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。