移動端 彈出層 沒法滾動 解決辦法

首先CSS層面,在<html>標籤上增長一個類名,例如fascroll,而後配合以下CSS和JS代碼:html

.,
.body {
    overflow: hidden;
}
.body {
    position: relative;
}fascrollfascrollfascroll

而後,當浮層出現的時候:瀏覽器

$('html').addClass('fascroll');

當浮層隱藏的時候:ide

$('html').removeClass('fascroll');

能夠讓一部分瀏覽器的窗體不能滾動,但不包括Safari等瀏覽器,怎麼辦呢?code

咱們能夠在浮層touchmove的時候,阻止默認事件達到避免滾動的問題,例如:htm

$('aside').on('touchmove', function(event) {
    event.preventDefault();
});

這種處理兼容性強,效果最好,可是有一個問題,就是若是浮層本身也有滾動,那麼這種處理會讓浮層裏面本身的滾動行爲也沒法觸發,所以,咱們的處理要更進一步,以下:事件

  1. 當手指touchstart的元素不是滾動容器同時不失容器的子元素的時候,阻止默認行爲,;
  2. 若是手指touchstart的元素是滾動容器或者容器子元素的時候,不阻止默認行爲,但不包括滾動到容器邊緣的時候。
相關文章
相關標籤/搜索