JQuery 彈出層,始終顯示在屏幕正中間 添加遮罩時禁止滾屏


 

 

1.HTML代碼:

<div id="mask" class="mask"></div>
<a href="javascript:;" onclick="showMask()" >點我顯示遮罩層</a><br />
<a href="javascript:;" onclick="letDivCenter('#model')">點我讓DIV始終顯示在屏幕中間</a><br />
<a href="javascript:;" onclick="showAll('#model')">點我顯示所有</a><br />
<div>
   <div id="model" class="model">
       這是內容
  </div>
</div>

2.CSS代碼

<style type="text/css">
  .mask {
    position: absolute; top: 0px; filter: alpha(opacity=60); background-color: #777;
    z-index: 1002; left: 0px;
    opacity:0.5; -moz-opacity:0.5;
}
  .model{
    position: absolute; z-index: 1003;
    width:320px; height:320px; text-align:center;
    background-color:#0066FF; display: none;
}

</style>

3.js代碼

<script type="text/javascript" src="js/jquery-1.11.3.js"></script>
<script type="text/javascript">
  //兼容火狐、IE8
  function showMask(){
  $("#mask").css("height",$(document).height());
  $("#mask").css("width",$(document).width());
  $("#mask").show();
}
//讓指定的DIV始終顯示在屏幕正中間
function letDivCenter(divName){
  var top = ($(window).height() - $(divName).height())/2;
  var left = ($(window).width() - $(divName).width())/2;
  var scrollTop = $(document).scrollTop();
  var scrollLeft = $(document).scrollLeft();
  $(divName).css( { position : 'absolute', 'top' : top + scrollTop, left : left + scrollLeft } ).show();
}
function showAll(divName){
  showMask();
  letDivCenter(divName);
}
</script>

 

以上可參考原著 http://blog.csdn.net/z69183787/article/details/8108641

 

添加遮罩時禁止滾屏 可參考http://www.cnblogs.com/licf/p/4691556.html

寫頁面經常會遇到彈出層,為了突顯彈出層,一般會設一個遮罩

<div class="mask"></div>

遮罩層的樣式為:
.mask{
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.8);
position: fixed;
top: 0;
left: 0;
z-index: 998;
display: none;
}
可是這時會有一個問題,就是即使給遮罩層設為跟屏幕一樣高一樣寬,但一滾輪或手動時底下的頁面如超過一屏仍會滾,如果禁止呢?
有同學說這個不簡單嗎?直接給body設成100%高overflow:hidden就行了

以下代碼:
document.body.style.overflow='hidden';
document.body.style.height='100%';


在chrome里一試,果然行,紋絲不動啊,太神奇了是不是?可是不能光在chrome里測啊,咱還得考慮有人用了火狐啊QQ啊歐朋啊,在火狐里一試,頁面照樣能滾,
真叫人皺眉頭,不得已,繼續搜,看有沒有高見,又有同學說了把滾動條設為無,可是設為無只是不顯示並不代表頁面不滾哪,還有的說可以監聽事件滾動的時候把scroolTop的值改為0,
  window.onscroll= function (){
     document.body.scrollTop = 0
  }
試了一下好象也無濟於事哎(或許是手機端的事件跟電腦端不同原因),忽然想既然chrome里行,火狐不行沒准是兼容的問題,於是寫了一條加上:
document.body.style.overflow='hidden';
document.body.style.height='100%';
document.documentElement.style.overflow='hidden'

再試火狐也ok了,原來真是兼容性問題,但我們項目是在微信里用的,還得在微信里測下,
據說微信調用瀏覽器,如果手機上安裝了qq瀏覽器則會調用QQ瀏覽器,如果沒有則調用系統自帶的,在微信里一測,可以禁止滾動,但是在釋放時不行了,
別的瀏覽器釋放后能正常滾動,恢復到未彈出層時狀態,就是頁面超過一屏是可以滾動的,但是微信釋放后也不能滾動了,這
可怎么辦,前功盡棄了?只能再查,終於找到了,在touchmove時禁用瀏覽器默認事件,
document.addEventListener('touchmove', function (event) {

event.preventDefault();

})
我只需要在遮罩彈出時禁用,遮罩關閉時釋放,於是我改了下代碼:
var aBtn=$('#a1');      //點擊按鈕
var guide=$('.guide'); //彈出的遮罩層
var flag=0;        //標識,初始為0
aBtn.tap(function() {
guide.css('display', 'block'); //顯示遮罩
flag=1;

});
document.addEventListener('touchmove', function (event) {    //監聽滾動事件
if(flag==1){                            //判斷是遮罩顯示時執行,禁止滾屏
event.preventDefault();                   //最關鍵的一句,禁止瀏覽器默認行為
}
})
guide.tap(function(){
guide.css('display','none');     //隱藏遮罩
flag=0;                 //重置為0
});
這里我使用了zepto.js庫,再測了下,火狐,chrome,opera,QQ,系統默認的瀏覽器和微信,都能如願執行,費了幾個小時終於搞定啦

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM