国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

禁止彈窗中蒙層底部頁面跟隨滾動的幾種方法

2024-05-06 15:23:47
字體:
來源:轉載
供稿:網友

場景概述

眾所周知,彈窗是一種常見的交互方式,而蒙層是彈窗必不可少的元素,用于隔斷頁面與彈窗區塊,暫時阻斷頁面的交互。但是,在蒙層元素中滑動的時候,滑到內容的盡頭時,再繼續滑動,蒙層底部的頁面會開始滾動,顯然這不是我們想要的效果,因此需要阻止這種行為。

那么,如何阻止呢?請看以下分析:

方案分析

方案一

打開蒙層時,給body添加樣式:

overflow: hidden;height: 100%;

在某些機型下,你可能還需要給根節點添加樣式:

overflow: hidden;

關閉蒙層時,移除以上樣式。

優點:

簡單方便,只需添加css樣式,沒有復雜的邏輯。

缺點:

兼容性不好,適用于pc,移動端就尷尬了。

部分安卓機型以及safari中,無法無法阻止底部頁面滾動。

如果需要應用于移動端,那么你可能需要方案二。

方案二

就是利用移動端的touch事件

Touch對象代表一個觸點,可以通過event.touches[0]獲取,每個觸點包含位置,大小,形狀,壓力大小,和目標 element屬性。

{screenX: 511, screenY: 400,//觸點相對于屏幕左邊沿的Y坐標clientX: 244.37899780273438, clientY: 189.3820037841797,//相對于可視區域pageX: 244.37, pageY: 189.37,//相對于HTML文檔頂部,當頁面有滾動的時候與clientX=Y 不等force: 1,//壓力大小,是從0.0(沒有壓力)到1.0(最大壓力)的浮點數identifier: 1036403715,//一次觸摸動作的唯一標識符radiusX: 37.565673828125, //能夠包圍用戶和觸摸平面的接觸面的最小橢圓的水平軸(X軸)半徑radiusY: 37.565673828125,rotationAngle: 0,//它是這樣一個角度值:由radiusX 和 radiusY 描述的正方向的橢圓,需要通過順時針旋轉這個角度值,才能最精確地覆蓋住用戶和觸摸平面的接觸面target: {} // 此次觸摸事件的目標element}

利用移動端的touch事件來阻止默認行為(這里可以理解為頁面滾動就是默認行為)。

// node為蒙層容器dom節點node.addEventListener('touchstart', e => { e.preventDefault()}, false)

簡單粗暴,滾動時底部頁面也無法動彈了。假如你的蒙層內容不會有滾動條,那么上述方法prefect。

但是,最怕空氣突然安靜,假如蒙層內容有滾動條的話,那么它再也無法動彈了。因此我們需要寫一些js邏輯來判斷要不要阻止默認行為,復雜程度明顯增加。

具體思路:判定蒙層內容是否滾動到盡頭,是則阻止默認行為,反之任它橫行。

Tip:這里我發現了一個小技巧,可以省略不少代碼。在一次滑動中,若蒙層內容可以滾動,則蒙層內容滾動,過程中即使蒙層內容已滾至盡頭,只要不松手(可以理解為touchend事件觸發前),繼續滑動時頁面內容不會滾動,此時若松手再繼續滾動,則頁面內容會滾動。利用這一個小技巧,我們可以精簡優化我們的代碼邏輯。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 望谟县| 肥乡县| 龙山县| 望江县| 化德县| 泾阳县| 甘孜| 遂川县| 大名县| 青川县| 房山区| 隆德县| 彩票| 华安县| 张家口市| 崇仁县| 隆尧县| 临颍县| 克什克腾旗| 深泽县| 内江市| 辽阳市| 湛江市| 竹北市| 宁海县| 大渡口区| 太谷县| 十堰市| 滦南县| 遂宁市| 寿光市| 秦皇岛市| 九台市| 梓潼县| 商城县| 肇东市| 察雅县| 柳州市| 福建省| 吉木萨尔县| 周至县|