彈窗滑動,形成body跟隨滑動解決辦法

  今天測試的時候遇到一個移動端的bug,爲何說是移動端的呢,由於在谷歌瀏覽器的移動模式下,這個是不會出現的。先描述具體的狀況。一個長頁面(確定是比手機長的頁面,因此確定會滑動),裏面有一個按鈕,點擊按鈕的時候,會有一個比屏幕小的彈窗,出現遊戲規則。這個遊戲規則也是超出這個彈窗的大小的,多以這個彈窗也是會滑動的。javascript

  真機測試的時候發現,當彈窗滑動到最低端的時候,繼續向上滑動,發現底部的body頁面也開始向上滑。我已經對body設置了overflow:hidden。可是移動端仍是無論用,因此在網上尋找答案。主要是兩種解決辦法。css

  第一種:html

  就是在彈窗彈起的時候直接把滑動事件touchmove禁止了。可是這樣的話,咱們的彈窗裏面的內容也是不能滑動,這顯然是不能夠的。因此咱們嘗試了第二種解決方案。java

  第二種:jquery

  在彈窗彈起的時候把body的定位改成fixed,而後計算出滾動的距離,最後給body賦值。當彈窗消失的時候,把上面的操做倒過來。下面直接看代碼:瀏覽器

  1 <!DOCTYPE html>
  2 <html>
  3 
  4     <head>
  5         <meta charset="UTF-8">
  6         <title>測試移動端滑動的問題</title>
  7         <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  8         <link rel="stylesheet" type="text/css" href="css/cssReset.css" />
  9         <link rel="stylesheet" type="text/css" href="css/lottery.css" />
 10         <style type="text/css">
 11             button{
 12                 position: fixed;
 13                 left: 0;
 14                 top: 100px;
 15                 width: 100px;
 16                 height: 40px;
 17                 line-height: 40px;
 18                 font-size: 28px;
 19             }
 20         </style>
 21     </head>
 22 
 23     <body>
 24         <div id="big_box">
 25             <button>按鈕</button>
 26             <div class="gz-mc" style="display: none;">
 27                 <div class="gz-nr">
 28                     <div class="gz-nrgb"><span>X</span></div>
 29                     <h4>一.玩法說明</h4>
 30                     <p>目前競彩足球共有6種玩法,分別是「混投」,「勝平負」,「讓球勝平負」,「二選一」,「猜比分」,「總進球」。 競猜的比賽均優選自各國主流比賽,從相關主流體育媒體網站都可查閱相關賽事。比賽對陣主隊在前,客隊在後.</p>
 31 
 32                     <p>1.勝平負:競猜兩支球隊,在90分鐘內(含傷停補時,不含加時)的勝平負結果。 投注選項有三、一、0(勝、平、負) 。</p>
 33 
 34                     <p>2.讓球勝平負:競猜兩支球隊讓球之後,在90分鐘內(含傷停補時,不含加時)的勝平負結果。 投注選項有三、一、0(勝、平、負) 。</p>
 35 
 36                     <p>3.比分:競猜兩支球隊在90分鐘內(含傷停補時,不含加時)的比分。 投注選項有1:0 2:0 3:0等31種選項。</p>
 37 
 38                     <p>4.總進球:競猜兩支球隊在90分鐘內(含傷停補時,不含加時)的總進球數量。 投注選項有0、一、二、三、四、五、六、7+ 。</p>
 39 
 40                     <p>5.二選一:本功能是結合勝平負和讓球勝平負兩個玩法的混合過關。將一場比賽的三個選項,簡化成兩個選項。賽程只取讓球值爲+1和-1的比賽。 讓球值爲-1的比賽,【主勝】爲勝平負的主勝;【客不敗】爲讓球勝平負的客勝。 讓球值爲+1的比賽, 【主不敗】爲讓球勝平負的主勝;【客勝】爲勝平負的客勝。</p>
 41 
 42                     <p>注:</p>
 43                     <p>(1)讓球:讓球值爲負數表示主隊讓客隊多少球,正數表示客隊讓主隊多少球,讓球值一旦肯定就再也不調整。</p>
 44 
 45                     <p>例如:皇馬-1 VS巴薩,表示皇馬讓1球,皇馬以1球以上打敗巴薩時,賽果爲3。皇馬以1球打敗巴薩時,賽果爲1。當皇馬負、打平巴薩時,賽果爲0。</p>
 46 
 47                     <h4>二.過關方式</h4>
 48 
 49                     <p>1.玩家選擇1種投注結果的爲單式投注;選擇2種或2種以上投注結果的爲複式投注。</p>
 50 
 51                     <p>2.玩家選擇1場比賽進行投注的爲單場投注;選擇2場或2場以上比賽進行串聯投注的爲過關投注。在過關投注中,所選比賽的結果所有競猜正確才能中獎。 </p>
 52                     <h4>三.獎金計算</h4>
 53 
 54                     <p>1.競彩足球的過關投注獎金會根據投注等狀況進行實時的調整;投注方案的中獎金額以完成投注最終出票時刻的獎金爲準,不受投注完成後獎金調整的影響。 投注頁面的獎金賠率也僅供參考。</p>
 55 
 56                     <p>2.單張彩票的中獎獎金=單注獎金*倍數;單注獎金=投注基數*所選比賽的獎金賠率連乘。目前投注基數爲20000金幣.</p>
 57 
 58                     <p>例如:用戶投注2場比賽2串1過關而且中獎,出票時的獎金賠率分別是1.68和3.95,倍數爲100倍,單注獎金=20000金幣x1.68x3.95=132720金幣,方案總獎金=132720x100倍=132072000金幣</p>
 59 
 60                     <p>3.串聯過關最高獎金限制</p>
 61                     <p>單張彩票最高限額:</p>
 62                     <p>(1)選擇2-3場過關投注的,單張最高獎金限額40000萬金幣;</p>
 63                     <p>(2)選擇4-5場過關投注的,單張最高獎金限額60000萬金幣;</p>
 64                     <p>(3)選擇6-8場過關投注的,單張最高獎金限額80000萬金幣。</p>
 65 
 66                     <h4>四.延期、中斷、取消的比賽,如何算獎?</h4>
 67 
 68                     <p>1.延期比賽如何處理:</p>
 69                     <p>推遲時間未超過36小時,則正常算獎;</p>
 70                     <p>推遲時間超過36小時或沒法肯定時間,則該場爲無效場次,按比賽取消算獎;</p>
 71                     <p>取消賽事算獎:單關固定玩法返還投注金額,過關投注該場賠率值按1.0計算獎金;</p>
 72 
 73                     <p>2.中斷比賽如何處理:</p>
 74                     <p>36小時內繼續完成比賽則正常算獎;</p>
 75                     <p>36小時內未完成比賽則該場爲無效場次,按比賽取消算獎;</p>
 76 
 77                     <p>3.取消賽事算獎:單關固定玩法返還投注金額,過關投注該場賠率值按1.0計算獎金;</p>
 78 
 79                     <h4>五.截止投注時間、開獎時間</h4>
 80                     <p>截止投注時間爲比賽正式開始前5分鐘,單式投注的開獎時間爲比賽結束後,複式投注的開獎時間爲所選全部比賽結束後。</p>
 81                     <p>注:可根據投注額、突發事件等因素,拒絕某些大額投注、暫停或提早截止針對該場比賽的全部投注。</p>
 82                 </div>
 83             </div>
 84         </div>
 85     </body>
 86     <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
 87     <script type="text/javascript">
 88         for(var i = 0; i < 100; i++) {
 89             $("#big_box").append("<p>這是第" + i + "條數據</p>");
 90         }
 91         $("button").click(function() {
 92             $(".gz-mc").show();
 93             $("body").css({
 94                 "overflow": "hidden"
 95             });
 96             //$('body').on('touchmove', preventDefaultFn);
 97             stopScrollLong();
 98         })
 99 
100         $(".gz-nrgb span").click(function(){
101             $(".gz-mc").hide();
102             $("body").css({
103                 "overflow": "auto"
104             });
105             recoverScrollLong();
106         })
107         function stopScrollLong() {
108             var top = -$(window).scrollTop();
109             $('body').css({
110                 'position': 'fixed'
111             })
112             setTimeout(function() {
113                 $('body').css({
114                     'top': top + 'px'
115                 })
116             }, 10)
117         }
118 
119         function recoverScrollLong() {
120             var top = parseInt(-$('body').css('top').replace('px', ''));
121             $('body').css({
122                 position: 'static'
123             })
124             $(window).scrollTop(top);
125         }
126     </script>
127 
128 </html>

忽然發現少了兩個css文件,這兩個裏面一個是清楚css默認格式的,一個是給彈窗鞋寫樣式的。大家能夠本身寫,沒有什麼問題。這裏也附上百度的網盤連接,請點這裏。密碼:kiwkapp

  這個時候就能達到咱們想要的效果了。簡單的記錄一下ide

相關文章
相關標籤/搜索